请问大家我可以用计时器0做多次定时,装入初值吗??
如下程序是遥控解码的程序,我用计时器0做3次定时,装入初值,每用一次是不是要先关计时器0,设置后再开了它吗?这样运用计时器0可以吗?
IR_IN:
MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待 IR 信号出现,IRIN=0则跳转到I2
JMP I1
I2: MOV R4,#20
I20: DJNZ R4,I20 ;寄存器-1不为0则跳转
JNB IRIN,I1 ;确认IR信号出现,IRIN等于1则跳到I1
JMP $+2
I21: JB IRIN,I3 ;等 IR 变为高电平
CLR TR0
MOV TH0, #0DEH ;设置9.2MS计数初值
MOV TL0, #0E1H
SETB TR0
I3: MOV R3,#0 ;8位数清为0
LL: JNB IRIN,I4 ;等 IR 变为低电平
JMP LL
CLR TR0
MOV TH0, #0EFH ;设置4.5MS计数初值
MOV TL0, #0CDH
SETB TR0
I4: JB IRIN,I5 ;等 IR 变为高电平
CLR TR0
MOV TH0, #0FCH ;0.84MS
MOV TL0, #0FAH
SETB TR0
JMP I4
I5: MOV C,IRIN
MOV R2,#0 ;0.14ms 计数
L1: CALL DEL
JB IRIN, N1 ;等 IR 变为高电平,若IRIN等于1则跳转
;IR=0,检查R2中的计数值
MOV A,#8
CLR C
SUBB A,R2 ;判断高低位 A=8-0-1=7H 大于1有进位,小于1无进位 P126 看I5: MOV R2,#0
;IF C=0 BIT=0
MOV A,@R0 ;A=20H,R0的内容不变 P114 IR_IN: MOV R0,#IRCOM
RRC A ;00100000 \00010000 C=0 P=124 即A=10H
MOV @R0,A ;处理完一位 地址20H的内容10H,R0和A的内容都不变 P116 INC R3 ;R3内容加1
CJNE R3,#8,LL ;需处理完8位,寄存器与立即数不相等则跳转
MOV R3,#0
INC R0 ;20H+1
CJNE R0,#24H,LL ;收集到4字节了即32位,1字节8位 JMP IR_SHOW
N1: INC R2
CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开,寄存器与立即数不相等即跳转
RET
[解决办法]
先停再装,其实是看你对时间要求是不是那么严格,不严格怎么弄都可以