单片机实验之外部中断应用实验
发布时间:2018-07-01 03:41:56
发布时间:2018-07-01 03:41:56
一、实验目的
1、掌握中断系统外部中断源的使用方法。
2、掌握延时程序的编程及使用方法。
3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求
1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
三、电路原理图
6、实验总结
通过本实验能够准确安排各种类型的中断服务程序入口,中断源提出中断申请后,却执行到相应的中断服务程序。弄清楚了中断服务程序与子程序的共同点和不同点。
七、思考题
1、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。
答:程序见程序清单。
4、实验程序流程框图和程序清单。
1、在单片机的P1.2口线上产生周期50mS的连续方波。P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形, P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
汇编程序:
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 000BH
LJMP TTCO
ORG 0013H
LJMP EXT1
ORG 0100H
MAIN: MOV TMOD, #01H
MOV TCON, #01H
MOV IE, #87H
MOV TH0, #9EH
MOV TL0, #58H
SETB PX1
HERE: LJMP HERE
EXT0: SETB TR0
RETI
EXT1: CLR TR0
RETI
TTCO: CPL P1.2
MOV TH0, #9EH
MOV TL0, #58H
RETI
END
C语言程序:
#include
sbit P12=P1^2;
main()
{
TMOD=0X01;
EA=1;
EX0=1;
EX1=1;
ET0=1;
PX1=1;
TCON=0X01;
TH0=0X9E;
TL0=0X58;
while(1);
}
void EXT0() interrupt 0
{ TR0=1;
}
void EXT1() interrupt 2
{ TR0=0;
}
void TTC0() interrupt 1
{ P12=!P12;
TH0=0X9E;
TL0=0X58;
}
2、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。
汇编程序:
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 0100H
MAIN: MOV TMOD, #11H
MOV TCON, #01H
SETB EA
SETB EX0
CLR C
LOOP1: JNB TF0, LOOP1
MOV TH0, #63H
MOV TL0, #0C0H
CLR TF0
CLR TR0
CPL P1.2
SETB TR1
LOOP2: JNB TF1, LOOP2
MOV TH1, #15H
MOV TL1, #0A0H
CLR TF1
CLR TR1
CPL P1.2
SETB TR0
LJMP LOOP1
ORG 0200H
EXT0: JC STOP
SETB C
MOV TH0, #63H
MOV TL0, #0C0H
MOV TH1, #15H
MOV TL1, #0A0H
SETB TR0
RETI
STOP: CLR TR0
CLR TR1
CLR C
END
C语言程序:
#include"REG52.H"
sbit P12 = P1^2;
void main()
{
EA=1;
EX0=1;
TMOD=0X11;
TCON=0X01;
CY=0;
while(1)
{while(TF0)
{
P12=!P12;
TF0=0;
TR0=0;
TH1=0X15;
TL1=0XA0;
TR1=1;
}
while(TF1)
{
P12=!P12;
TF1=0;
TR1=0;
TH0=0X63;
TL0=0XC0;
TR0=1;
}
}
}
void EXT0() interrupt 0
{if(!CY)
{CY=1;
TH0=0X63;
TL0=0XC0;
TR0=1;
}
else
{ CY=0;
TR0=0;
TR1=0;
}
}
5、实验结果(波形图)