用匯編怎麼寫51微控制器的延時程式

時間 2021-12-21 11:17:17

1樓:哈爾濱微控制器

假定晶振是12m的 cpu at89x51mov r0,#10 這條是1us (一個機器週期)執行1次 1us

djnz r0,$ 這條是兩us(兩個機器週期)執行10次*2=20us

一共 1us+20us=21us

也就是 總的時間=1us+2*r0(us)

2樓:匿名使用者

呵呵,我大概給你說說吧,例如mov指令,執行這條指令需要一個機器週期。djnz指令,執行這條指令需要2個機器週期。(一機器週期=1微秒)。

你要是用定時器工作的話需要先定義一下tmod th tl的數值 這個就用到晶振了了。要先看多少晶振,假如6mhz,就用12除6,得出來的是2毫秒。在利用計算公式算出你需要的延時時間。

(計算公式我沒記住。呵呵,你可以在書上看看,應該有的)

3樓:

和前兩位的差不多,最簡單的就是運用mov賦值的,再用djnz遞減的方式,計算出每條指令執行時間,再加上迴圈字數,延時時間按照你自己的時間編寫迴圈次數和賦值大小;另外,你也可以用定時器編寫,計算好你的延時時間,當時間達到時輸出高電平,作為中斷訊號,返回主程式,執行設定延時後的目標程式。

彙編和c各有好處,就我個人而言,浮點數的計算最好用c編,彙編不好解決,而且需要的很多**,c很容易就可以實現!

4樓:匿名使用者

微控制器彙編實現延遲的程式**:

delay: mov r7,#250 ;

d1: mov r6,#250 ;

d2: djnz r6,d2 ;

djnz r7,d1 ;

ret冒號前面的「delay」、「d1」、「d2」為語句行的名字,是為了程式的條件語句跳轉用的,分號後面為註釋,計算機執行時將過濾掉這些資訊,最大限度減少**長度,提高效率。

5樓:匿名使用者

你去飯客網路看下彙編教程吧。。希望對你有幫助

51微控制器,求用組合語言編寫延時1小時的子程式,要精確到秒級別

6樓:匿名使用者

延時一小時,這麼長,應該要用定時器,不能用迴圈的方式。

org 00h

ajmp main

org 0bh

ajmp t0int0

org 30h

main:

mov sp,#60h

mov r4,#20

mov tmod,#01h

mov th0,#3ch ;12m晶振時定時初值取#3cb0h,還可細調如 tl=#0b7h,可以更準

mov tl0,#0b7h

setb ea

setb et0

setb tr0

ajmp $

t0int0:

mov th0,#3ch ;定時中斷子程式。重灌定時常數mov tl0,#0b7h

djnz r4,rti ;未1s,跳出中斷mov r4,#20

inc 26h ;秒+1

mov a,26h

cjne a,#60,rti

mov 26h,#0

inc 27h ;分+1

mov a,27h

cjne a,#60,rti

mov 27h,#0

inc 28h ;時+1

mov a,28h

cjne a,#24,rti

mov 28h,#0

rti:

retiend

7樓:做而論道

微控制器時鐘,時分秒。

時,即每隔一小時,加一次一。

利用這種程式即可,不用單獨編寫子程式。

51微控制器使用組合語言迴圈延遲時間怎麼算? 5

8樓:匿名使用者

舉例來說明吧:

delay:

mov r0,#10 ;1

delay1:

mov r1,#100 ;1*10djnz r1,$ ;2*100*10djnz r0,delay1 ;2*10ret ;2total=1+1*10+2*100*10+2*10+2=2033time=total*1/(focse/12)總結:第一步:在延時程式沒行後邊標註該指令執行的機器週期第二步:

在機器週期後邊乘以該指令迴圈的次數第三步:計算總共用的機器週期數

第四步:計算總延時時間。

9樓:向廣川

第一步:在延時程式沒行後邊標註該指令執行的機器週期

第二步:在機器週期後邊乘以該指令迴圈的次數第三步:計算總共用的機器週期數第四步:計算總延時時間。 有的軟體也能算、、、、

10樓:匿名使用者

時間精確的延時程式要用組合語言來編寫。

計算延遲時間要查詢每一條程式的執行週期數,然後加起來就是了。

在12m晶振的系統中,每個機器週期是1微秒借用一下:

舉例來說明吧:

delay:

mov r0,#10 ;1(週期)delay1:

mov r1,#100 ;1djnz r1,$ ;2djnz r0,delay1 ;2ret ;2週期數=1+((1+(2*100)+2)*10)+2=2033延遲時間=2033週期*1微秒=2033微秒從到這個程式開始到返回到呼叫的那個程式用了2033微秒

11樓:

;**********《延時子程式》*****====882usdelay882: ;1.085x((202x4)+5)=882mov r7,#202delay882_a:

nopnopdjnz r7,delay882_aret

;**********《延時子程式》*****===1000usdelay1000: ;1.085x((229x4)+5)=999.

285mov r7,#229delay1000_a:nopnopdjnz r7,delay1000_aret

;**********《延時子程式》*****===2400usdelay2400: ;1.085x((245x9)+5)=2397.

85mov r7,#245delay2400_a:nopnopnopnopnopnopnopdjnz r7,delay2400_aret

51微控制器組合語言學習軟體,51微控制器用組合語言需要什麼軟體?

我想告訴你,keil可以編輯彙編的檔案.你建好一個project後,在source group 1上點右鍵,選add files to group source group 1 這時,就可以選中你的asm檔案 要選asm檔案得先把對話方塊中的檔案類弄選為 雙擊就可以新增到source group 1...

51微控制器求用組合語言編寫延時1小時的子程式要

延時一小時,這麼長,應該要用定時器,不能用迴圈的方式。org 00h ajmp main org 0bh ajmp t0int0 org 30h main mov sp,60h mov r4,20 mov tmod,01h mov th0,3ch 12m晶振時定時初值取 3cb0h,還可細調如 tl...

51微控制器軟體延時為什麼不準確,51微控制器中 怎麼得到精確延時?

因為呼叫事件函式和運算的時候,你是要計算指令週期的。但是我們一般不考慮,導致時間不夠準確,但是你如果要精確的計算時間,c語言是不行的,還是建議你用匯編。或者定時器也行!51微控制器中 怎麼得到精確延時?10ms得到了 1秒還不好弄嗎?定義個計數的 加100次即為1秒 要精確到什麼份上?晚個1ms以下...