久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

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

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

單片機延時方(fang)法(fa) 51單片機精確延時操作詳解

實(shi)現延時(shi)的(de)(de)方法有兩(liang)種:一(yi)種是(shi)(shi)硬件(jian)延時(shi),另一(yi)種是(shi)(shi)計時(shi)器(qi)/計數器(qi)。該方法既能(neng)提(ti)高CPU的(de)(de)效率,又能(neng)實(shi)現準確的(de)(de)延時(shi),另一(yi)方面是(shi)(shi)軟件(jian)延時(shi)。該方法主要采用循環體。今(jin)天主要介(jie)紹軟件(jian)延時(shi),對硬件(jian)延時(shi),然(ran)后對定時(shi)器(qi)部(bu)分(fen)進行詳(xiang)細的(de)(de)說明。

單片機周(zhou)期(qi)介紹:

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

指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)周(zhou)(zhou)(zhou)(zhou)期(qi):CPU執(zhi)行一條指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)所需(xu)要的(de)(de)時間稱(cheng)為指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)周(zhou)(zhou)(zhou)(zhou)期(qi),它是(shi)以(yi)機(ji)器(qi)(qi)周(zhou)(zhou)(zhou)(zhou)期(qi)為單(dan)位(wei)的(de)(de),指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)不同,所需(xu)的(de)(de)機(ji)器(qi)(qi)周(zhou)(zhou)(zhou)(zhou)期(qi)也不同。對(dui)于(yu)一些簡單(dan)的(de)(de)的(de)(de)單(dan)字節指(zhi)(zhi)(zhi)(zhi)令(ling)(ling),在(zai)取(qu)(qu)指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)周(zhou)(zhou)(zhou)(zhou)期(qi)中,指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)取(qu)(qu)出到指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)寄存器(qi)(qi)后,立即(ji)譯碼執(zhi)行,不再(zai)需(xu)要其它的(de)(de)機(ji)器(qi)(qi)周(zhou)(zhou)(zhou)(zhou)期(qi)。對(dui)于(yu)一些比較復雜的(de)(de)指(zhi)(zhi)(zhi)(zhi)令(ling)(ling),例如轉移指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)、乘(cheng)法指(zhi)(zhi)(zhi)(zhi)令(ling)(ling),則需(xu)要兩(liang)個(ge)或者(zhe)兩(liang)個(ge)以(yi)上的(de)(de)機(ji)器(qi)(qi)周(zhou)(zhou)(zhou)(zhou)期(qi)。通(tong)常(chang)含一個(ge)機(ji)器(qi)(qi)周(zhou)(zhou)(zhou)(zhou)期(qi)的(de)(de)指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)稱(cheng)為單(dan)周(zhou)(zhou)(zhou)(zhou)期(qi)指(zhi)(zhi)(zhi)(zhi)令(ling)(ling),包含兩(liang)個(ge)機(ji)器(qi)(qi)周(zhou)(zhou)(zhou)(zhou)期(qi)的(de)(de)指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)稱(cheng)為雙周(zhou)(zhou)(zhou)(zhou)期(qi)指(zhi)(zhi)(zhi)(zhi)令(ling)(ling)。

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

 2、機器周期:單片(pian)(pian)機的基本操(cao)作(zuo)周期,在(zai)一個(ge)操(cao)作(zuo)周期內(nei),單片(pian)(pian)機完(wan)成(cheng)一項基本操(cao)作(zuo),如取指令、存儲器讀/寫等(deng)。

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

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

接下來(lai)列出這三種不同的(de)晶振(zhen)的(de)延時(shi)函數(shu)

1、 11.0592MHz

//N ms延(yan)時(shi)

void delay_ms(uint n)

{

uint i,j;

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

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

}

2、12MHz晶振(zhen)

//延時n毫秒

void delay_ms(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

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

}12345678

//延時(shi)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微(wei)秒

void delay_10um(unsigned int n)

{

while(n--);

}12345

3、24MHz晶(jing)振

//延時(shi)n毫秒

void delay_ms(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

//延時(shi)n秒

void delay_s(unsigned int n)

{

unsigned int i=0,j=0;

for(i=0;i

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

} 1234567

//延(yan)時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

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

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

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

#define MAIN_Fosc 11059200UL //定(ding)義主時(shi)鐘HZ

typedef unsigned int INT16U;

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

{

INT16U i;

do{

i=MAIN_Fosc/9600;

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

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

} 123456789101112

//5us 延(yan)時函(han)數,自動適應(ying)主時鐘

#define MAIN_Fosc 11059200UL //定義(yi)主時(shi)鐘HZ

void delay5us()

{

#if MAIN_Fosc == 11059200

_nop_();

#elif MAIN_Fosc == 12000000

_nop_();

#elif MAIN_Fosc == 22118400

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

#elif

} 12345678910111213

單片機(ji)中還可自動生成

//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);

}

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

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

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

回到頂部