EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这次说定时与中断,有人说,掌握了定时与中断,就掌握了一个 单片机80%的功能;也有人说,中断是一个单片机的灵魂。这两句话无一不在强调中断的重要性,就让我们认识一下,中断到底是什么。 根据百度百科的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 举个例子,我正在吃饭呢,忽然老婆大人发话了,说在网上看上一个包,挺好的,让我帮着付款,于是我停下吃饭说好,去帮着付款,付完款,继续吃饭。 这个过程中,我是CPU;吃饭是主程序;老婆大人说话,触发了中断;我说好,安慰了老婆的情绪同时清零了中断标志;去付款,处理了中断子程序;付完款继续吃饭,回到了主程序。 STC89C52RC单片机中的中断分为三种:外部中断,一般是IO口的高低电平触发;定时/计数器溢出中断,一般是内部定时/计数器溢出中断;UART口中断,收发数据时引发的中断。这次只说定时/计数器溢出中断。 程序如下:
1 i. J/ N1 ~- o L/**********************51单片机学习例程***********************
" o7 r( M8 W w* 平台:Keil U4 + STC89C524 f5 t5 r! y* C7 i) W: J: v5 K& q
* 名称 ED闪烁- u, M0 H0 l* e# u6 s
* 晶体:11.0592MHZ
1 K! q* J# ~- t5 R- c" [1 |/ e******************************************************************/6 q* s2 x. B; u, A$ }
#include <reg52.h>( O ~6 T2 Q6 s# \( e$ U/ @) K% M
6 \+ c1 V5 R3 [1 f' U9 S. T3 C, W6 Bsbit led=P1^0;# { Y' w( J @4 T# y+ r
# s) r7 q) Q1 Y" A
' h9 ~$ `5 t1 [, @1 g g4 P
/****************************************************+ j1 J5 r" V! P% _8 F" |4 o
*1 n* }) r; c+ i5 k J8 M
* 延时子函数! h }, x' h" K
*6 E% t9 \9 }/ U5 P$ S9 l6 l
*****************************************************/, V [+ N0 D5 f& ~" J0 w
void delay(unsigned int i)
- b- D1 b# z% ~1 H1 I{$ d# w- r/ Q: J- |- j) m7 N
unsigned int j;1 v- U V+ X1 J$ o4 {6 T7 j
unsigned char k;
; W$ x* L2 t2 G/ o" ~& | for(j=i;j>0;j--) //把i赋值给j,然后进行判断,当j大于0时,j减一,重复判断,一直到符合条件为止4 \+ t3 G3 }$ p4 u& e2 O
for(k=125;k>0;k--); //首先赋值125给k,然后进行判断,当k大于0时,k减一,重复判断,一直到符合条件为止
9 E8 T$ n, z- y' Y1 \* e1 K5 e( x& k}
6 D: O6 K5 {# p# t% J/ q0 ]
8 m% V2 ~' R' y; V8 G. @1 F. a2 Y1 d1 A( P3 \6 u5 z% v' T1 T% e
/****************************************************
( }( l% F$ g6 o, b. m4 b) S*
W4 V6 _+ f. d @) u; v* 主函数,在死循环中实现LED闪烁; \! N" k. a) E* B! x7 ^
*
6 F+ x* T, |0 t" N: J! m6 k2 l% d*****************************************************/
+ L+ ]2 {4 b! t; }' iint main()+ F9 s- n$ M9 y( u. F L( }3 }
{
4 a- Q& Q8 s* W while(1); }4 e/ t: ~1 d. Z+ u
{
. }; Y0 a+ f' F: l led=~led; //每隔一段时间即对输出取反。, ?/ ~' n* c1 C
delay(3000); //闪烁间隔。间隔约为0.85S
* p. U- W- q4 z# H7 w9 q( u8 D }
5 a6 k9 I2 t; z( Z) z return(0); ?8 N! E* j# V4 K1 G
}' I% _+ l) T! \- S
$ d1 w5 q8 l3 K5 Y3 a7 G2 A( o6 D6 J+ u
|