当前位置:文档之家› 外部中断应用实验

外部中断应用实验

外部中断应用实验
外部中断应用实验
一、实验目的和要求
1、掌握中断系统外部中断源的使用方法。

2、掌握延时程序的编程及使用方法。

3、掌握Proteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二、设计要求
1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的P1.1口线上接按键K1 ,作为外部中断源1使用,用于关闭波形。

2、在单片机的P1.2口线上产生周期50mS的连续方波,在P 1.2口线上接示波器观察波形。

三、电路原理图
实验一电路原理图:
实验二电路原理图:
四、实验程序流程框图和程序清单
汇编程序清单:程序框图:实验一:
ORG 0000H START: LJMP MAIN
ORG 0100H
LJMP LOOP1;
ORG 0003H
LJMP K0
ORG 0013H
LJMP K1
MAIN: SETB EA
SETB IT0
SETB IT1
SETB EX0
SETB EX1
MOV SP, #2FH;
MOV TMOD, #01H;
MOV TH0, #9EH;
MOV TL0, #58H; LOOP1: JNB TF0, LOOP1
CPL P1.2;
CLR TF0
MOV TH0, #9EH;
MOV TL0, #58H;
开始定时器、中断初始化
堆栈初始化等待
结束
IPTO 取反P1.2
送定时初值返回
EXINT0
调延时
开定时器0返回
N
Y
Y
KO 按下?
KO 松开?
EXINT1调延时
关定时器0
返回
N
N
Y
Y
K1按下?
K1松开?
K0: SETB TR0 RETI K1: CLR
TR0
RETI
END 思考题:
ORG 0000H
LJMP MAIN ORG 0003H LJMP K ORG 000BH LJMP IPTO MAIN: MOV
SP, #60H MOV TMOD, #01H MOV IE, #83H MOV TH0, #0B1H MOV TL0, #0E0H
MOV
R1, #02H
HERE:LJMP
HERE
DELAY:SETB TR1 HEREY:JNB TF1, HEREY CLR TR1
CLR TF1 MOV TH1, #0D8H MOV TL1, #0F0H RET
K : JBC TF0, LL
SETB
TF0
SETB TR0
LJMP HH LL:CLR TF0
CLR
TR0 HH: RETI IPTO: DJNZ R1, LOOP3
CPL P1.2
CPL ACC.0 JNB ACC.0, LOOP2 MOV R1, #03H
LJMP
LOOP3 LOOP2: MOV R1, #02H LOOP3: MOV TH0, #0B1H MOV TL0,
#0E0H RETI
END
DELAY
开定时器1
等待定时到
关定时器1清零溢出标志位送定时初值返回
开始定时器、中断初始化
堆栈初始化等待结束
EXINT0
调延时取反TR0
返回
N
N
Y
Y
K0按下?
K0松开?
IPTO
送定时初值
返回
取反P1.2N
N
N
Y
Y
Acc.0=1?
两次定时到?
五次定时到?
C 语言程序清单:
#define u char unsigned char #define u int unsigned int
#include <reg52.h> sbit P12=P1^2; void delay(void) {
unsigned char
a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--) for(a=130;a>0;a--); }
void main()
{
EA=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
PX0=1;
TMOD=0X01;
TH0=0X9E;
TL0=0X58;
while(1)
{
while(!TF0);
P12=!P12;
TF0=0;
TH0=0X9E;
TL0=0X58;
}
}
void INTT0() interrupt 0
{
TR0=1;
}
void INTT1() interrupt 2
{
TR0=0;
}
程序框图:
开始
定时器、中断初始化
堆栈初始化
等待
结束
IPTO
取反P1.2
送定时初值
返回
EXINT0
调延时
开定时器0
返回
N
Y
Y
KO按
下?
KO松
开?
EXINT1
调延时
关定时器0
返回
N
N
Y
Y
K1按
下?
K1松
开?
思考题程序清单:#define u char
unsigned char
#define u int unsigned int
#include <reg52.h> sbit P12=P1^2;
a=0;
void main()
{
EA=1;
IT0=1;
EX0=1;
PX0=1;
TMOD=0X01;
TH0=0X63;
TL0=0XC0;
while(1)
{
while(!TF0);
P12=!P12;
TF0=0;
TH0=0X15;
TL0=0XA0;
while(!TF0); P12=!P12; TF0=0;
TH0=0X63;
TL0=0XC0;
}
}
void INTT0() interrupt 0
{ TR0=!TR0
}
五、实验结果:
程序框图:
DELAY
开定时器1
等待定时到
关定时器1
清零溢出标志位
送定时初值
返回
开始
定时器、中断初始化
堆栈初始化
等待
结束
EXINT0
调延时
取反TR0
返回
N
N
Y
Y
K0按
下?
K0松
开?
IPTO
送定时初值
返回
取反P1.2
N
N
N
Y
Y
Acc.0=
1?
两次定
时到?
五次定
时到?。

相关主题