1 .中断的概念
当CPU处理一个事件a时,发生另一个事件b并请求CPU快速处理(发生中断);
CPU暂时中断当前工作,处理事件b (中断响应和中断服务);
在CPU处理事件b之后,返回原始事件a中断的位置并且继续处理(中断并返回)事件a的过程被称为中断。
2 .中断优先级
51单片机共有5个中断源,分别为外部中断0、定时器0、外部中断1、定时器1、串行中断,中断优先级从大到小分别为0、1、2、3、4。
3 .中断的好处
分时操作。 CPU可以分时服务于多个I/O设备,提高了计算机的利用率
实时响应。 CPU可以及时处理APP应用系统的随机事件,大大提高了系统的实时性;
可靠性高。 CPU具有处理设备故障和停电等突发事件的能力,提高系统的可靠性。
4 .外部中断
外部中断0定义为P3.2端口,外部中断1定义为P3.3端口
TCON的中断标志(控制寄存器) :
it0(TCON.0 )、外部中断0触发方式控制位。
IT0=0时,为电平触发方式。
IT0=1时,为边缘触发方式(下降沿有效)。
ie0(TCON.1 )、外部中断0中断请求标志位。
it1(TCON.2 )、外部中断1触发方式控制位。
ie1(TCON.3 )、外部中断1中断请求标志位。
tr0(tcon.4 ) T0运行控制位,其功能与TR1类相同。
TF0(TCON.5 )、定时器/计数器T0溢出中断请求标志位。
tr1(tcon.6 ) T1运行控制位。 当TR1被设置为1时,T1开始操作; 当TR1变为0时,T1停止工作。 TR1通过软件设置为1或0。 因此,可以通过软件控制定时器/计数器的启动、停止
TF1(TCON.7 )、定时器/计数器T1溢出中断请求标志位。
外部中断初始化:
voidbsp_int0_init(void ) /外部中断0 ) it0=1; //使边缘触发方式为0是电平触发方式EX0=1; //打开外部中断,在中断寄存器中EA=1; //打开总中断(voidbsp_int1_init ) void )//外部中断1 ) it1=1; EX1=1; EA=1; }voidISR_int0(void ) interrupt 0//中断处理函数({ P1=0x55; }voidISR_int1(void ) interrupt2) P1=0xaa; )5.计时器中断
动作模式寄存器TMOD :
GATE :门控。 GATE=0时,通过软件将TCON的TR0或TR1设为1,就可以启动计时器/计数器动作; GATA=1时,必须在软件中将TR0或TR1设为1,设为外部中断端子或高电平,才能开始计时器/计数器动作。 也就是说,在这种情况下,启动计时器需要多一个条件。 (默认情况下等于0,因此请不要设置。)
C/T :定时/计数模式选择位。=0是定时模式;=1是计数模式。
M1M0:动作模式设定位。 定时器/计数器有4种动作方式,用M1M0设定。 (正常时的自旋方式1,即M1M0=01 )。
中断寄存器:
EA总中断
ET0是计时器0中断
EX0是外部中断0
ET1是计时器1中断
EX1是外部中断1
voidtimeR0_init(void ) { TMOD |=0x01; //将计时器设为动作模式1 C/T比特为1时为计数器模式,为0时为计时器模式,高位4比特为计时器1,低位4比特为计时器0TL0=(65536-1000 ) ) 6; //初始值,低8位th0=(65536-1000 )/256; //前8位ET0=1; //接通计时器中断TR0=1; //接通定时器EA=1; //打开总中断(voidtimeR0) void (interrupt1) TL0=) 65536-1000 ) %6; //加入初始值,后8位//初始值为1000即1msth0=(65536-1000 )/256; //高8位count; if (计数==1000 ) {计数=0; LED=~LED; //LED每秒闪烁一次}