<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)常見延時與中斷問題及解決方法

          單片機(jī)常見延時與中斷問題及解決方法

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

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

          一、單片機(jī)延時問題20問

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

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

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

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

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

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

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

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

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

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

          答:

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

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

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

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

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

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

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

          答:DELAY:

          MOV R7,#4

          D2:MOV R6,#250

          D1:MOV R5,#250

          DJNZ R5,$

          DJNZ R6,D1

          DJNZ R7,D2

          RET

          假設(shè)晶振為12MHz

          剛延時時間為:

          250*250*4*2=500MS

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

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

          第一:

          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++)

          {;}

          }

          }

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

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

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

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

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

          答:

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

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

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

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

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

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

          第一種的算法是:

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

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

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

          T2=12*T1=2us

          10ms=1000 0us

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

          所以

          DEL: MOV R5,#05H

          F1: MOV R6,#05H

          F2: MOV R7,#32H

          F3: DJNZ R7,F3

          DJNZ R6,F2

          DJNZ R5,F1

          RET

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

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

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

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

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

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


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


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

          上一頁 1 2 3 4 5 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();