基础介绍
之前我们了解了单片机定时器的使用(跳转页面),但是之前采用的是查询的方法,这种方法如果代码量多的话就无法做到及时响应,我们要想在定时器时间一到就及时响应就需要用到中断的方法。 要使用中断的方法首先要有一个中断源(也就是产生中断的地方),单片机中一共有5个中断源,2个定时中断,2个外部中断,1个串行中断。之前介绍过TCON寄存器,在TCON寄存器中TF1/TF0是定时中断,IE1/IE0是外部中断。当定时器/计数器1溢出的时候TF1就会为1,此时就会产生一个中断;类似的,当定时器/计数器0溢出时,TF0也会产生中断。定时器/计数器控制寄存器TCON
除了这些,我们要使用中断还需要学习中断允许寄存器IE和中断优先级寄存器IP的使用。中断允许寄存器IE
其中EA是全局中断允许位,也就是总开关,当它为0时全部中断关闭。 ES是串行口中断的开关,ES=1打开串行口中断,ES=0关闭串行口中断。 ET1、EX1、ET0、EX0分别是定时器/计数器1、外部中断1、定时器/计数器0、外部中断0的中断开关,为1时打开相应的中断,为0时关闭相应的中断。中断优先级寄存器IP
这里的PS、PT1、PX1、PT0、PX0分别是串行口、定时器/计数器1、外部中断1、定时器/计数器0、外部中断0的中断优先级控制位,为1时对应的中断就是高优先级中断,为0时对应的中断就是低优先级中断。 在单片机中,高优先级中断可以打断低优先级中断,并且如果有几个中断源同时向CPU请求中断,CPU就会按照优先级的高低确定响应的先后顺序。 我们使用中断的时候需要执行这3个步骤:- 打开中断总开关EA;
- 设置中断优先级(可省略);
- 打开对应中断的开关。
具体使用
下面我们以一个例子来看看定时器中断的具体使用。 要实现的功能:一个晶振为12MHz的单片机P1.0脚接一个LED灯,采用定时器中断的方法控制其一秒钟闪烁一下。 硬件电路图: 软件代码:#includesbit LED=P1^0; int a=0; void main() { TMOD=0x01;//使用定时器T0,高4位全为0,低4位GATE=0,C/T=0,采用工作方式1,M1=0,M1=1 TH0=0x3c;//装入初值 TL0=0xae; TR0=1;//启动定时器0 EA=1;//打开中断总开关 ET0=1;//打开定时器0中断开关 while(1); } void abc() interrupt 1 { TH0=0x3c;//重新装入初值 TL0=0xae; if(a==20)//因为要1秒闪烁一次,到这里计数器计了0.05s,需要20个0.05s才有1s { LED=~LED; a=0; }else{ a=++a; } }
本文版权归逸云蓝天所有,转载请注明出处并添加本文链接。