日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當前位置:首頁 > 嵌入式培訓 > 單片機學習 > 單片機教程 > 單片機延時方法 51單片機精確延時操作詳解

單片機延時方法 51單片機精確延時操作詳解 時間:2018-07-25      來源:未知

單片機延時方法 51單片機精確延時操作詳解

實現延時的方法有兩種:一種是硬件延時,另一種是計時器/計數器。該方法既能提高CPU的效率,又能實現準確的延時,另一方面是軟件延時。該方法主要采用循環體。今天主要介紹軟件延時,對硬件延時,然后對定時器部分進行詳細的說明。

單片機周期介紹:

在電子技術中,脈沖信號是一個按一定電壓幅度,一定時間間隔連續發出的脈沖信號。脈沖信號之間的時間間隔稱為周期;而將在單位時間(如1秒)內所產生的脈沖個數稱為頻率。頻率是描述周期性循環信號(包括脈沖信號)在單位時間內所出現的脈沖數量多少的計量名稱;頻率的標準計量單位是Hz(赫)。電腦中的系統時鐘就是一個典型的頻率相當精確和穩定的脈沖信號發生器。

指令周期:CPU執行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。對于一些簡單的的單字節指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執行,不再需要其它的機器周期。對于一些比較復雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器周期。通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。

1、時鐘周期:也稱為振蕩周期,一個時鐘周期 = 晶振的倒數。對于單片機時鐘周期,時鐘周期是單片機的基本時間單位,兩個振蕩周期(時鐘周期)組成一個狀態周期。

2、機器周期:單片機的基本操作周期,在一個操作周期內,單片機完成一項基本操作,如取指令、存儲器讀/寫等。

3、機器周期=6個狀態周期=12個時鐘周期。

51單片機的指令有單字節、雙字節和三字節的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執行所占時間為12*(1/ 晶振頻率)= x μs。常用單片機的晶振為11.0592MHz,12MHz,24MHz。其中11.0592MHz的晶振更容易產生各種標準的波特率,后兩種的一個機器周期分別為1 μs和2 μs,便于精確延時。

接下來列出這三種不同的晶振的延時函數

1、 11.0592MHz

//N ms延時

void delay_ms(uint n)

{

uint i,j;

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

for(y=114;y>0;y–);

}

2、12MHz晶振

//延時n毫秒

void delay_ms(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

for(j=0;j<123;j++);

}12345678

//延時n秒

void delay_m(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

for(j=0;j<21738;j++);

}12345678

//延時10*n微秒

void delay_10um(unsigned int n)

{

while(n--);

}12345

3、24MHz晶振

//延時n毫秒

void delay_ms(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

//延時n秒

void delay_s(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

for(j=0;j<54053;j++);

} 1234567

//延時10*n微秒

void delay_10us(unsigned int n)

{

unsigned int i=0;

char j=0;

for(i=0;i

for(j=0;j<2;j++);

} 12345678

建議大家封裝為頭文件,可以方便的調用。

接下來介紹幾個自動適應主時鐘的延時函數

//參數:ms,要延時的ms數,自動適應主時鐘

#define MAIN_Fosc 11059200UL //定義主時鐘HZ

typedef unsigned int INT16U;

void delay_ms(INT16U ms) //INT16U 等價于 unsigned int

{

INT16U i;

do{

i=MAIN_Fosc/9600;

while(--i); //96T per loop

}while(--ms); //--ms ms=ms-1

} 123456789101112

//5us 延時函數,自動適應主時鐘

#define MAIN_Fosc 11059200UL //定義主時鐘HZ

void delay5us()

{

#if MAIN_Fosc == 11059200

_nop_();

#elif MAIN_Fosc == 12000000

_nop_();

#elif MAIN_Fosc == 22118400

_nop_(); _nop_(); _nop_();

#elif

} 12345678910111213

單片機中還可自動生成

//11.0592MHZ延時100微秒

void Delay100us() //@11.0592MHz

{

unsigned char i, j;

_nop_();

_nop_();

i = 2;

j = 15;

do

{

while (--j);

} while (--i);

}

1234567891011121314

//100US

void Delay100us() //@12.000MHz

{

unsigned char i, j;

i = 2;

j = 39;

do

{

while (--j);

} while (--i);

}

123456789101112

//100US

void Delay100us() //@24.000MHz

{

unsigned char i, j;

i = 3;

j = 82;

do

{

while (--j);

} while (--i);

}

上一篇:單片機晶振的原理及作用詳解

下一篇:利用單片機制作報警器及報警系統常見問題分析

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 我的一级兄弟 电影| 幸福年简谱| 李白电影| 野蛮人电影| 改朝换代| 激情电影| 科特科本| 张国立主演电视剧全剧大全免费观看| 六年级上册美术教案人教版| 性的视频| 热巴电视剧在线观看免费| 情欲迷宫电影| 爱欲1990未删减版播放| 伦理电影在线看| monparis是什么牌子香水| 雪山飞狐之塞北宝藏演员表| 浙江卫视回放观看入口| 金珠主演电影韩剧| 婚前婚后电影高清完整版| 黄造时曹查理隔世情电影| 疯狂72小时演员表| 儿子给妈妈过生日,妈妈幸福感言| 男人天堂视频| 爱你的主题曲| 电影《一秒钟》完整版| 蹲踞式跳远教案| 芭蕉扇图片| 通灵之王| 藏文作文| 杨贵妃黄色片| 老江湖| 高等学校毕业生登记表自我鉴定怎么写| 欧美一级毛片免费看| 歌曲《国家》歌词| 汤姆·威尔金森| 美女写真裸体| 罗中立的《父亲》详案| free gay movies| 守护大电影| 寄诚庸| 买下我俄罗斯完整版免费观看|