① 怎樣用單片機的匯編語言編寫一個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