① 怎样用单片机的汇编语言编写一个50ms的延时程序。(晶振频率为12MHz)ps51单片机
DEL: MOV R7,#210
DEL1: MOV R6,#117
DEL2: DJNZ R6,DEL2
NOP
DJNZ R7,DEL1
NOP ;此处17个NOP
NOP
....
NOP
RET
1μs+(1+234+1+2)μs*210+2μs+17=50000μs
其实考虑到LCALL调用这个函数的时间,末尾应该再减少2个NOP。
另外,实际使用中需要精确延时的话应该使用定时器中断,一方面是精确,另一方面延时函数执行时,如果有中断发生,那么延时就不正确了。
② 用汇编怎么写51单片机的延时程序
DEL1S:MOV
R7
,#10
D1:
MOV
R6,#200
D2:
MOV
R5
,#250
DJNZ
R5,$
DJNZ
R6,D2
DJNZ
R7,D1
RET
说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等
2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV
R7,#10
修改成:MOV
R7,#5