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

2021-12-16 14:00:49 字數 1813 閱讀 6305

1樓:匿名使用者

舉例來說明吧:

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)總結:第一步:在延時程式沒行後邊標註該指令執行的機器週期第二步:

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

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

2樓:向廣川

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

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

3樓:匿名使用者

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

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

在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微秒

4樓:

;**********《延時子程式》*****====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微控制器c語言for迴圈延時程式時間計算

5樓:正版熊咔

一條for語句好像是佔用10個機器週期

6樓:東方白飛

一條for語句執行時間為10us

7樓:情緣一生遠

,你發現那兩個空迴圈後面是不是多了個「;」符號,那個就是迴圈的內容。

for迴圈後面沒有大括號的話,就以最近的「;」符號算一次迴圈。

不知道你聽明白沒有

8樓:

不可能的,是不是你的編譯有錯的啊

我改的晶振12m,在keil 4.0 裡面編譯的,為你得出的結果最大也就是40ms,這是軟體的原因,

不可能出現100ms那麼大的差距,是你的軟體的原因。

不信你實際編寫一個秒鐘,利用原理計算編寫一個燒進微控制器和利用軟體測試的秒程式燒進微控制器,你會發現原理計算的程式是正確的

at89c51微控制器怎麼用組合語言寫“多個延時程式”

微控制器組合語言中要使一個延時程式可以被不同情況下呼叫而延時不同的時間,可以通過類似於c語言中傳遞引數的方式來實現,舉例如下 org 0000h ljmp main org 0030h main mov p0,5ah p0上的led燈間隔點亮mov r7,50 r7是延時傳遞引數lcall dela...

80C51微控制器按鍵中斷實驗(用組合語言)

語句分號後為你原先指令,前面為修改後指令。主要是標號錯誤和輸入時輸入法錯誤,要英文模式。修改後編譯通過。但沒有 按8次後重複開始狀態,你自己加入該功能。org 0000h ljmp main org 0003h ljmp iint0 ljmp int0org 0013h ljmp iint1 ljm...

微控制器組合語言的程式設計問題

首先教你如何理解jnb和jb,jnb就是jump not bit,這樣不好理解,解釋一下就明白了 jump表示跳轉,not表示0,bit表示該位。它實際是條件判斷語句,意思是 如果該為為0則跳轉,否則繼續下一條。例 jnb p1.1,mark 如果p1.1位為零則跳轉到mark標誌指向的指令,否則繼...