使用守时器T0发生守时脉冲。每隔2ms发生宽度为2个机器周期的正脉冲,由P1.0输出此守时序列脉冲信号(设时钟频率为6MHZ)。
答:首要求出守时器T0初值。由于时钟频率为6MHZ,所以,机器周期为2μs。
由于:t=(213-T0初值)′机器周期
所以,当t=2ms时,则:(213-T0初值)′2′10-6=2′10-3
解得:T0初值=7096=11011101 11000B,其中将高8位11011101 B=DDH赋给TH0,低5位11000B=18H赋给TL0。
办法一:
选用查询作业方式,编程如下:
ORG0000H
AJMPMAIN
ORG0100H
MAIN:CLRP1.0
MOVTMOD , #00H;设定T0的作业方式
MOVTH0 , #0DDH;给守时器T0送初值
MOVTL0 , #18H
SETBTR0;发动T0作业
LOOP:JNBTF0 , $;$为当时指令指针地址
CLRTF0
SETBP1.0;发生2μs正脉冲
CLRP1.0
MOVTH0 , #0DDH;重装载TH0和TL0
MOVTL0 , #18H
SJMPLOOP
END
办法二:
选用中止作业方式,编程如下:
ORG0000H
AJMPMAIN
ORG000BH
AJMPT0INT
ORG0100H
MAIN:CLRP1.0
MOVTH0 , #0DDH;给守时器T0送初值
MOVTL0 , #18H
MOVIE , #82H;答应T0中止
SETBTR0;发动T0
SJMP$
中止服务程序:
ORG0300H
T0INT: SETBP1.0
CLRP1.0
MOVTH0 , #0DDH;重装载TH0和TL0
MOVTL0 , #18H
RETI