<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機常見(jiàn)延時(shí)與中斷問(wèn)題及解決方法

單片機常見(jiàn)延時(shí)與中斷問(wèn)題及解決方法

作者: 時(shí)間:2013-06-06 來(lái)源:網(wǎng)絡(luò ) 收藏

延時(shí)與中斷出錯,是新手在開(kāi)發(fā)應用過(guò)程中,經(jīng)常會(huì )遇到的問(wèn)題,本文匯總整理了包含了MCS-51系列、MSP430單片機、C51單片機、8051F的單片機、avr單片機、STC89C52、PIC單片機…..在內的各種單片機常見(jiàn)的延時(shí)與及解決方法,希望對單片機新手們,有所幫助! 擴展閱讀:單片機延時(shí)程序經(jīng)驗

一、單片機延時(shí)問(wèn)題20問(wèn)

1、單片機延時(shí)程序的延時(shí)時(shí)間怎么算的?

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

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

2、求個(gè)單片機89S51 12M晶振 用定時(shí)器延時(shí)10分鐘,控制1個(gè)燈就可以

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

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

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

for(i=0,i100;i++)

for(j=0,j100;j++)

我覺(jué)得時(shí)間是100*100*1us=10ms,怎么會(huì )是100ms

答:

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

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

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

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

4 、51單片機c語(yǔ)言 _nop_()是一個(gè)空指令?短時(shí)間延時(shí)的?空幾個(gè)機器周期?

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

5、51單片機 延時(shí)500ms 用機器周期疊加怎么算?

答:DELAY:

MOV R7,#4

D2:MOV R6,#250

D1:MOV R5,#250

DJNZ R5,$

DJNZ R6,D1

DJNZ R7,D2

RET

假設晶振為12MHz

剛延時(shí)時(shí)間為:

250*250*4*2=500MS

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

現在找到兩個(gè)函數

第一:

void delay(void)

{ unsigned int i,j;

for(i=0;i500;i++)

{ for(j=0;j121;j++)

{;}

}

}

第二:

void delay(unsigned int k)

{ unsigned int i,j;

for(i=0;i

{ for(j=0;j121;j++)

{;}

}

}

現有幾個(gè)疑問(wèn):

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

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

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

延時(shí)時(shí)間怎么計算啊!假如用的是AT89C51RC+11.0592M的晶振呢?

答:

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

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

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

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

7、51單片機,晶振為6M,求一個(gè)10ms的延時(shí)程序

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

第一種的算法是:

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

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

所以一個(gè)機器周期等于12個(gè)晶振周期,

T2=12*T1=2us

10ms=1000 0us

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

所以

DEL: MOV R5,#05H

F1: MOV R6,#05H

F2: MOV R7,#32H

F3: DJNZ R7,F3

DJNZ R6,F2

DJNZ R5,F1

RET

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

用定時(shí)器的方法我不太會(huì )就不誤人了 (補充一下就是這個(gè)是用匯編寫(xiě)的,你在主程序中用ACALL DEL調用就延時(shí)了。

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

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

下面是我寫(xiě)的程序,請教高手!!!

51單片機相關(guān)文章:51單片機教程


c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


晶振相關(guān)文章:晶振原理

上一頁(yè) 1 2 3 4 5 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>