① 請問這段單片機匯編語言程序(關於定時器延時)是什麼意思
DELAY:MOV
R3,#14H
;循環20次
MOV
TMOD,#10H
;定時器1工作於模式1(16位定時器)
MOV
TH1,#3CH
;賦初值,50毫秒溢出一次
MOV
TL1,#0B0H
SETB
TR1
;啟動定時器1
LP1:
JBC
TF1,LP2
;溢出位為1,則清0後轉移到LP2
SJMP
LP1
;否則等待TF1置1
LP2
:MOV
TH1,#3CH
;重新賦初值
MOV
TL1,#0B0H
DJNZ
R3,LP1
;20次循環完成則退出,否則轉LP1
RET
;綜述:以上共延時1秒。
② 單片機80c51,用匯編,編寫一個延時子程序,通過調用此程序實現在p1.0輸出周期為10ms的方波
ORG 0000H
AJMP MAIN
ORG 000BH
T0MS EQU NOT 5000 ; 定義定時器初值 12M晶振 5 mS = 5000 10 mS = 10000
MOV TL0, #LOW T0MS
MOV TH0, #HIGH T0MS
CPL P1.0 ; P1.0 取反 輸出 10 mS的方波
REIT
MAIN:MOV TMOD,#01H
MOV TL0, #LOW T0MS
MOV TH0, #HIGH T0MS
SETB TR0 ; 啟動定時器
SETB ET0 ; 開 T0 中斷
SETB EA ; 開 總 中斷
SJMP $
END
③ 用匯編怎麼寫51單片機的延時程序
DEL1S:MOV R7,#10x0dx0aD1: MOV R6,#200x0dx0aD2: MOV R5,#250x0dx0a DJNZ R5,$x0dx0a DJNZ R6,D2x0dx0a DJNZ R7,D1x0dx0a RETx0dx0ax0dx0a說明:1、如果不使用R5、R6、R7可以用別的單元替換,比如換成30H、31H、32H等等x0dx0a 2、這個程序是12M時鍾,如果時鍾不同,要修改數值。如6M時鍾,要把MOV R7,#10 修改成:MOV R7,#5
④ 單片機精準延時匯編語言
如果是用匯編語言的話,是可以做到精準延時的。當然首先要有一個精準的時鍾,也即是晶振要准確,比如使用精準的12M晶振12T模式的51單片機延時1毫秒,程序如下:
DELAY1MS:
MOVR3,#249;1
DJNZR3,$;2*249
MOVR3,#249;1
DJNZR3,$;2*249
RET;2
延時時間為:1+2*249+1+2*249+2=1000T,這里使用12M晶振,T=1微秒,所以總共延時1000微秒也即是1毫秒。如果要延時更多時間,可以採用循環方式來實現。當然在計算延時時間時要考慮到使用的單片機類型和型號,比如STC89C51是6T,DS80320是4T,STC12C5A60S2是12T,這些因數一定要考慮進去才行。