单片机40ms定时器初值怎么设置啊?

来源:百度知道 编辑:UC知道 时间:2024/09/22 14:52:22
MAIN: MOV R3,#25
MOV TMOD,#01H
MOV TH0,#70H ;置定时器初值(定时40ms)
MOV TL0,#00H
SETB TR0 ;启动定时器0
LP1: JBC TF0,LP2 ;查询计数溢出
SJMP LP1 ;未到40 ms继续计数
LP2: MOV TH0,#0B8H ;重新置定时器初值
MOV TL0,#00H
要计时40ms,如果用12M晶振的话应该是
MOV TH0,#63H ;置定时器初值(定时40ms)
MOV TL0,#0C0H
才对,而且重装的第二次初值怎么会和前次不同呢?此程序用来产生1s的计时时间用来读取ds1302上的数据,为什么要1s读一次呢?请大家帮我解答,谢谢。

晶振不是12MHz,应该是6MHz~7MHz之间的晶振。由于第二次设定初值和以后的设定初值考虑到每两次设定初值之间存在若干指令会消耗一定的时间,所以会把指令的执行时间也算在内,因此第二次初值和后续的初值就会比第一次的初值要大一点;
由于ds1302的反应时间是大概1s转换一次数据,所以定时器理应设置为1s读一次。

烧程器