实验五 外部中断应用实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档