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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
这次说定时与中断,有人说,掌握了定时与中断,就掌握了一个单片机80%的功能;也有人说,中断是一个单片机的灵魂。这两句话无一不在强调中断的重要性,就让我们认识一下,中断到底是什么。
根据百度百科的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
举个例子,我正在吃饭呢,忽然老婆大人发话了,说在网上看上一个包,挺好的,让我帮着付款,于是我停下吃饭说好,去帮着付款,付完款,继续吃饭。
这个过程中,我是CPU;吃饭是主程序;老婆大人说话,触发了中断;我说好,安慰了老婆的情绪同时清零了中断标志;去付款,处理了中断子程序;付完款继续吃饭,回到了主程序。
STC89C52RC单片机中的中断分为三种:外部中断,一般是IO口的高低电平触发;定时/计数器溢出中断,一般是内部定时/计数器溢出中断;UART口中断,收发数据时引发的中断。这次只说定时/计数器溢出中断。
程序如下:
" G8 o& b; n3 E/ J# D
/**********************51单片机学习例程***********************8 J) j7 |0 s/ D( B. G
*  平台:Keil U4 + STC89C52
$ |. U' s6 L% O  H5 x*  名称ED闪烁
. G: k( W0 C( e6 a/ W*  晶体:11.0592MHZ! \+ e8 s6 e: c$ Z9 f  w" W
******************************************************************/. t5 z  B+ {7 q7 V% W4 d
#include <reg52.h>/ O: X6 z! }8 v+ F" J3 z

* V2 v2 g/ Y- }' l& F) wsbit led=P1^0;
( ?2 Q/ M& s  [% P' g
+ d1 j8 b" `) ]# Q
  _! S; g* W/ T# ~9 o/****************************************************
5 P5 l$ t( H# g" ?# e*4 z1 S4 _) d; G) B7 L/ ?
*                延时子函数
1 t6 C+ ], G% N3 C8 C- n*" y" V# A% H4 N- i' ~8 F  w
*****************************************************/! K* f" S) Z# @& f8 N
void delay(unsigned int i)
% z: D: ^) k  v8 l5 g+ |) O{
. X, k3 e9 s! d7 u  m0 {2 K        unsigned int j;
6 f$ q4 C( \0 j) u        unsigned char k;4 q9 P. y9 B* {1 i5 D8 Z
        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止
3 x; s: z+ g# Y- r4 h7 Z                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
  I6 ^8 S3 W$ Y0 Z( i$ E  O}+ l2 m8 c4 u8 R. {) r
2 [$ e4 g9 p- _6 I
9 p% z% P( J& Q6 j" u+ F
/****************************************************" n! d9 u' g8 B! q' F
*: @/ _6 l; O0 C. z4 G8 J9 O
*                主函数,在死循环中实现LED闪烁
3 y  @  R" X5 Q9 B$ V*' a) R; O: E# g' x! p
*****************************************************/5 k3 f4 z+ i: Q7 g9 U; k, w9 j: g0 @& q
int main()2 h* h* G; Q; T& \7 J0 B% r
{
8 @* B  y8 a; \        while(1)9 v  z+ H- v# O% Y2 l: w+ H" a( \4 D
        {
& o1 u5 L) J  _# d                led=~led;        //每隔一段时间即对输出取反。
& {6 [3 s5 W! Q! l2 u, E                delay(3000); //闪烁间隔。间隔约为0.85S
8 c2 Z" |# a* [3 p' S        }
6 s% r2 h+ h: Q! _' {        return(0);5 S9 o: l' _' ]1 f- b1 B
}3 B, c% O5 |1 f' z
2 |$ V6 T+ E+ ]6 h' }; m* B' ]* J
" ]) b  W+ R! `1 j0 Q

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑
2 w8 X$ y5 E& l- P, E( N: _* s& V) b  U
我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑
' d' `7 Y' ^+ Y, x
1 Q# k; C' ~$ ?0 K( j8 B8 h' v比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 18:00 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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