MOV TH1,#0FCH MOV TH0,#18H CLR TF1 SETB TR1 LOOP1: JBC TF1,LOOP2 SJMP LOOP1 LOOP2: MOV TMOD,#10H
MOV TH1,#0ECH MOV TL1,#78H CLR TF1 SETB TR1
LOOP3: JBC TF0,LOOP SJMP LOOP3
4、以中断方法设计单片机秒、分脉冲发生器。假定P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。 答:时钟计时的关键问题是秒的产生,因为秒是最小时钟单位,但使用MCS-51的定时器/计数器进行定时,即使按方式1工作,其最大定时时间也只能达到131毫秒。离1S还差很远。为此,可把秒计时用硬件定时和软件计数相结合的方法实现,即:把定时器的定时时间定为125ms,这样计数溢出8次就可得到1s。而8次计数可用软件方法实现。
为得到125ms定时,可使用定时器/计数器0,以工作方式1进行,假定单片机为6MHZ晶振,设计数
初值为X,则有如下等式:
( ―X)×2=125000 计算得计数初值0000101111011100B
(2)定时器定时采用中断方式完成,以便于通过中断服务程序进行溢出次数(每次125ms)的累计。计满8次即得到秒计时。 通过在程序中的数值累加和数值比较来实现从秒到分的计时。 ORG 0000H LJMP MAIN ORG 000B LJMP PITO
ORG 0030H MAIN:MOV SP,#60H ;确立堆栈区
MOV TMOD,#01H ;定时器0,工作方式1 MOV TL0,#0DCH;装计数器初值 MOV TH0,#0BH CLR P1.0 CLR P1.1
X=3036=0BDCH,二进制表示为
SETB 8CH;TR0置1,定时 开始 SETB 0AFH;EA置1,中断总允许 SETB 0A9H;ET0置1,定时器0中断允许 MOV R7,#08H ;要求的计数溢出次数 MOV R6,#00H;分缓冲单元清0 SJMP $
PITO: PUSH PSW ;中断服务程序,现场保护 PUSH ACC
MOV TL0,#0DCH ;计数器重新加载 MOV TH0,#0BH
MOV A,R7 ;循环次数减1 DEC A MOV R7,A
JNZ RET0 ;不满8次,转RET0返回 SETB P1.0; P1.0每秒钟产生一个机器 CLR P1.0 ;周期的正脉冲 INC R6;秒加1 MOV A,R6
XRL A,#60;判是否到60秒
JNZ RET0
SETB P1.1; P1.1每分钟产生一个机器 CLR P1.1; 周期的正脉冲 RET0: POP ACC POP PSW RETI
5、一个定时器的定时时间有限,如何实现两个定时器的串行定时,以满足较长定时时间的要求。
答:一个定时器的定时时间到,再启动另一个定时器。二个定时器循环启动。
6、使用一个定时器,如何通过软硬件结合的方法,实现较长时间的定时?
答:定时器的定时时间到以后,再用软件计数,用硬件定时和软件计数相结合的方法实现。
7、假定单片机晶振频率为6MHZ,要求每隔100ms,从外部RAM以data开始的数据区传送一个数据到P1口输出,共传送100个数据。要求以两个定时器串行定时方法实现。 答:设计数初值为X,则有如下等式:
( ―X)×2* =500* 计算得计数初值X=6=06H,二进制表示为00000110B
8、每隔1秒钟读一次P1.0,如果所读的状态为“1”,内部RAM10H
单元加1,如果所读的状态为“0”,则内部RAM11单元加1。假定单片机晶振频率为12MHZ,请以软硬件结合方法定时实现之。 答:计算计数初值:
( - X)*1* =50*
计算得计数初值X=15536=3CB0H,二进制表示为0011110011010000B ORG 0000H LJMP MAIN ORG 000B LJMP PITO ORG 0030H
MAIN:MOV SP,#60H ;确立堆栈区
MOV TMOD,#01H ;定时器0,工作方式1 MOV TL0,#0B0H;装计数器初值 MOV TH0,#3CH
SETB 8CH;TR0置1,定时 开始 SETB 0AFH;EA置1,中断总允许 SETB 0A9H;ET0置1,定时器0中断允许 MOV R7,#20 ;要求的计数溢出次数 MOV 10H,#00H MOV 11H,#00H SJMP $
PITO: PUSH PSW ;中断服务程序,现场保护
PUSH ACC
MOV TL0,#0B0H ;计数器重新加载 MOV TH0,#3CH
MOV A,R7 ;循环次数减1 DEC A MOV R7,A
JNZ RET0 MOV A,P1 JB ACC.7,PP INC 11H SJMP RET0 PP: INC 10H RET0: POP ACC POP PSW RETI
;不满20次,转RET0返回