单片机中断
中断号 | 0 | 1 | 2 | 3 | 4 | 5--- |
中断源 | 外中断0 | T0溢出 | 外中断1 | T1溢出 | 串行中断 | …… |
| | | | | | |
一、 Interrupt 0——外部中断:
初始化为:EA=1;(开启中断)
IT=0;(电平触发方式,IT=1表示下降沿等边沿式触发)
EX0=1;(允许中断)
例子:
#include<reg51.h>
#include<intrins.h>
sbit P3_0=P3^0;
int i;
void main( ){
… …
IT0=0; //设为电平触发方式
EA=1; //CPU开放中断
EX0=1; //允许中断
… …
}
void int_0( ) interrupt 0 {
P3_0=0; //由P3.0输出0
_nop_( );
_nop_( );
P3_0=1; //由P3.0输出1,撤除
i=P1; //输入数据
… …
}
二、 Interrupt 1——定时器T0溢出:
1、 初始化:
1)、 TR0=1;(启动定时器T0)
EA=1;(开启中断)
ET0=1;(允许T0中断)
2)、对于时间的计算:
对于晶振为12Mhz的单片机,其一个周期为1微秒。
方式0:
所以这是由十三位计数器组成的,计算方法为: TMOD=OX00;
方式1:
所以这是由16位计数器组成的,其计算方法为:
例:
TMOD=OX01;
TH0=()/256;
TL0=()%256;
同理N=t/晶振周期
方式2:
这是8位计数器,计算方法如下:(N=t/晶振周期)
方式2特别适合于较精确的脉冲信号发生器。此时TMOD=OX06;
例如,利用T0扩展一个外部中断源。将T0设置为计数器方式,按方式2工作,TH0、TL0的初值均为0FFH,T0允许中断,CPU开放中断。
程序为: TMOD=0x06; //置T0为计数器方式2
TL0=0x0FF; //置计数初值
TH0=0x0FF;
TR0=1; //启动T0工作
EA=1; //CPU开中断
ET0=1; //允许T0中断
对于方式3一般不用所以这里暂不介绍了。
三、 interrupt 2 -——外部中断1;
其原理和interrupt 0相似,这里简要介绍其算法:
初始化: EA=1;(开启中断)
IT1=0;(电平触发方式,IT1=1表示下降沿等边沿式触发)
EX1=1;(允许中断)
四、 interrupt 3——定时器1:
其原理和用法和interrupt 1相似:
初始化:TR1=1;(启动定时器T1)
EA=1;(开启中断)
ET1=1;(允许T1中断)
方式0:TMOD=OX00;
TH1=2^13-N;
TL1=2^13 -N;
方式1:TMOD=OX01;
TH1=2^16-N;
TL1=2^16-N
方式2;TMOD=OX06;
TH1=2^8-N;
TL1=2^8-N;