A-A+

已知fosc=12MHz 试编制程序:使T0每计满500个外部输入脉冲(设10ms内 外部输

2022-08-13 22:17:05 问答库 阅读 199 次

问题详情

已知fosc=12MHz,试编制程序:使T0每计满500个外部输入脉冲(设10ms内,外部输入脉冲数少于500个)后,在P1.0输出一个脉宽10ms(由T1定时)的正脉冲。

参考答案

根据题目要求,将T0用作计数器方式1,T1用作定时器方式1。
①计算定时/计数器初值
T0初值=216-500=65536-500=65036=FE0CH
T1初值=216-10000μs/1μs=65536-10000=55536=D8F0H
②设置TMOD:TMOD=00010101B
③编制程序如下:
ORG 0000H ;复位地址
LJMP STAT ;转初始化
ORG 000BH ;10中断入口地址
LJMP IT0 ;转T0中断服务程序
ORG 001BH ;T1中断入口地址
LJMP IT1 ;转T1中断服务程序
ORG 0100H ;初始化程序首地址
STAT:MOV SP,#60H ;置堆栈
MOV TMOD,#15H ;置T0计数器方式1,T1定时器方式1
MOV TH0,#0FEH ;置T0初值,计数500
MOV TL0,#0CH ;
MOV TH1,#0D8H ;置T1初值,定时10ms

MOV TL1,#0F0H ;
SETB PT0 ;置T0为高优先级
MOV IE,#10001010B ;T0、T1开中
SETB TR0 ;T0启动
CLR P1.0 ;P1.0输出低电平
LJMP MAIN ;转主程序,并等待中断
ORG 0200H ;T0中断服务程序
IT0:SETB P1.0 ;P1.0输出正脉冲
SETB TR1 ;启动T1定时10ms
MOV TH0,#0FEH ;重置T0初值,计数500
MOV TL1,#0CH ;
RETI ;T0中断返回
ORG 0300H ;T1中断服务程序首地址
IT1:CLR P1.0 ;停输出脉冲
CLR TR1 ;T1停
MOV TH0,#0D8H ;重置T1初值,定时10ms
MOV TL1,#0F0H ;
RETI ;T1中断返回

考点:脉冲,程序