51单片机的定时器怎么做延时 汇编

51的主程序和定时器是并行执行的,但是我想使主程序中每到一秒钟才往下执行,也就是类似于延时,但我不想用delay,用定时器怎么实现。我会用定时器做个一秒中断程序,但是主程序还是在不停地执行,无法做到一秒后才往下执行。如果用sjmp $,中断完了还是在循环,求教怎么解决。

定时器中断里1S时,作个标志,主程序里判断这标志。
给你一个流水灯的例子参考。
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H

MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#20
SETB EA
SETB ET0
SETB TR0
MAIN0:
MOV A,#01H
MAIN1:
MOV P1,A
JNB F0,MAIN1
CLR F0
RL A
INC A
AJMP MAIN1

T0INT:
MOV TMOD,#01
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#20
SETB F0
RTI:
RETI

END
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-05
1)你的主程序必须在1秒内完成一个过程,然后等待下一秒的到来;
2)主程序放在一个循环内,并设置一个标记,以判断是否触发执行主程序,还是继续空循环;
3)这个标记就由延时中断例程来赋值;
其实,如果你的主程序能够在1秒内完成,由没有其他任务的话,完全可以放在中断例程里运行的;本回答被网友采纳
第2个回答  2012-03-18
貌似想到的方法和复杂,就是每个语句前都用CJNE R1,#00H,$ // 执行语句 // ,MOV R1,#00H
然后在定时器内使R1置1或其他值,这样做很麻烦,不知你要这样干什么???
相似回答