51单片机定时器编程
发布网友
发布时间:2022-05-02 22:14
我来回答
共3个回答
热心网友
时间:2022-06-27 19:42
10ms中断后次,计中断的200次求反P1.1、P1.2
ORG 0000H
START: LJMP MAIN
ORG 001BH
LJMP CTC1 ……1分
ORG 0100H
MAIN : MOV TMOD,#00H ……3分
MOV R0,#200
MOV TH1, #0CH
MOV TL1, #78H
SETB EA ……3分
SETB ET1
LOOP: SETB TR1
HERE: SJMP $
CTC1: MOV TH1, #0CH ……3分
MOV TL1, #78H
DJNZ R0,RTI
MOV R0,#200
CPL P1.1
CPL P1.2
RTI: RETI
END
热心网友
时间:2022-06-27 19:43
因为TMOD采用的方式0计数 所以最大计数范围是8192个Tp ,1514转换过来是1*512 + 5*32 + 1*16 +4 = 692 再有8192 - 692 = 7500,所以得出7500*2us=0.015ms 可知要改为相应1s ,已经超出最大计数范围 所以应加入循环 即
ORG 0000H
START: LJMP MAIN
ORG 001BH
LJMP CTC1 ……1分
ORG 0100H
MAIN : MOV TMOD,#00H ……3分
MOV TH1, #0CH
MOV TL1, #78H
MOV R0, #64H
SETB EA ……3分
SETB ET1
LOOP: SETB TR1
HERE: SJMP $
CTC1: MOV TH1, #0CH ……3分
MOV TL1, #78H
DJNZ R0,NEXT
MOV R0,# 64H
CPL P1.1
CPL P1.2
NEXT: RETI
END
热心网友
时间:2022-06-27 19:43
用10ms循环100次来代替
T1送初值6316H(10ms)后,加上指令MOV R0 #100(循环次数)再开中断。再在中断程序里,即上面的ctc1中,重送初值后,加指令DJNZ R0 EXIT MOV R0 100.........最后,把RETI改为EXIT :RETI
可编译一下试试