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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

. v6 _" ^! X! R3 `' m/**********************51单片机学习例程***********************
! }' x+ }  x% v2 w- @5 K' p*  平台:Keil U4 + STC89C523 l/ v# h5 k) i- r! _/ D
*  名称ED闪烁& h, g2 A, H: y! y& U
*  晶体:11.0592MHZ; [) l& i) ~- q6 f$ y
******************************************************************/: B) Z- m4 }* }% b
#include <reg52.h>
% V/ a7 `! n" ]- o; }6 O. {! ]% N2 a$ o. ^4 x
sbit led=P1^0;
1 H  r/ @6 x1 f6 S3 P- g8 R* I- D7 W) W3 W( P4 U

( L' H; C/ q4 o+ w; \, P6 F( a4 y. A/****************************************************0 u- L& ]; o) P
*
* a0 i& k7 {- P2 B+ Z*                延时子函数
/ G* I# Y) n2 T1 _** U# ~2 `" d: N: @- F
*****************************************************/$ y0 W( F* }, `0 Y, f
void delay(unsigned int i)
5 K/ ?6 U9 n8 X0 q( q+ t  B! F- h{9 [% ?- s" T, [$ C+ a
        unsigned int j;
" l# X. v3 b2 S$ y, ]        unsigned char k;6 v* V' P% l7 L1 U* I
        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止2 Q, ^$ W1 d& X4 }" c0 e) z7 ~! Z
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止; e8 p; r" E; G8 K, s5 ~
}# o% N7 P) K% K( v
! C0 ^9 [* O; n& L4 _" u+ {

- Y, Y3 S# U+ x4 ?2 @2 H7 }/****************************************************5 i6 l4 ?/ k$ ~4 _
*( O& I* i2 u1 D. Z% l
*                主函数,在死循环中实现LED闪烁
% ^, p) N$ _, a1 V; B5 [5 y*
  s6 v( ~+ C5 f1 G  {0 D*****************************************************/2 `+ Z: J+ y* y
int main()8 g* E+ g7 ^5 q5 D- P) D+ n  D
{7 D0 D4 X& a6 X% {: r3 J
        while(1)
0 |# H- |6 A  B1 ], F        {
% b- y4 R. _$ I9 H; \                led=~led;        //每隔一段时间即对输出取反。
0 T( O2 o1 O" I  C7 c                delay(3000); //闪烁间隔。间隔约为0.85S
: Q( T1 z! I1 T7 ?, M% t+ W; L) {        }
" @' W( P. W( ]; d1 r/ X6 d* `        return(0);! A, v, {9 d* K* v
}
: ]  F0 P6 j- ]% \$ G
- \1 D5 K. l! C9 D. g5 J# G7 o( t6 b5 v1 h

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑 * M# U( ^" d& Q! s" k. @

' _% K5 Q2 c( Q% k/ W* V$ Z" |我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑
/ s0 f6 b8 A& Q6 G4 ~$ G7 a: ?# A+ m
比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 13:15 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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