实验五 外部中断应用实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
外部中断应用实验
设计性试验
2012年11月28日星期三第三四节课
一、实验目的
1、掌握中断系统外部中断源的使用方法。
2、掌握延时程序的编程及使用方法。
3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求
1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
三、电路原理图
四、实验程序流程框图和程序清单及实验结果
/********************
实验五外部中断应用实验
要求:(1)在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
(2)在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
**********************/
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP EXINT0
ORG 0013H
LJMP EXINT1
ORG 000BH
LJMP TTC0
ORG 0100H
MAIN: MOV SP, #2FH ;堆栈指针初始化
MOV IE, #10000111B;EA - - ES ET1 EX1 ET0 EX0
MOV TMOD, #01H ;设置定时器T/C0为工作方式1
MOV TH0, #9EH ;设置定时器T0的计数初值为25ms
MOV TL0, #58H
SETB IT0 ;设置外部中断0为脉冲触发
SETB IT1 ;设置外部中断1为脉冲触发
HERE: LJMP HERE ;等待中断
/*定时器T0中断服务程序*/
ORG 0200H
TTC0: CPL P1.2
MOV TH0, #9EH
MOV TL0,
#58H
RETI
/*外部中断0开定时器服务程序*/
ORG
0300H EXINT0:SETB TR0
RETI
/*外部中断1关定时器服务程序*/
ORG
0400H EXINT1:CLR TR0
RETI
END
//C 语言编程// #include "reg52.h" sbit P1_2=P1^2;
void main()
{ SP=0x2f; IE=0x87; TMOD=0x01;
//设置定时器T/C0 TH0=(65536-25000)/256; //设置定时器T0的计数初值为25ms TL0=(65536-25000)%256; IT0=1; //设置外部中断0为脉冲触发 IT1=1;
//设置外部中断1为脉冲触发
do { } while(1);
}
/**定时器T0中断服务子程序**/ void timer0() interrupt 1
{
P1_2=!P1_2;
TH0=(65536-25000)/256;
TL0=(65536-25000)%256;
}
/**外部中断0中断服务子程序**/ void EXINT0() interrupt 0 {
TR0=1;
}
/**外部中断1中断服务子程序**/ void EXINT1() interrupt 2 {
TR0=0;
}
五、实验总结
通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器/计数器以查询、中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数。同时掌握了单片机系统的硬件和软件设计方法。
六、思考题
1、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP EXINT0
ORG 000BH
LJMP TTC0
ORG 001BH
LJMP TTC1
ORG 0100H
MAIN: MOV SP, #2FH ;堆栈指针初始化
MOV IE, #10001011B;EA - - ES ET1 EX1 ET0 EX0
MOV TMOD, #11H ;设置定时器T/C0为工作方式1
MOV TH0, #63H ;设置定时器T0的计数初值为40ms
MOV TL0, #0C0H
MOV TH1, #15H ;设置定时器T0的计数初值为60ms
MOV TL1, #0A0H
SETB IT0 ;设置外部中断为脉冲触发方式
MOV IP, #00000001B;设置外部中断0为高优先级,其余为低优先级
CLR A
HERE: LJMP HERE ;等待中断
/*定时器T0定时40ms 中断服务程序*/
ORG
0200H TTC0: CPL P1.2
;输出取反
MOV TH0, #63H ;重装计数初值 MOV TL0, #0C0H CLR TR0 ;关闭定时器T0 SETB TR1 ;开启定时器T1
RETI
;中断返回
/*定时器T1定时60ms 中断服务程序*/
ORG
0300H TTC1: CPL P1.2
;输出取反
MOV TH1, #15H ;重装计数初值 MOV TL1, #0A0H CLR TR1 ;关闭定时器T1 SETB TR0 ;开启定时器T0
RETI
;中断返回
/*外部中断0中断服务程序*/
ORG
0400H EXINT0:JNZ LOOP ; SETB P1.2
;输出置高电平 SETB TR0 ;关闭定时器T0
INC A
;累加器A 加1
LJMP
LOOP1 LOOP: CLR TR0 ;关闭定时器T0 CLR TR1 ;关闭定时器T1
CLR
A ;累加器A 清零 LOOP1: RETI
;中断返回
END