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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
这次说定时与中断,有人说,掌握了定时与中断,就掌握了一个单片机80%的功能;也有人说,中断是一个单片机的灵魂。这两句话无一不在强调中断的重要性,就让我们认识一下,中断到底是什么。
根据百度百科的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
举个例子,我正在吃饭呢,忽然老婆大人发话了,说在网上看上一个包,挺好的,让我帮着付款,于是我停下吃饭说好,去帮着付款,付完款,继续吃饭。
这个过程中,我是CPU;吃饭是主程序;老婆大人说话,触发了中断;我说好,安慰了老婆的情绪同时清零了中断标志;去付款,处理了中断子程序;付完款继续吃饭,回到了主程序。
STC89C52RC单片机中的中断分为三种:外部中断,一般是IO口的高低电平触发;定时/计数器溢出中断,一般是内部定时/计数器溢出中断;UART口中断,收发数据时引发的中断。这次只说定时/计数器溢出中断。
程序如下:
6 h% p# a3 z3 Y5 [/ P
/**********************51单片机学习例程***********************
. m$ I$ u! O/ i6 M: A*  平台:Keil U4 + STC89C52
7 X) E6 d4 q& W) h8 z# k5 i& m- K) i*  名称ED闪烁% p0 R2 h! p2 x# g
*  晶体:11.0592MHZ$ R8 y- X% T, \0 r  H
******************************************************************/- E" T) h& c* W% g1 Y+ Z
#include <reg52.h>) F  {* U, }: C( E# |, _4 F% G8 P
3 n1 \+ t8 g3 g" U
sbit led=P1^0;
7 l4 s7 G# Q2 c# Q6 b9 Y" `
) @5 j/ \9 w  W) Y- y2 d- ]& D% a. r& B# C2 h0 Q
/****************************************************
: R: B% F% H2 b$ ~' P+ k1 K*; g7 R! l* g+ E# S. V" g
*                延时子函数
, w" s# X% d  d3 G. K! w*
+ {5 M0 h, o$ ?7 a*****************************************************/
# ^6 [4 d+ Y( h5 s/ ?0 l6 \  _3 h6 b9 yvoid delay(unsigned int i)
, X0 ?0 ?1 r4 U- ~- m- R{9 [# [! W: B$ {' T! o$ e* _
        unsigned int j;
" k; Z0 V+ P2 A        unsigned char k;
+ x- n  e2 Z# c        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止& N5 @* `% Z% G
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止! D6 o+ i6 G1 F* z' |, C
}3 K) @. }% w( R, ^
) i+ _9 ]5 D7 d, K, E8 d; j1 J9 ^8 @

" u, R4 [4 S5 Y3 x! ]/****************************************************
6 z* F3 M) G2 X* O, C*, t& {% X4 n  V% ?9 ~$ A
*                主函数,在死循环中实现LED闪烁
5 l- q+ C' F/ B7 q. {*  F/ s' i, r2 f3 z3 d6 }* V; t: ]8 j
*****************************************************/: E8 H4 X4 ?" [# n) A2 V
int main()
) ~2 c3 ~' T$ v& E% X& B8 e1 C1 t  y{# D: P' J2 u* r
        while(1)/ ^( ]( B4 i: E+ [4 f
        {  Y' F! v- j5 k8 z
                led=~led;        //每隔一段时间即对输出取反。5 s( S4 [! Z9 }/ d
                delay(3000); //闪烁间隔。间隔约为0.85S+ ?8 R7 l% A8 u, Y. L  o* l
        }: P0 Y' m) V, ?1 N: y+ M0 a
        return(0);
3 C% [8 A- x6 [9 `# Q}
+ M; U& ^) i5 D2 {8 V
8 ~6 j: C' t& b" o, A
6 F( V1 O. @/ _: m6 ^; |

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑
" r$ F6 r  v; T( j# b# o0 F9 }1 `+ \- O7 N7 v9 [
我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑
- ^% e, W7 q; N7 s8 T* H, k
4 J3 v7 j3 b  {比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

EDA365公众号

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

GMT+8, 2025-1-16 01:00 , Processed in 0.078125 second(s), 25 queries , Gzip On.

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

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

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