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

2021-10-02 02:46:00 字數 3028 閱讀 7690

首先我們來看個簡單的例子

51#include "reg52.h"

//此檔案中定義了微控制器的一些特殊功能暫存器

typedef

unsigned

int u16;

//對資料型別進行宣告定義

typedef

unsigned

char u8;

sbit led=p2^0;

//將微控制器的p2.0埠定義為led

void

delay

(u16 i)

void

main()

}

我們使用keil的反彙編功能,將關鍵的延時**轉換為組合語言,因為組合語言可以精確的算出延時時間

29

:void

main()

30:c:0x0812

80ec sjmp main

(c:0800)c:

0x0814

787f mov r0,#0x7f

c:0x0816 e4 clr a

c:0x0817 f6 mov @r0,a

c:0x0818 d8fd djnz r0,c:

0817

c:0x081a

758107 mov sp

(0x81

),#0x07

c:0x081d

020800 ljmp main

(c:0800)18

:void

delay

(u16 i)19:

我在這裡大致畫出了這段**的流程圖

然後計算關鍵**的時間

void

delay

(u16 i)

可以算出總計為:1+1+1+2+2+2=9(機器週期)

總時間等於 50000*9=450000(機器週期)約等於450ms

80c51微控制器外接了乙個11.0592m的晶體振盪器,那我們就說這個微控制器系統的時鐘週期是1/11.0592m,8051系列微控制器的的時鐘頻率是晶振頻率的12分頻,乙個機器週期約為1us

然後我們再來看一段帶有迴圈功能的延時**

void

delay

(uint z)

delay

(1000);

//延時1000毫秒

我們將其翻譯成機器語言

迴圈部分:

小迴圈y

c:

0x0842

edmov a,

r51

c:0x0843

1d dec

r51

c:0x0844

7001

jnz c:

0847

2 c:

0x0846

1c dec r4 (

1)

c:0x0847

edmov a,

r51

c:0x0848

4c orl a,

r41

c:0x0849

70f7

jnz c:

0842

2 +1

+2+1

+1+2

=8(機器週期)

`大迴圈

```csharp

(c:0x082a

7fe8 mov r7,#0xe8

c:0x082c

7e03 mov r6,#0x03)c:

0x083e

7d01 mov r5,#0x78

1

c:0x0840

7c00 mov r4,#0x001c:

0x0835

d3setb

c1

c:0x0836

efmov a,r71

c:0x0837

9400

subb a,#0x001c:

0x0839

eemov a,

r61

c:0x083a

9400

subb a,#0x001c:

0x083c

4014

jc c:

0852

2【小迴圈】

c:0x084b

efmov a,

r71

c:0x084c

1fdec

r71

c:0x084d

70e6 jnz

delay

(c:0835

)2

迴圈總時間=大迴圈次數

=(13+8120)*1000

=973000 約等於1000us

ok

51微控制器彙編延時分析

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第一句是定義乙個延時函式標號,並將...

微控制器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...