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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

' p% z! L& B, h5 Z/**********************51单片机学习例程***********************
0 P' w5 V7 w. z. J+ V+ s*  平台:Keil U4 + STC89C529 ~" Z$ u5 `; ]2 W( ^
*  名称ED闪烁
9 n; S1 V' m; Z. A1 ^! C% T' i*  晶体:11.0592MHZ+ r/ j: M6 Y# p5 M! E+ g
******************************************************************/; L* u0 O* G; h9 w+ o. q4 [
#include <reg52.h>0 R( w4 f6 }, Y' X
* `) r" A7 Q5 c% c6 |% L- _2 e
sbit led=P1^0;
; K: u$ c6 k" i- h+ p
1 r7 G/ Q3 S7 m( A8 j3 h* L; ^& }1 q6 Q/ ^
/****************************************************
2 Z: _5 y, y, q; }0 B: v*
0 b1 O, L/ m5 o" o3 V- ~*                延时子函数
( r2 x9 D1 Z( q*: B  ~+ a# a- u6 W. e3 M
*****************************************************/1 P7 J7 Z1 [, c
void delay(unsigned int i)4 O1 b6 h& E! V7 I% l& n* v
{3 _0 a! ^! @6 U* k* q0 P
        unsigned int j;
4 c1 E3 L1 |: `: _" J! C! m        unsigned char k;& M. s9 _1 t8 X* h% P. T+ h* u8 F
        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止" Y1 n. B/ f3 @
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止4 H! [/ }0 j6 i# V. N
}# N% |& o- A' N

& i  a) C5 \; R) L) b4 D7 M: T0 S
/****************************************************9 o; J3 q  Y5 C' W" C
*; r3 L, v5 {3 V' E) J4 W; k
*                主函数,在死循环中实现LED闪烁7 o, l* v- \& F8 t
*/ s0 j: z0 U7 s+ o
*****************************************************/$ L4 U2 |0 A) }- W- G) ^
int main()
" o* j( a8 c+ s* b: z7 O{) w+ ?- T: i7 B
        while(1)
* q! ?9 G6 o$ D, @6 K        {
0 ~$ b6 |5 i% D                led=~led;        //每隔一段时间即对输出取反。& m8 e: D" s5 K3 @
                delay(3000); //闪烁间隔。间隔约为0.85S
% Q; m, x( Z, X* D# w        }4 M  e/ |9 n2 c" S: \' j
        return(0);; D8 {' d  e( n( p
}
& Y5 R% G2 X+ ?! j9 w/ y
" u; O9 t" o3 V: I( G4 }# o9 `4 A- j% I

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑 - t/ s  N$ \# x6 ~

. p( z9 F" B, G6 \# B. a我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑
/ [0 V! b& K+ ?! ^" [: t
9 E. `$ L+ G( @/ c, e) S1 R比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-12 05:45 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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