日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言写c51延时程序,单片机延时程序实例讲解

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言写c51延时程序,单片机延时程序实例讲解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在單片機實驗中,有一個很重要也是很基本的子程序必須要求我們掌握,那就是延時程序。下面我憑記憶來講解延時程序。

課本上講,1個機器周期=6個狀態(tài)周期=12個時鐘周期,而這個時鐘周期與晶振頻率有關。我們接下來要上的實驗基本都是以12MHz的晶振。12M的頻率,得其周期為1/12乘10的-6方s,那么1個機器周期就是它的12倍,即1us,而一般語句需要2個機器周期,例如

MOV R6,#20

DNJZ R6,$

每一次執(zhí)行時,每一個過程就需要2個機器周期,為1us乘2。.同樣C語言中for循環(huán)語句沒執(zhí)行一次也是2個機器周期,即2us。下面我會以每個語句執(zhí)行一次用時的2us為基本單位,不會再細化了。

匯編語言最基本延時:

MOV R6,#20

D1:MOV R7,#248

DNJZ R7,$//循環(huán)248次,共用248X2us,

DNJZ R6,D1

我開始也是搞不懂怎么算它到底延時多少,現(xiàn)在給大家寫它表達式:

我覺得應該從最后往前算,在MOR R7,#248執(zhí)行一次前提下,用時1X2us,然后循環(huán)減248,用時248X2us,故共用時[2+2X248]us。

然而又由于DNJZ R6,D1,上面的過程又循環(huán)20次,故上面的循環(huán)最終用時20X[2+2X248]us。

接著注意到單純DNJZ R6,D1會用時20X2=40us。

最后注意過執(zhí)行唯一一次的? MOV R6,#20會用時1X2us。

所有,最終表達式為:1X2us+20X[2+2X248]us+20X2=10002us=10ms=0.01s。

同理,用c51編的延時程序要了解它必須也要寫出它的表達式,下面的C51延時程序可以試著自己寫出表達式:

void delay02s(void)

{

unsigned char i,j,k;

for(i=20;i>0;i–)

for(j=20;j>0;j–)

for(k=248;k>0;k–);

}

我還是把表達式寫在這,[(248X2+2)X20+2]X20=199240=199.24ms=0.2s

再給一個我驗證過的程序,這是個比較典型和基本的延時程序應用例子:

#include

sbit L1=P0^0;

void delay02s(void)

{

unsigned char i,j,k;

for(i=20;i>0;i–)

for(j=20;j>0;j–)

for(k=248;k>0;k–);

}

void main(void)

{

while(1)

{

L1=0;

delay02s();

L1=1;

delay02s();

}

}

能看出它的功能么?他就是讓一個燈不停的閃啊閃,亮個0.2s,又熄個0.2s,如此反復。

總結(jié)

以上是生活随笔為你收集整理的汇编语言写c51延时程序,单片机延时程序实例讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。