微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第8课 单片机中断

第8课 单片机中断

时间:12-01 来源:互联网 点击:

T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。

TR1:T1充许计数控制位,为1时充许T1计数(定时)。

TR0:T0充许计数控制位,为1时充许T0计数(定时)。

IE1:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”IE1(边沿触发方式)。

IT1:外部中断源1触发方式控制位。IT1=0,外部中断1程控为电平触发方式,当INT1(P3.3)输入低电平时,置位IE1。此位为1设置为电平触发,为0设置为下降沿触发。

IE0:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”IE0(边沿触发方式)。

IT0:外部中断源0触发方式控制位。IT0=0,外部中断1程控为电平触发方式,当INT0(P3.2)输入低电平时,置位IE0。此位为1设置为电平触发,为0设置为下降沿触发。

四、外部中断程序举例

明白了寄存器后,下面我以外部中断0为例写一个程序,程序的功能为:在主程序里L1灯常亮,当外部脚P32检测到有下降沿时,L1灯熄灭。

我们先来分析下该程序的书写思路。首先在主程序里我们应该让L1灯常亮;然后需要对中断相关的寄存器进行设置,主要为打开总中断、打开外部中断0,并且还需要设置外部中断为低电平触发方式;最后我们要写一个中断子函数。

相应的程序如例一所示。

例一 外部中断0程序

#include

#define uint unsigned int

#define uchar unsigned char

sbit D1=P1^0;

void delay(uint z);

void main()

{

IT0=0;//设置为0低电平触发

Eaa=1;//开总中断

EX0=1;//开外部中断0

while(1)

{

D1=1;

}

}

void exter0() interrupt 0

{

D1=0;

delay(500);//下降沿触发时如果不延时观察不到再现象

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

下载到实验板现象如图5所示。

这里要注意的中断子函数的写法。51单片机中中断子函数的格式如下:

void函数名()interrupt 中断号

{

中断服务子程序的内容

}

中断函数不能返回任何值,所以前面用void;后面紧跟函数名,名字可以随便取,但不要与C语言中的关键字相同;中断函数不带任何参数,所以函数名后面的小括号内为空;中断号是指单片机中几个中断源的序号,每个中断源的中断序号如图6所示。这个中断号是编译器识别不同中断的的唯一,必须书写正确,否者单片机进不了中断子程序

图6 52单片机的中断号

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top