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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

  f/ s' J* n& i1 p: I7 T/**********************51单片机学习例程***********************
3 X* n$ y" Z, R*  平台:Keil U4 + STC89C523 t/ W6 W& o5 l; I4 r$ {* Q1 Y& D, u
*  名称ED闪烁+ d2 Z9 Z. o5 E+ i# J4 j
*  晶体:11.0592MHZ4 k5 B; p+ I5 ^+ j+ _: E
******************************************************************/
) ~: n: @; Z% I7 x7 N#include <reg52.h>
6 D8 `& [! F. T0 p5 t1 i
0 C9 S% v) D) m2 I$ dsbit led=P1^0;; H& s: n8 E% s! A* O% {/ k9 _

) r8 R( \3 ~/ ^! A0 v
* C8 }0 Q: _$ q# @4 ?8 X/****************************************************
& f" M( v& z7 ?, N) R6 W1 f*
* L8 \8 A6 m) L$ F*                延时子函数( |2 L: b+ V6 S$ O7 S* v  q
*, h7 {- P5 r( t9 U6 k$ R
*****************************************************/: i: _4 ?) O3 }' S6 H2 I
void delay(unsigned int i)
& H* X. ~( [* R+ H2 p6 G6 p{
7 L. u8 h7 o! [8 V: U- u; b5 S        unsigned int j;
: t% \) `/ N2 t7 @' i5 o/ r  a/ p1 z        unsigned char k;9 h2 m. }5 x+ Z2 o$ _* r
        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止
% _6 F5 E- u" w5 V& J4 X- L                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
/ `$ D9 W: v3 Y4 N}: s+ @- v; b% L  D! Y
) [  o4 ?/ l7 v( ?

8 Z* L) f, b7 _4 {4 w/****************************************************
0 S9 o5 g8 H+ N9 ]+ }! h& m*
- m& {* _/ _5 y, [( {, _/ ~*                主函数,在死循环中实现LED闪烁( ~7 ~/ W9 Z# T: r1 F4 V
*1 O9 _$ g( f# [9 o' F
*****************************************************/
/ G0 a3 \$ A1 P6 ?: r: Z. t& Xint main()
$ p% M9 V$ R- k: p{. Q2 [7 u9 V1 [- @9 _
        while(1)
. o3 y1 j0 p7 X$ o        {- T: ?" Y- X4 |9 `# H
                led=~led;        //每隔一段时间即对输出取反。
1 C5 g( b; _, p  I1 w                delay(3000); //闪烁间隔。间隔约为0.85S
4 h2 ]5 R+ A6 s' r        }3 D5 J1 e) \; v- |% W4 [( g! p
        return(0);  m2 ]2 P9 K; f9 ]; y2 V' O9 t! U. B& h) o
}
% N9 F& T' o& H0 d8 A+ @, k: J- }* T/ r  S6 B

; B3 {2 b, W8 u  C. X

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑
6 b! O: T' e1 `+ K
9 i; t# Q; `% k% I) L5 n我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑 ' O; N9 T4 a. K# V* z
4 k* [% R8 D# n& r; \' b" P/ _
比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2026-4-18 23:41 , Processed in 0.109375 second(s), 27 queries , Gzip On.

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

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

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