基础介绍
之前我们了解了单片机定时器的使用(跳转页面),但是之前采用的是查询的方法,这种方法如果代码量多的话就无法做到及时响应,我们要想在定时器时间一到就及时响应就需要用到中断的方法。 要使用中断的方法首先要有一个中断源(也就是产生中断的地方),单片机中一共有5个中断源,2个定时中断,2个外部中断,1个串行中断。之前介绍过TCON寄存器,在TCON寄存器中TF1/TF0是定时中断,IE1/IE0是外部中断。当定时器/计数器1溢出的时候TF1就会为1,此时就会产生一个中断;类似的,当定时器/计数器0溢出时,TF0也会产生中断。定时器/计数器控制寄存器TCON
![TCON寄存器](https://eskysky.oss-cn-hangzhou.aliyuncs.com/picture/20200130001.png)
中断允许寄存器IE
![中断允许寄存器IE](https://eskysky.oss-cn-hangzhou.aliyuncs.com/picture/20200130002.png)
中断优先级寄存器IP
![中断优先级寄存器IP](https://eskysky.oss-cn-hangzhou.aliyuncs.com/picture/20200130003.png)
- 打开中断总开关EA;
- 设置中断优先级(可省略);
- 打开对应中断的开关。
![单片机默认中断级别](https://eskysky.oss-cn-hangzhou.aliyuncs.com/picture/20200130004.png)
具体使用
下面我们以一个例子来看看定时器中断的具体使用。 要实现的功能:一个晶振为12MHz的单片机P1.0脚接一个LED灯,采用定时器中断的方法控制其一秒钟闪烁一下。 硬件电路图:![硬件电路图](https://eskysky.oss-cn-hangzhou.aliyuncs.com/picture/20200130005.png)
#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; } }
本文版权归逸云蓝天所有,转载请注明出处并添加本文链接。