51微控制器彙編延時分析

2021-12-29 19:52:40 字數 1206 閱讀 2463

51微控制器彙編延時分析:第一句是定義乙個延時函式標號,並將250傳到r7。第二句是放置乙個標號,並把250放到r6。

延時函式:

delay: mov r7, #250 ;1

d1: mov r6, #250 ;2

d2: djnz r6, d2 ;3

djnz r7, d1 ;4

ret ;5第一句是定義乙個延時函式標號,並將250傳到r7。

第二句是放置乙個標號,並把250放到r6。

第三句是放置乙個標號,並判斷rr6的值是否為0,不為0的話轉到後面標號對應處執行

第四句是先將r7減1 ,然後判斷r7是否為0 ,不為0的話轉到後面的標號對應處執行

第五句是函式結束,詳細用法請自行百度。

過程:程式呼叫延時函式,根據第一句的編號找到此函式並從第一句開始執行,將r7內的值變為250,執行之後:

r7:250

此時開始執行第二句,將250放在r6內,並在此句前放置標號:d1,執行之後:

r7:250

r6:250

然後開始執行第三句,判斷r6是否為0,不為0轉到標號d2處開始執行,而d2的標號也是第三條語句,因此只要r6不為0,則一直執行本條語句,又知r6=250,因此,這條語句將執行250次後結束。此時:

r7:250

r6:0

此時將執行第四句,首先將r7值減1,然後判斷其值是否為0,將r7-1後r7為249,因此將執行其後的標號d1,即第二句。此時:

r7:249

r6:0

執行第二句之後,又將執行第三句,執行250次後,再次執行語句四,如此迴圈即在第四句執行了250次後執行第五句,即結束函式。

共執行了:

第一句:1次

第二句:251次

第三句:250*250次

第四句:250次

第五句:1次

若以普通51微控制器12m晶振為例,因第

一、二句是單週期語句,第三四句是雙週期語句,第五句是四週期指令,因此,此函式所用時間為:

time = 1 *1+ 251*1 +(250*250)*2+250*2+1*4 = 125756us

仔細觀察可發現此函式執行時間大多數在第三條語句,因此也可只計算第三條語句來約等於時間即:

time= 250 * 250 * 2 =125000us

51微控制器的準確延時分析

首先我們來看個簡單的例子 51 include reg52.h 此檔案中定義了微控制器的一些特殊功能暫存器 typedef unsigned int u16 對資料型別進行宣告定義 typedef unsigned char u8 sbit led p2 0 將微控制器的p2.0埠定義為led vo...

微控制器C語言延時分析

1.例1,12mhz晶振除錯 以下兩個是無引數的delay函式,內部用的是for迴圈來delay。lcall 2個週期 mov a到rx 1個週期 clr 1個週期 inc 1個週期 cjne 2個週期 ret 2個週期 lcall ret clr mov 110 inc cjne 2 2 1 1 ...

51微控制器延時函式

c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的 在使用時應該使用unsigned char作為延時變數。以某晶振為12mhz的微控制器為例,晶振為12mhz即乙個機器週期為1us。一.500ms延時子程式 程式 voi...