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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

1 i. J/ N1 ~- o  L/**********************51单片机学习例程***********************
" o7 r( M8 W  w*  平台:Keil U4 + STC89C524 f5 t5 r! y* C7 i) W: J: v5 K& q
*  名称ED闪烁- u, M0 H0 l* e# u6 s
*  晶体:11.0592MHZ
1 K! q* J# ~- t5 R- c" [1 |/ e******************************************************************/6 q* s2 x. B; u, A$ }
#include <reg52.h>( O  ~6 T2 Q6 s# \( e$ U/ @) K% M

6 \+ c1 V5 R3 [1 f' U9 S. T3 C, W6 Bsbit led=P1^0;# {  Y' w( J  @4 T# y+ r
# s) r7 q) Q1 Y" A
' h9 ~$ `5 t1 [, @1 g  g4 P
/****************************************************+ j1 J5 r" V! P% _8 F" |4 o
*1 n* }) r; c+ i5 k  J8 M
*                延时子函数! h  }, x' h" K
*6 E% t9 \9 }/ U5 P$ S9 l6 l
*****************************************************/, V  [+ N0 D5 f& ~" J0 w
void delay(unsigned int i)
- b- D1 b# z% ~1 H1 I{$ d# w- r/ Q: J- |- j) m7 N
        unsigned int j;1 v- U  V+ X1 J$ o4 {6 T7 j
        unsigned char k;
; W$ x* L2 t2 G/ o" ~& |        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止4 \+ t3 G3 }$ p4 u& e2 O
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
9 E8 T$ n, z- y' Y1 \* e1 K5 e( x& k}
6 D: O6 K5 {# p# t% J/ q0 ]
8 m% V2 ~' R' y; V8 G. @1 F. a2 Y1 d1 A( P3 \6 u5 z% v' T1 T% e
/****************************************************
( }( l% F$ g6 o, b. m4 b) S*
  W4 V6 _+ f. d  @) u; v*                主函数,在死循环中实现LED闪烁; \! N" k. a) E* B! x7 ^
*
6 F+ x* T, |0 t" N: J! m6 k2 l% d*****************************************************/
+ L+ ]2 {4 b! t; }' iint main()+ F9 s- n$ M9 y( u. F  L( }3 }
{
4 a- Q& Q8 s* W        while(1); }4 e/ t: ~1 d. Z+ u
        {
. }; Y0 a+ f' F: l                led=~led;        //每隔一段时间即对输出取反。, ?/ ~' n* c1 C
                delay(3000); //闪烁间隔。间隔约为0.85S
* p. U- W- q4 z# H7 w9 q( u8 D        }
5 a6 k9 I2 t; z( Z) z        return(0);  ?8 N! E* j# V4 K1 G
}' I% _+ l) T! \- S

$ d1 w5 q8 l3 K5 Y3 a7 G2 A( o6 D6 J+ u

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑
7 b# O0 B( c5 |+ C+ K0 t' O8 m) s/ M7 Y& i3 Z
我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑 * p, E3 v" Q. Q. ?$ u

6 f( T3 ]5 s- j; ]0 L比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 06:38 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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