5.7 定时器与外部中断程序设计举例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 第五章指令系统及应用程序设计
5.7 汇编语言程序设计举例
例5.15 设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHZ
(1)试确定T0初值,计算最大定时时间
(2)编程实现其定时功能
(1) 设T0的初值为X,(TL0低5位,TH0高8位)
从X开始加1次数: 2¹³-X
加1一次的时间: Tosc*12=1/6 *12=2μs
(2¹³-X) * 1/6 *12=1ms
X=7692D=1111000001100B
TL0低5位=01100B=0CH TH0=11110000B=F0H 最大定时时间: 2¹³*1/6*12
(2)
ORG 0000H SETB TR0 RESET: AJMP MAIN SETB ET0 ORG 000BH SETB EA
AJMP ITOP RET
ORG 0100H ORG 0120H MAIN: MOV SP,#60H ITOP: MOV TL0,#0CH ACALL PTOMD MOV TH0,#F0H HERE: AJMP HERE RETI PTMOD: MOV TL0,#0CH
MOV TH0,#0F0H
例5.16 将P1口的P1.4~P1.7作为输入位,P1.0~P1.3作为输出位,利用89C51 将开关所设的数据读入单片机内,并通过P1.0~P1.3输出,驱动发光二极管。要求采用中断边沿触发方式,每中断一次,完成一次读/写操作。
Vcc P1.7 EA P1.6
P1.5
X1
P1.4 P1.3 X2 P1.2 P1.1 P1.0 RST INT0
Vss +5V
3133pF 19
1833pF +5V 22uF 1 k Ω 1 k Ω
1 k Ω
200 k Ω38373635
34
33
32
39+5V K 4.7 k Ω89C51+9外部中断INT0电路
图5.13 外部中断INT0电路
ORG 0000H ORG 0200H
AJMP MAIN; INSER :MOV A #0F0H;
ORG 0003H MOV P1 ,A;
AJMP INSER; MOV A,P1;
ORG 0030H SWAP A;MAIN:SETB EX0 ; MOV P1,A;
SETB IT0; RETI;
SETB EA END
HERE:SJMP HERE
例5.19 利用T0的工作模式0产生1ms定时,在P1.0引脚输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。编程实现其功能。要在P1.0引脚输出周期为2ms的方波,只要使P1.0每隔1ms取反一次即可。
(1)选择工作模式
T0的模式字为TMOD=00H,即
M1M0=00,C/T=0,GATE=0,其余位为0。
(2)计算1ms定时时T0的初值
(213-X)×1/12 × 10-6×12=1×10-3 s
X=7193D=11100000 11000B
T0的低5位:11000B=18H即 (TL0)=18H
T0的高8位:11100000B=E0H即 (TH0)=E0H
(3)采用查询方式的程序
程序清单:
MOV TMOD,#00H ;设置T0为模式0 MOV TL0,#18H ;送初值
MOV TH0,#0E0H
SETB TR0 ;启动定时
LOOP: JBC TF0,NEXT ;查询定时时间到否 SJMP LOOP
NEXT:MOV TL0,#18H ;重装计数初值
MOV TH0,#0E0H
CPL P1.0 ;取反
SJMP LOOP ;重复循环
(4)采用定时器溢出中断方式的程序
程序清单:
主程序
ORG 0000H
RESET: AJMP MAIN ;跳过中断服务程序区 ORG 0030H
MAIN: MOV TMOD,#00H ;设置T0为模式0
MOV TL0,#18H ;送初值
MOV TH0,#0E0H
SETB EA ;CPU开中断
SETB ET0 ;T0中断允许
SETB TR0 ;启动定时
HERE:SJMP HERE ;等待中断,虚拟主程序
中断服务程序
ORG 000BH
AJMP CTC0
ORG 0120H
CTC0: MOV TL0,#18H ;重新装如初值 MOV TH0,#0E0H
CPL P1.0 ;P1.0取反
RETI