51单片机入门教程(5)——定时器中断
写在开头: 中断是包括单片机在内的所有微处理器很 重要的功能之一,初学单片机必须这一部分的知识。
一、中断的概念
先看百度百科是怎么定义中断的:
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
—— 百度百科
那么怎么理解中断?看下面的例子。
关于中断:
小A正在学习。这时,他的朋友小B叫他一块儿吃鸡,小A停止学习,转去玩吃鸡游戏。玩了几局后,关掉游戏,继续学习。
关于中断优先级:
小A正在学习。这时,他的朋友小B叫他一块儿吃鸡,小A停止学习,转去玩吃鸡游戏,(吃鸡过程中,小A女朋友打来电话,于是挂机游戏,去接电话,接完电话,继续游戏。)玩了几局后,关掉游戏,继续学习。
- 几个重要概念:
中断:小A学习被小B打断的过程就称为中断。
中断源:小B被称为中断源。
中断服务程序:小A执行的玩游戏操作称为中断服务程序
中断优先级:小A女朋友的电话比游戏优先级高
在89c52单片机中,有3类中断源:
1、外部中断:当外部中断引脚信号产生跳变(低电平→高电平)时引起中断。
2、定时器/计数器中断:当计数器计满溢出时引起跳变。
3、串口中断:串行端口完成一帧数据的发送/接受时引起(如蓝牙传输)。
其优先级如下表:
中断源 | 优先级 | 中断服务号 |
---|---|---|
INT0 – 外部中断0 | 最高 | 0 |
T0 – 定时器/计数器0中断 | 第2 | 1 |
INT1 – 外部中断1 | 第3 | 2 |
T1 – 定时器/计数器1中断 | 第4 | 3 |
串口中断 | 第5 | 4 |
T2 – 定时器/计数器2中断 | 最低 | 5 |
下面以定时器中断为例,讨论中断的编程方法。
二、定时器中断
2.1 软件延时的不足
根据现有的知识,如果要在程序中等待一端时间,想到的操作应该是通过执行若干次空指令,达到延时的效果。
如下:
//延时xms
void delayms(uint xms){
uint i,j;
for(i = 0; i < xms; ++i)
for(j = 0; j < 110; ++j)
;
}
但是,假设要实现以下功能:
1、8位数码管动态扫描显示。
2、LED灯每隔1s闪烁一次。
电路如下:
考虑程序怎么写……
//代码不完整,仅为举例说明
void main(){
P2 = 0x01; //数码管从最低位开始扫描
while(1){
//功能1:执行数码管动态扫描
//P2控制显示哪一个数码管,P0控制数码管显示什么内容
P2 = P2<<1; //扫描更高一位的数码管
P0 = xxxx; //输出段码
delayms(5); //延时5ms后显示下一位数