单片机学习经验——interrupt
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机中断
一、Interrupt 0——外部中断:
初始化为:EA=1;(开启中断)
IT=0;(电平触发方式,IT=1表示下降沿等边沿式触发)
EX0=1;(允许中断)
例子:
#include
#include
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:
TCON D7D0
所以这是由十三位计数器组成的,计算方法为:
)t/N (213周期注:=-=N X TMOD=OX00;
方式1:
所以这是由16位计数器组成的,其计算方法为: 例:
TMOD=OX01;
TH0=(N -65536)/256; TL0=(N -65536)%256; 同理N=t/晶振周期 方式2:
TCON D7D0
TCON D7D0
16X=2-N
这是8位计数器,计算方法如下:N
=82(N=t/晶振周期)
X-
方式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;