彙編延時程式,彙編延時程式

2021-12-19 13:18:30 字數 4798 閱讀 7274

1樓:

你先看下這段延時程式:

採用12m晶振,用51晶片處理。

delay: mov r7,#250;

d1:mov r6,#250;

d2:djnz r6 ,d2;

djnz r7,d1;

ret以上是一段延時0.125秒的程式。

它計算的原理是:

這段程式最終執行了250*250次,而djnz指令執行需要2個機器週期,一個機器週期需要1微秒的時間,所以以上延時程式就是250*250*2=0.125秒。

你的程式原理跟這個應該是一樣的~

2樓:匿名使用者

ys2:mov r4 ,#10 給r4置入初值10d2:mov r5,$ 給r5置入當前地址

djnz r4,d2 r4減1不為0跳到d2處

ret r4為0時子程式結束返回

延時4.74毫秒是與晶振有關的。

3樓:手機使用者

r7,#0ffh

djnz r7,$

ret;1ms延時程式

dl1ms: mov r5,#02h

loop: lcall dl513 ;515usdjnz r5,loop

ret ;總時1034us有1.034ms;3ms延時程式

dl3ms: mov r4,#03h

loop2: lcall dl1ms ;1036usdjnz r4,loop2

ret ;總時3117us有3.117ms;10ms延時程式

dl10ms: mov r6,#14h

loop1: lcall dl513 ;515usdjnz r6,loop1

ret ;總時7241us只有7.241ms;1s延時程式

dl1s:

mov r2,#100

djnz r2,dl10ms ;7243usret ;總時724303us只有0.724303s;5s延時程式

dl5s: mov r3,#05h

djnz r3,dl1s ;724305usret;總時3621528us只有3.621528s1、如此做累積誤差會比較大

2、用定時器做較長時的延時精度會高一些

3、用多重迴圈也要比迴圈巢狀好些

比如:kkkk0:mov r2,#xx

kkkk1:mov r3,#ll

kkkk2:mov r4,#nn

kkkk3:mov r5,#mm

djnz r5,$

djnz r4,kkkk3

djnz r3,kkkk2

djnz r2,kkkk1

ret適當選擇各迴圈常數

求解釋!!!組合語言:延時程式

4樓:生活如歌

需要注意的一點就是djnz指令是2週期的,所以你的時間是迴圈次數乘以2.

delay:mov r7,#250

del1:mov r6,#100

del2:mov r5,#10

djnz:r5,$;2個機器週期

djnz:r6,dl2

djnz r7,dl1

2*10*100*250=500000us=0.5s以上時間只是大概值,沒有考慮其它指令的週期,但影響不大。

5樓:匿名使用者

delay:mov r7,#250 第一層迴圈250次

del1:mov r6,#100 第二層迴圈100次

del2:mov r5,#10 第三層迴圈10次

djnz:r5,$ 如果r5不等於0,則跳轉到本行,也就是空轉10次

djnz:r6,dl2 如果r6不等於0,則跳到dl2行,給r5賦值

djnz r7,dl1 如果r7不等於0,則跳到dl1行,給r6賦值

所以總的空轉迴圈次數是250*100*10=250000次,通過調節r5,r6,r7值來控制延時時間

彙編 延時子程式

6樓:匿名使用者

daily proc near

mov cx,2000h

d0:mov ax,0ffffh

d1:dec ax

jz d1

loop d0

daily endp

延時大概是0.33s

其實延時跟cpu有很大關係,不能用軟體精確計算,可以用8254實現,硬體和軟體功能具有邏輯上的等效性。

7樓:匿名使用者

用delay來產生延時在要求較高的場合不大合適。

可呼叫系統時間來產生準確的延時,並且可控制延遲時間temp: mov ah,2ch

int 21h

add dh,5 ;獲得時間.dh為 當前的秒數,5秒可以自己選擇

push dx

wait:

pop dx

mov al,dh

push dx

mov ah,2ch ;新的時間

int 21h

cmp dh,al

jb wait ;小於5秒的話繼續查詢歡迎討論

8樓:

多麼準確?時間範圍多少?

微控制器就用定時器,pc就用bios提供的延時中斷呼叫(好像是68h中斷),去查查書吧。

9樓:前皛石鴻福

首先看第二組,d2:

movr2,#05h

djnz

r2,d2

這是一個死迴圈,出不來。

然後看第一組,

d1:mov

r2,#05h

d2:nop

djnz

r2,d2

,執行五遍d2。然後檢查r1,不為0,在執行五遍d2,然後檢查r1,為0。結束

再看第三組

d2:nop

djnz

r2,d2

執行五遍d2,然後檢查r1,不為0,跳到d1,但是此時r2為0,減去一後變成0ffh,執行256次d2,r2變為0,然後在檢查r1,為0後返回。

求組合語言延時程式,延時10毫秒的延時程式

10樓:做而論道

第一、組合語言有好多種。

第二、延時時間和你用的主頻有關。

這兩個問題,樓主說明一下先。

11樓:大別山的蝸牛

**如下:

delay10s:

lcall delay100ms

inc r1

cjne r1,#100,delay10smov r1,#0

retdelay100ms: ;誤差 0usmov r7,#100

dl1:

mov r6,#8eh

dl0:

mov r5,#02h

djnz r5,$

djnz r6,dl0

djnz r7,dl1ret

12樓:匿名使用者

51微控制器12m晶振延時10毫秒程式:

delay10ms:

mov r2,#20

delay1:

mov r3,#249

djnz r3,$

djnz r2,delay1

ret共延時10.023ms

13樓:最愛楷心

首先明確機器執行一條指令耗時大概是1us那麼延時10ms的程式如下:mov ax,50l1:mov bx,100l2:

dec bx     jnz l2dec axjnz l1執行完之後時間大約為10ms多一點

根據具體問題型別,進行步驟拆解/原因原理分析/內容拓展等。

具體步驟如下:/導致這種情況的原因主要是……

組合語言延時程式幫忙解釋一下

14樓:匿名使用者

程式看不大清楚,編一個類似程式來說明吧。

delay:

mov r7,#20    ;1

dly:

mov r6,#100   ;1*20

djnz r6,$     ;2*100*20djnz r7,dly   ;2*20

ret            ;2

以上各行指令註釋的第一個數字是執行該條指令所用的機器週期。後面資料是共執行了多少次改指令。

累計和就是延時時間(機器週期),換算成ms或s就可以了。

組合語言5秒的延時程式怎麼寫(微機原理)

15樓:做而論道

lcall dl500ms

lcall dl500ms

lcall dl500ms

……共十次,正好是5s。(假設晶振頻率是12mhz)dl500ms 延時時間的說明,可見:

16樓:匿名使用者

可以用定時器,這樣比較精準點。不用定時器那隻能用迴圈了,根據晶振計算5秒時間的迴圈次數賦初值,然後迴圈。

17樓:匿名使用者

可以用定時器,這樣比較精準點

求單片程式(彙編程式),求一個單片程式(彙編程式)

共陰數碼管,段接p2口 控制按鍵按p0.0,低電平有效。org 0000h start mov r0,00h mov dptr,tab loop mov a,r0 movc a,a dptr cpl a mov p2,a acall delay jb p0.0,num inc dec r0 mov ...

彙編子程式的問題,組合語言子程式是如何定義的

這不是返回自己本身迴圈執行,而是跳轉到子程式的第一行迴圈而已,有什麼不可以的,迴圈結構,任何地方都可以的。但有一點,子程式不論迴圈多少次,最終必須執行一行返加指令ret,也就是子程式必須要有一條ret指令,你的子程式最後是缺少一行ret指令的,加上了就可以的。組合語言子程式是如何定義的?這樣定義的 ...

用組合語言編寫程式,用組合語言編寫一個程式。

那個 是可以,但是其實可以更簡單,小寫字母內碼範圍是61h 7ah 大寫字母內碼範圍是41h 5ah 那麼只要比較輸入的字元內碼是否在61h 7ah之間如果是,則將其減去20h,就是大寫字母了 print macro para 定義一個顯示字串的巨集 lea dx,para mov ah,9 int...