單片機一些常用的延時與中斷問題及解決方法_第1頁
單片機一些常用的延時與中斷問題及解決方法_第2頁
單片機一些常用的延時與中斷問題及解決方法_第3頁
單片機一些常用的延時與中斷問題及解決方法_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

單片機一些常用的延時與中斷問題及解決方法單片機一些常用的延時與中斷問題及解決方法單片機一些常用的延時與中斷問題及解決方法V:1.0精細(xì)整理,僅供參考單片機一些常用的延時與中斷問題及解決方法日期:20xx年X月單片機一些常用的延時與中斷問題及解決方法延時與中斷出錯,是單片機新手在單片機開發(fā)應(yīng)用過程中,經(jīng)常會遇到的問題,本文匯總整理了包含了MCS-51系列單片機、MSP430單片機、C51單片機、8051F的單片機、avr單片機、STC89C52、PIC單片機…..在內(nèi)的各種單片機常見的延時與中斷問題及解決方法,希望對單片機新手們,有所幫助!

一、單片機延時問題20問

1、單片機延時程序的延時時間怎么算的

答:如果用循環(huán)語句實現(xiàn)的循環(huán),沒法計算,但是可以通過軟件仿真看到具體時間,但是一般精精確延時是沒法用循環(huán)語句實現(xiàn)的。

如果想精確延時,一般需要用到定時器,延時時間與晶振有關(guān)系,單片機系統(tǒng)一般常選用2MHz、12MHz或6MHz晶振。第一種更容易產(chǎn)生各種標(biāo)準(zhǔn)的波特率,后兩種的一個機器周期分別為1μs和2μs,便于精確延時。本程序中假設(shè)使用頻率為12MHz的晶振。最長的延時時間可達(dá)216=65536μs。若定時器工作在方式2,則可實現(xiàn)極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值占用2個機器周期)。

2、求個單片機89S5112M晶振用定時器延時10分鐘,控制1個燈就可以

答:可以設(shè)50ms中斷一次,定時初值,TH0=0x3c、TL0=0xb0。中斷20次為1S,10分鐘的話,需中斷12000次。計12000次后,給一IO口一個低電平(如功率不夠,可再加擴展),就可控制燈了。

而且還要看你用什么語言計算了,匯編延時準(zhǔn)確,知道單片機工作周期和循環(huán)次數(shù)即可算出,但不具有可移植性,在不同種類單片機中,匯編不通用。用c的話,由于各種軟件執(zhí)行效率不一樣,不會太準(zhǔn),通常用定時器做延時或做一個不準(zhǔn)確的延時,延時短的話,在c中使用匯編的nop做延時

3、51單片機C語言for循環(huán)延時程序時間計算,設(shè)晶振12MHz,即一個機器周期是1us。

for(i=0,i<100;i++)

for(j=0,j<100;j++)

我覺得時間是100*100*1us=10ms,怎么會是100ms

答:

不可能的,是不是你的編譯有錯的啊

我改的晶振12M,在KEIL里面編譯的,為你得出的結(jié)果最大也就是40ms,這是軟件的原因,

不可能出現(xiàn)100ms那么大的差距,是你的軟件的原因。

不信你實際編寫一個秒鐘,利用原理計算編寫一個燒進(jìn)單片機和利用軟件測試的秒程序燒進(jìn)單片機,你會發(fā)現(xiàn)原理計算的程序是正確的

4、51單片機c語言_nop_()是一個空指令短時間延時的空幾個機器周期

答:這個_nop_()等效與匯編里面的,NOP指令,也就是空一個機器周期,如果是傳統(tǒng)51單片機的話,等于空12個時鐘周期【即一個機器周期】

5、51單片機延時500ms用機器周期疊加怎么算

答:DELAY:

MOVR7,#4

D2:MOVR6,#250

D1:MOVR5,#250

DJNZR5,$

DJNZR6,D1

DJNZR7,D2

RET

假設(shè)晶振為12MHz

剛延時時間為:

250*250*4*2=500MS

6、51單片機C語言程序中延時函數(shù)delay的原理是什么

現(xiàn)在找到兩個函數(shù)

第一:

voiddelay(void)

{

unsignedinti,j;

for(i=0;i<500;i++)

{for(j=0;j<121;j++)

{;}

}

}

第二:

voiddelay(unsignedintk)

{

unsignedinti,j;

for(i=0;i<k;i++)

{

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

{;}

}

}

現(xiàn)有幾個疑問:

(1):延時函數(shù)的原理

(2):兩個for循環(huán)的作用

(3):i、j的取值有什么規(guī)律和依據(jù)是不是和單片機接的晶振頻率有關(guān)所能延時的最小單位時間是怎么計算的

延時時間怎么計算??!假如用的是AT89C51RC+的晶振呢?

答:

1:原理:僅僅執(zhí)行一些,沒有實質(zhì)性影響的所謂“無意義指令”,比如做比大小啊,做某個int的自加運算啊之類的

2:兩重for的作用:簡單的說,就像高中數(shù)學(xué)中的“乘法原理”一樣,這樣可以很輕易的迅速增加上述“無意義指令”的數(shù)目

3:關(guān)于取值大?。哼@個如果是在C下變成,這個值不僅僅與晶振、單片機本身運算速度有關(guān),而且還與C的編譯器有關(guān),所以說,這個值雖說是可以精確計算的,但大多數(shù)情況下,程序員用的都是“經(jīng)驗值”——當(dāng)然,如果用匯編編程,情況就不一樣了,因為每一條指令所使用的機器周期是一定的,你當(dāng)然可以根據(jù)所有指令使用的總時間,精確的算出具體延時的總時間

綜合你的的問題,我給你一點建議,就是剛學(xué)單片機的時候,還是一定要老老實實的從匯編編程學(xué)起——這樣,在你以后接觸到C之后,你才能明白,這中間實際上經(jīng)歷了一個什么樣的過程,只有這樣你才能真正理解單片機。當(dāng)然,等最終你完全拿下一種單片機之后,盡量使用C編程,無疑是歷史所肯定的。

7、51單片機,晶振為6M,求一個10ms的延時程序

答:延時有很多種方法,有一種是讓單片機去做無聊的循環(huán),還有一種是用定時器。

第一種的算法是:

晶振的周期T1=1/f;這里f=6MHz所以T1=1/6us;(微秒)

單片機花12個T1去執(zhí)行一個指令,

所以一個機器周期等于12個晶振周期,

T2=12*T1=2us

10ms=10000us

所以你要得到10ms的延時就要想辦法讓機器去做5000條“無聊的指令”

所以

DEL:MOVR5,#05H

F1:

MOVR6,#05H

F2:

MOVR7,#32H

F3:DJNZR7,F3

DJNZR6,F2

DJNZR5,F1

RET

這種方法是用于對時間要求不高的地方,我說的是其思想,程序中可能有錯的地方

用定時器的方法我不太會就不誤人了(補充一下就是這個是用匯編寫的,你在主程序中用ACALLDEL調(diào)用就延時了。

8、今天我用單片機做“眨眼的LED”實驗時,程序運行,每次只令燈亮或滅都沒問題,但是一開延時不能出現(xiàn)期盼的燈亮燈滅的現(xiàn)象,這是怎么回事

實驗的硬件條件是:STC89C52,編譯環(huán)境:keil3。

下面是我寫的程序,請教高手?。?!

#include<>

如果你需要增大,可以改變j的數(shù)據(jù)類型定義,如unsignedint(2字節(jié))可以到65535;無符號長整形unsignedlong(4字節(jié))可以到95。而上面所所256是-1,而你定義的是無符號字符型。

10、請教一個AVR單片機延時的問題

外部晶振用的是8MHz,延時1微秒的程序如下:

voiddelay_us(unsignedintdelay_counter)//延時1us

{

do

{

delay_counter--;

}

while(delay_counter>1);

}

請問,為什么能延時1微秒???

答:8MHZ表示單片機的運行周期為1/8us,也就是執(zhí)行一步

你使用的是軟件延時

那么包括程序的提取,執(zhí)行等都要花費時間

比如,你提取這個函數(shù)可能花去一步,那現(xiàn)在就使用了啦

接著你執(zhí)行這個函數(shù),在單片機內(nèi)部,運算是通過寄存器的移來移去實現(xiàn)的

這都需要時間,可能你看到的就一句counter--這個指令,可能會花費好幾個時鐘周期來實現(xiàn)

舉個例子:

c=a+b,只有一句,但實際上花費的時間并不短

mova,#data1;//數(shù)據(jù)data1放入a寄存器

movb,#data2;//數(shù)據(jù)dat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論