找回密码
 注册
关于网站域名变更的通知
查看: 202|回复: 2
打印 上一主题 下一主题

学51单片机-定时中断与LED闪烁

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-22 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
这次说定时与中断,有人说,掌握了定时与中断,就掌握了一个单片机80%的功能;也有人说,中断是一个单片机的灵魂。这两句话无一不在强调中断的重要性,就让我们认识一下,中断到底是什么。
根据百度百科的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
举个例子,我正在吃饭呢,忽然老婆大人发话了,说在网上看上一个包,挺好的,让我帮着付款,于是我停下吃饭说好,去帮着付款,付完款,继续吃饭。
这个过程中,我是CPU;吃饭是主程序;老婆大人说话,触发了中断;我说好,安慰了老婆的情绪同时清零了中断标志;去付款,处理了中断子程序;付完款继续吃饭,回到了主程序。
STC89C52RC单片机中的中断分为三种:外部中断,一般是IO口的高低电平触发;定时/计数器溢出中断,一般是内部定时/计数器溢出中断;UART口中断,收发数据时引发的中断。这次只说定时/计数器溢出中断。
程序如下:

: Q1 G3 b0 x4 n( Y2 S+ }1 I/**********************51单片机学习例程***********************: S$ l. s4 f+ C) p  f! R
*  平台:Keil U4 + STC89C527 L2 t& {4 T9 U, z! h8 k5 G' \9 o
*  名称ED闪烁
; i+ q/ g; T& L8 l*  晶体:11.0592MHZ1 G! }, w1 N- ?8 @& Y7 s
******************************************************************/& D) o( L2 c( X  x$ `7 V& q; F! ]
#include <reg52.h>1 k3 B$ i7 K. M+ ?/ O; Z
+ a2 P7 Q8 i8 _( f# E
sbit led=P1^0;
; _: \9 N8 F) M; ?9 }; ]( F
6 J9 m4 v+ P  Y& _0 T7 y" F
6 W8 `* d, W* f) w/****************************************************
) v( o) f# e$ j; Q' }8 I*
' _( \* G. q3 M2 c*                延时子函数
, B) ]5 T3 J& C4 F' I. g+ y$ j*0 X% z/ n$ Y* g# R( O3 K
*****************************************************/
; x. }4 n1 u+ z! mvoid delay(unsigned int i)1 M1 a+ J: x8 e' J3 A. I
{% K2 x, @# _/ _4 L3 D! J
        unsigned int j;
) @/ Y' u$ n: _2 Q* Q8 Z        unsigned char k;
1 P5 P- i- T7 \; E7 N: q        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止5 f% d8 C. R4 O8 t6 ~& z
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
1 f  a/ X5 S* b2 I* [* B0 F}
) z9 ^# u7 v" e( C8 @6 {3 `7 f1 `; ?: o7 j

% }3 m9 N" u7 O' J" G/****************************************************
6 ?+ ^5 n. Q1 z6 l# {*
. D4 e( S: v% C7 b! X*                主函数,在死循环中实现LED闪烁
5 L# j% E- Y" p$ I2 |+ i) Y/ [" D8 i4 ?*: m6 v8 N, {2 g. [! t
*****************************************************/1 l+ m6 M& |, b: F: O9 d
int main()
& P8 ^4 \4 k3 l/ t- h# R" q$ e, R{5 G1 e( r$ `7 [7 G* G9 @
        while(1)6 U4 S' j# t: B
        {
  d3 }) a8 q, r3 ?                led=~led;        //每隔一段时间即对输出取反。
: Z* e9 T9 p5 E( G* t# X+ J4 A3 ?                delay(3000); //闪烁间隔。间隔约为0.85S8 i8 Z+ k' ?* u0 ^. E  v
        }
2 c3 W, ?. H' N, q& e        return(0);
( ?+ _$ L7 H* [1 }5 T}
6 z( J1 E# ^5 k0 o# k+ d$ a6 Z( H6 z% k
, W* E) l2 v; ?" Z, ~( J

LED延时闪烁.zip

20.83 KB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑
( D+ ~1 |6 P0 V4 v. o
- k- \/ ?. ^. ?0 y我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑
' D) `' \6 J* U$ [- G/ C- i
) \% ^/ z7 V: I, m& R2 W+ A比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-12 08:29 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表