久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3084|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機的幾種精確延時

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:827139 發(fā)表于 2020-10-13 11:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實現(xiàn)延時通常有兩種方法:一種是硬件延時,要用到定時器/計數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時;另一種是軟件延時,這種方法主要采用循環(huán)體進行。 今天主要介紹軟件延時,關(guān)于硬件延時,之后定時器部分再做詳細說明。
首先介紹單片機的幾個周期
在電子技術(shù)中,脈沖信號是一個按一定電壓幅度,一定時間間隔連續(xù)發(fā)出的脈沖信號。脈沖信號之間的時間間隔稱為周期;而將在單位時間(如1秒)內(nèi)所產(chǎn)生的脈沖個數(shù)稱為頻率。頻率是描述周期性循環(huán)信號(包括脈沖信號)在單位時間內(nèi)所出現(xiàn)的脈沖數(shù)量多少的計量名稱;頻率的標(biāo)準(zhǔn)計量單位是Hz(赫)。電腦中的系統(tǒng)時鐘就是一個典型的頻率相當(dāng)精確和穩(wěn)定的脈沖信號發(fā)生器。
指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機器周期。對于一些比較復(fù)雜的指令,例如轉(zhuǎn)移指令、乘法指令,則需要兩個或者兩個以上的機器周期。通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。
時鐘周期:也稱為振蕩周期,一個時鐘周期 = 晶振的倒數(shù)。對于單片機時鐘周期,時鐘周期是單片機的基本時間單位,兩個振蕩周期(時鐘周期)組成一個狀態(tài)周期。
機器周期:單片機的基本操作周期,在一個操作周期內(nèi),單片機完成一項基本操作,如取指令、存儲器讀/寫等。
機器周期=6個狀態(tài)周期=12個時鐘周期。
51單片機的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執(zhí)行所占時間為12*(1/ 晶振頻率)= x μs。常用單片機的晶振為11.0592MHz,12MHz,24MHz。其中11.0592MHz的晶振更容易產(chǎn)生各種標(biāo)準(zhǔn)的波特率,后兩種的一個機器周期分別為1 μs和2 μs,便于精確延時。
接下來列出這三種不同的晶振的延時函數(shù)
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<n;i++)
        for(j=0;j<123;j++);
}
//延時n秒void delay_m(unsigned int n)
{
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<21738;j++);
}
//延時10*n微秒void delay_10um(unsigned int n)
{
    while(n--);
}
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<n;i++)  
        for(j=0;j<54053;j++);   
}  
//延時10*n微秒  void delay_10us(unsigned int n)  
{  
    unsigned int i=0;  
    char j=0;  
    for(i=0;i<n;i++)  
        for(j=0;j<2;j++);  
}  
建議大家封裝為頭文件,可以方便的調(diào)用。
接下來介紹幾個自動適應(yīng)主時鐘的延時函數(shù)
//參數(shù):ms,要延時的ms數(shù),自動適應(yīng)主時鐘  #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  
}  
//5us 延時函數(shù),自動適應(yīng)主時鐘  #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  
}  
單片機中還可自動生成
//11.0592MHZ延時100微秒
void Delay100us()       //@11.0592MHz
{
    unsigned char i, j;
    _nop_();
    _nop_();
    i = 2;
    j = 15;
    do
    {
        while (--j);
    } while (--i);
}
//100US
void Delay100us()       //@12.000MHz
{
    unsigned char i, j;
    i = 2;
    j = 39;
    do
    {
        while (--j);
    } while (--i);
}
//100US
void Delay100us()       //@24.000MHz
{
    unsigned char i, j;
    i = 3;
    j = 82;
    do
    {
        while (--j);
    } while (--i);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:828768 發(fā)表于 2020-10-15 08:49 | 只看該作者
謝謝樓主的分享。如果能結(jié)合振晶頻率在代碼中再注釋一下時延的計算過程,就更利于小白學(xué)習(xí)了。
回復(fù)

使用道具 舉報

板凳
ID:831065 發(fā)表于 2020-10-17 16:56 | 只看該作者
樓主 我還有點不懂的地方可以求解嗎?
回復(fù)

使用道具 舉報

地板
ID:135950 發(fā)表于 2020-10-19 10:53 | 只看該作者
好東西收藏起來先。。。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产色综合久久不卡蜜臀 | 欧美一区二区三区在线看 | 中文字幕高清 | 欧美色图另类 | 国产精品有限公司 | 成人免费视频观看 | 欧美午夜精品 | 亚洲精品一区二区三区蜜桃久 | 欧美淫片 | 亚洲一区二区三区在线播放 | 国产精品揄拍一区二区 | 国产成人精品久久久 | 精品一区二区三区在线观看 | 午夜精品网站 | www.97国产| 日韩欧美一级片 | 国产日韩欧美 | 欧美日韩一区二区三区不卡视频 | 在线看日韩 | 99re在线视频观看 | 91精品国产综合久久婷婷香蕉 | 天天玩夜夜操 | 日本不卡视频在线播放 | a级免费黄色片 | 欧美一区二区三区 | 久久国产综合 | 欧美亚洲国语精品一区二区 | 久久久久免费精品国产 | 国产欧美日韩精品一区 | 欧美极品在线视频 | 97精品超碰一区二区三区 | 成人福利网站 | 国产精品一二三区在线观看 | 国产精品久久久久久久7777 | 亚洲精品第一页 | 中文字幕亚洲一区二区va在线 | 国产免费a视频 | 一级片在线视频 | 亚洲精品电影在线观看 | 亚洲成人精品免费 | 久久久久91 |