单片机外部中断实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三外部中断

实验报告

班级:

学号:

姓名:

教师:

一、实验目的

1、掌握单片机外部中断的原理及过程。

2、掌握单片机外部中断程序的设计方法。

3、掌握单片机外部中断时中断方式的选择方法。

二、实验内容

如下图所示,P3.2设为输入,P2设为输出位,连有8个发光二极管D1~D8。每当发生外部中断时,发光二极管以向下流水灯的方式点亮。分别选择边沿触发外部中断

放是和电平触发外部中断方式两种。

三、编程提示

1、P3口是8位准双向口,具有双重功能:

第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:

P3.0 RXD 串行输入口

P3.1 TXD 串行输出口

P3.2 INT0 外部中断0请求输入线

P3.3 INT1 外部中断1请求输入线

P3.4 T0定时器/计数器T0外部计数器脉冲输入线

P3.5 T1定时器/计数器T1外部计数器脉冲输入线

P3.6 WR外部数据存贮器写脉冲输出线

P3.7 RD外部数据存贮器读脉冲输出线

2、各中断服务程序入口地址:

外部中断0 03H

定时器/计数器T1溢出中断0BH

外部中断1 13H

定时器/计数器1BH

串行口中断23H

3、外部中断的产生条件

中断允许寄存器IE:

(1)外部中断源允许中断(中断0:EX0=1;中断1:EX1=1)。

(2)CPU开中断(EA=1)。

(3)外部中断方式CPU发出中断申请。

4、外部中断方式的选择

控制TCON:

IT0是选择文字则外部中断0请求(INT0)边沿触发方式或电平触发方式的控制位。前一方式IT0=1,后一方式IT0=0。

IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。前一方式IT1=1,后一方式IT1=0。

当8031复位后,TCON被清0。

5、外部中断电路

负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。边沿触发的

最大优点在于不会丢失中断。只要中断请求负跳变的宽度大于 1 个机器周期,单片机就能够采样到中断请求信号,单片机将采样到的信号琐存到中断请求标志寄存器中,硬件自动置IE0为1,即使单片机暂时不响应,这个标志也不会丢失,只有在外部中断响应之后,硬件才将IE0清除。

低电平触发的外部中断与边沿触发的外部中断,其中断过程基本相似。唯一不同在于中断请求信号的保持与撤消。在边沿触发中,单片机TCON寄存器专门有一位作它的请求标志,当负跳变后,单片机将中断请求标志IE1(INT1中断为IE1,INT0中断为IE0)自动置1,由IE1请求中断,在响应中断时,又由单片机自动清除IE1。但是对于电平触发方式,单片机中没有专门的请求标志,响应中断时也不能自动清除请求信号。在实际应用中,常常是在单片机外增加一个触发器作为中断请求标志,当中断请求发生时置触发器为0,使INT1为低电平,在单片机响应这个中断后,利用软件(占用另一根I/O线,例如P3.1)发出复位脉冲,使该触发器置1,撤消中断请求。这种电路使请求中断的低电平能够保持足够的时间,一直到中断发生为止,因而不会丢失中断请求。低电平的时间又不致太长,只要进入中断服务程序,在返回之前,就撤消请求信号,因而也不会产生多余的中断动作。

四、实验器材

仿真器、目标系统实验板、直流电源

五、实验步骤

1、边沿触发式外部中断0实验

(1)P3.2设为边沿触发方式,连接外部复位开关,编程使每次中断流水灯向下移位一次,中断程序中不延时去抖动,观察结果。

(2)P3.2设为边沿触发方式,连接外部复位开关,编程使每次中断流水灯向下移位一次,中断程序中采用延时去抖动,观察结果。

(3)P3.3设为边沿触发方式,连接外部RS触发器硬件去抖动的开关,编程使每次中断流水灯向下移位一次,中断程序中不延时去抖动,观察结果。

2、电平触发式外部中断实验

P3.3设为电平触发方式,连接外部RS触发器硬件去抖动的开关,编程使每次

中断流水灯向下移位一次,中断程序中不延时去抖动,观察结果。

六、C源程序清单

#include

#define uchar unsigned char

uchar i=0;

uchar numi[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(uchar k );

void main()

{

EA=1;

EX0=1;

IT0=1;

while(1)

{

if(EX0==0)

{

//delay(100);

IE0=0;

EX0=1;

}

}

}

void int0() interrupt 0

{

EX0=0;

P2=~numi[i];

i++;

if(i>8)

{

i=0;

}

}

void delay(uchar k )

{

uchar x,y,z;

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

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

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

}

七、总结

相关文档
最新文档