单片机实验之外部中断应用实验
一、实验目的
1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。
3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。 二、设计要求
1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 三、电路原理图
六、实验总结
通过本实验能够准确安排各种类型的中断服务程序入口,中断源提出中断申请后,却执行到相应的中断服务程序。弄清楚了中断服务程序与子程序的共同点和不同点。 七、思考题
1、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。
答:程序见程序清单。
四、实验程序流程框图和程序清单。
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; } }
五、实验结果(波形图)