找回密码
 注册
查看: 198|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
这次说定时与中断,有人说,掌握了定时与中断,就掌握了一个单片机80%的功能;也有人说,中断是一个单片机的灵魂。这两句话无一不在强调中断的重要性,就让我们认识一下,中断到底是什么。
根据百度百科的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
举个例子,我正在吃饭呢,忽然老婆大人发话了,说在网上看上一个包,挺好的,让我帮着付款,于是我停下吃饭说好,去帮着付款,付完款,继续吃饭。
这个过程中,我是CPU;吃饭是主程序;老婆大人说话,触发了中断;我说好,安慰了老婆的情绪同时清零了中断标志;去付款,处理了中断子程序;付完款继续吃饭,回到了主程序。
STC89C52RC单片机中的中断分为三种:外部中断,一般是IO口的高低电平触发;定时/计数器溢出中断,一般是内部定时/计数器溢出中断;UART口中断,收发数据时引发的中断。这次只说定时/计数器溢出中断。
程序如下:
5 C5 Y1 l: d' h  C8 Y/ g( N0 d) R
/**********************51单片机学习例程***********************# b1 V8 l/ A! s4 L
*  平台:Keil U4 + STC89C52
% i: y: \& z0 z8 c*  名称ED闪烁2 P' y; F9 ?. v  O' n3 T
*  晶体:11.0592MHZ
# x  f) ?/ ^1 |3 Y7 X******************************************************************/
# |) D3 Z2 O* m; c' h. X6 l7 l#include <reg52.h>! s# k, d8 X4 l/ M# }9 ^
! r: T8 x& o9 D9 x. V9 _: E
sbit led=P1^0;( W* }; W. ^* P0 m$ b
! K& [6 d: C  \# [8 s

& \' v' H, B9 c' v. P/****************************************************
, @: c) \- N' }' o*
5 E. `# f6 Y- A' g* h*                延时子函数% s5 s: x) e' a/ a* A+ j- I
*
2 d1 Q. _- t0 |! B% q, t+ R*****************************************************/
( T2 n- o5 A, Z4 Rvoid delay(unsigned int i)
, W1 m1 x) b# l1 W{6 n, S+ Q) J( X, x
        unsigned int j;$ U8 Y( _+ r0 r6 A  ]& G7 i
        unsigned char k;
  a' c" k! ^, _/ H6 _0 T, \/ U        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止2 E, p' q2 V, E) ]- R) G
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
% G, i# q1 m, w4 y}; {9 F/ z8 h$ C9 Z' J% u  {
1 Z0 M. N* d8 F* D* ?4 `4 o
8 M( H; G& ?9 W! j( ~
/****************************************************8 n& O( z5 e8 ~0 n
*; B4 D+ D$ {0 ~; t# ?
*                主函数,在死循环中实现LED闪烁8 R$ j$ @, f: B$ r4 H. \+ K
*
$ I+ v" Y2 b4 N5 F+ V3 `*****************************************************/' N% P9 ^& j: A+ s
int main()) A/ i6 C+ P3 x+ B, B
{* p8 L( |0 I* Q+ h! N
        while(1)
" A7 ]8 h& S8 S9 L        {" b& t$ t% t! F# _# W
                led=~led;        //每隔一段时间即对输出取反。/ {- }% d! q" z; ~! v3 C1 B
                delay(3000); //闪烁间隔。间隔约为0.85S5 v$ F) G+ C4 y7 a
        }
( S. ]" F+ c# Y, m, Z/ g8 c        return(0);. e/ o. I. d0 {
}2 Q9 V, a* o2 |3 v: ^

( @1 Z2 d6 c/ j2 X; Q# B: j% B7 A% J

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑
" u8 W: _& x, |" |! Q
2 ]- X2 e+ i& e8 \我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑 . Y2 e7 j0 {& @
2 Y  y/ c/ J" q; q
比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-5-31 01:12 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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