中断
一、实验目的
了解中断的产生及影响过程,掌握中断程序的编制。
二、实验连线
用短接块将JP2的3、4脚相连(即连向INT0方向),RS触发器(消抖电路)向单片机的外部中断INT0引脚提供中断所需的脉冲,每按两次开关S2,电平变反一次,产生一个跳变沿,作为外部中断INT0的中断请求信号。实验电路如图4-3所示。
图4-3 实验电路图
三、实验程序
记录并显示INT0的中断次数,在数码管中显示出来,即每产生一次中断,显示加一。中断次数不超过16次
1、 汇编程序
ORG
0000H
AJMP
NT
ORG
0003H
AJMP
INT0R
NT: MOV
IE,#81H ;允许INT0中断,置EA=1
SETB
IT0 ;边沿触发中断
MOV
R0,#00H ;计数初值为0
BIO: MOV
P1,#0A0H ;第6个数码管显示终端次数
MOV
DPTR,#TAB0
;字形码表送至DPTR
MOV
A,R0
MOVC
A,@A+DPTR ;查表
MOV
P0,A ;显示
SJMP
$ ;等待中断
INT0R:
INC
R0
CJNE
R0,#10H,RET0 ;中断是否满15次
MOV
R0,#00H ;循环
RET0: POP
DPH
POP
DPL
MOV
DPTR,#BIO
PUSH
DPL ;修改终端返回值
PUSH
DPH
RETI
TAB0:
DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB
7FH,6FH,0BFH,0DBH,0CFH,0E6H,0EDH,0FFH
END
2、 C语言程序
#include
Unsigned char
a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xff};
char i;
void int_0(void) interrupt 0 using 1
{
i++;
if(i<16)
P0=a[i];
else
{
i=0;
P0=0x3f;
}
}
main()
{
EA=1;
EX0=1;
IT0=1;
P1=0xa0;
while(1);
}
3、 自编程序
(1) 1个数码管8段全部显示,即“8.”,中断一次,8段全灭,每中断一次,变反一次。
(2) 要求同上,每中断一次,变反四次。
四、编写程序并调试通过
1、 调试已有程序,编写调试自编程序;
2、 使用六个数码管显示H,每中断一次,H左移一次;
3、 复位键复位,重复操作。