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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

# I* H+ y( D0 D) H3 v5 P6 f& Q/**********************51单片机学习例程***********************  Z8 z# o, m; v9 |
*  平台:Keil U4 + STC89C520 s, M3 H& I- y6 m8 ^1 f
*  名称ED闪烁0 F$ Q1 D" U" J, @
*  晶体:11.0592MHZ
4 O- S& w# G# w: {: k8 P/ }******************************************************************/8 {3 h( m" o9 ]( g3 n3 k% T
#include <reg52.h>
* @0 Y$ ]4 S9 W3 O+ U
9 u7 C( o& S( T" i8 usbit led=P1^0;
3 p, N" V# z$ o; w% |; x7 g
. q  y& ?. z5 i' z) {1 I$ x5 X
9 V% h+ }, C7 k/ i! ~/****************************************************
: r. O( {3 w- A& t3 o8 c) R( S*
; C+ f0 f) G3 N0 H! L4 z" [2 M* k& l*                延时子函数+ o/ s& b5 U& h  S
*# N2 w& c" M$ i7 f( d1 G1 W& R
*****************************************************/
' h+ k: b$ q6 D( t7 l/ pvoid delay(unsigned int i)8 R& R# i9 _' @1 b& U9 k# S. v& P) X
{( A/ l$ D2 A  G, \
        unsigned int j;
" Z+ R0 w! N8 k        unsigned char k;) c6 q* ]# b# d, u7 ^7 [. S8 U0 i9 F
        for(j=i;j>0;j--)                                                        //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止1 ]) @8 T0 |+ o7 s
                for(k=125;k>0;k--);                                //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
  [1 ]- m- k/ `# ?}) V" D# I* Q0 Z, b1 {4 R
) c* X* h2 H! b5 ?# ^4 y3 C/ K

9 j4 ~2 j( H6 Y2 r3 j/****************************************************# X) ~" y- S0 N: ~5 {
*
/ n9 k: ]/ j% e0 c& t- ?  o*                主函数,在死循环中实现LED闪烁
% j8 w4 `3 k) V* \" T2 X*
4 B4 @8 K4 W! i$ O*****************************************************/+ U% c2 Y& C9 K  K" |3 s& g
int main()
" D+ y, k0 n  r. B' O{" v  B& l6 b: o3 a5 Q' O9 T
        while(1)
% ]$ m* U* x  I        {
( Q- h% R5 O5 P5 I- V& J! m& Z                led=~led;        //每隔一段时间即对输出取反。
. P$ D1 W* R' D% b                delay(3000); //闪烁间隔。间隔约为0.85S
% Q2 X$ R0 t4 k* T7 z0 W0 J        }1 x& C0 N! a6 @6 O. \
        return(0);
. q5 I  j5 M7 H) e. s: S}
; s7 V( R8 z  w; y" B/ I& ^+ ?: }* K2 W1 g* ~% w; I

5 D0 a) v" Q) J1 D4 ?* o* e  m1 r

LED延时闪烁.zip

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

该用户从未签到

2#
发表于 2022-9-22 10:59 | 只看该作者
本帖最后由 big_gun 于 2022-9-23 20:55 编辑 5 t0 t' R# {8 G  {; f+ A) s% r/ w

9 u1 _/ U" o% b; y1 [, D我之前学习X86汇编的时候,就学习过了中断的概念

该用户从未签到

3#
发表于 2022-9-22 17:08 | 只看该作者
本帖最后由 dragongfly 于 2022-9-23 21:34 编辑 % m" P, {8 J: Z
3 `# L5 `1 K) _6 P6 W
比喻的真形象啊,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 07:23 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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