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

          新聞中心

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

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

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

          如果你send_char()里面有while(!TI);TI = 0;這樣的語句或有串口中斷TI的處理的話,那么實際上你的delay()已經(jīng)在發(fā)送函數(shù)里了,while(!TI);這部就是延遲等待嗎?那根本不需要主函數(shù)去延遲了,直接發(fā)就行了。

          14、一個延時子程序的問題,在延時子程序那里,一直搞不明白,給r7和r6賦予0,然后下面的djnz r7,delayloop不就一直循環(huán)了,那還怎么接下去的程序?

          org 0000h

          ljmp start

          org 0030h

          start: mov a,#0feh

          mov r5,#8

          output: mov p1,a

          rl a

          call delay

          djnz r5,output

          ljmp start

          delay: mov r6,#0

          mov r7,#0

          delayloop:djnz r7,delayloop

          djnz r6,delayloop

          ret

          end

          答: 你的延時程序不是因為值為0,而是跳轉(zhuǎn)位置不對,改為如下:

          delay: mov r6,#0

          delayloop:mov r7,#0

          :djnz r7,$

          djnz r6,delayloop

          ret

          R7,R6初值為0,但是當(dāng)DJNZ執(zhí)行時,這條指令是先減1再判斷,所以0-1=255,判斷的話也不為0,仍然循環(huán)256次。

          0-1=255的解釋:

          0000 0000

          - 0000 0001

          -------------------------

          1111

          15、我想提兩個延時與按鍵的問題

          1:如果一個程序中延時和按鍵,如果延時子程序比較長(假如2秒),怎樣確保按鍵能夠得到及時響應(yīng)(假如PC正在執(zhí)行延時子程序,正在這時候有按鍵輸入,不是響應(yīng)不了)——,,,前提是不能用定時器定時掃描,和中斷來做,因為定時器和中斷我另有其他用途

          2:沒有串口。怎樣才能使得他與24C02進行通信(24C02是具有2K內(nèi)存的EEPROM)

          答:

          首先明確一點你說單片機沒有串口,應(yīng)該是指沒有I2C口吧。

          1 在延時程序里面加入按鍵的檢測

          2 用IO口模擬I2C時序讀寫

          16、51單片機延時小程序,求高手解釋什么意思?

          delay200ms:

          mov r2,#82

          l0:mov r1,#116

          l1:mov r0,#9

          djnz r0,$

          djnz r1,l1

          djnz r2,l0

          ret

          答:以下是每條指令的時間,T為一個機器周期

          delay200ms:

          mov r2,#82;1T

          l0:mov r1,#116;1T

          l1:mov r0,#9;1T

          djnz r0,$;2T

          djnz r1,l1;2T

          djnz r2,l0;2T

          ret;2T

          以上共三層循環(huán),忽略部分指令,最簡單算法是:

          2*9*116*82=171216

          不忽略指令是:

          1+(1+(1+2*9+2)*116+2)*82+2=200001

          因此延時時間大約為200ms

          17、于51單片機延遲時間的問題

          uchar i;i--;

          uint i;i--;

          這兩條語句在12M晶振下運行時間分別是多少??

          答:一個時鐘周期,2us,共4us

          18、周期為6MHZ的單片機延時10秒的子程序的怎么編?

          答:/*************************************************

          * 名稱 : Delay()

          * 功能 : 延時,延時時間為 10ms * del。這是通過軟件延時,有一定誤差。

          * 輸入 : del

          * 輸出 : 無

          ***********************************************************/

          void Delay(uint del)

          {

          uint i,j;

          for(i=0; i

          for(j=0; j1827; j++) //這個是通過軟件仿真得出的數(shù)

          ;

          }

          這個是晶振為12mhz的單片機延時10ms的程序,你只要在這個基礎(chǔ)上減小一倍就行了,當(dāng)然至于具體值還是要調(diào)試下的。

          19、片機的有些程序需要調(diào)用延時程序,如何能合理的安排循環(huán)次數(shù)以及空操作的個數(shù)?

          答:用匯編的話就根據(jù)你的當(dāng)前晶振頻率去推算你的指令周期,然后結(jié)合你需要延遲的時間,編寫延遲程序,用C的話還是要看最后生成的匯編碼是什么樣的了。最簡單的方法就是寫好程序以后再編譯器里軟仿真看時間。贊同2| 評論(1)

          20、單片機延時程序問題

          延時程序 void delay(uint dt)

          {

          uchar bt;

          for(;dt;dt--);

          for(bt=0;bt255;bt++);

          }

          編譯時有警告C:DOCUMENTS AND SETTINGSADMINISTRATOR桌面字 310 點陣LED顯示.C(46): warning C235: parameter 1: different types

          為什么?求大俠指點

          答:某個函數(shù)傳參類型與聲明類型不符。

          另外你這個for(;dt;dt--);沒有起到外層循環(huán)的作用……

          二、單片機30例

          1、單片機外中斷INT0為下降沿觸發(fā),當(dāng)中斷被觸發(fā)后cpu執(zhí)行中斷程序,若本次中斷的程序還未執(zhí)行完INT0又來了一個相同的下降沿中斷信號怎么辦?cpu會怎么處理?若是定時器中斷呢?串口中斷呢?求解釋

          答:再來一個INT0信號不會執(zhí)行。相同的優(yōu)先級不會打斷正在執(zhí)行的中斷。

          一. 如果是高優(yōu)先級的中斷來了,會打斷低優(yōu)先級的正在執(zhí)行的中斷而執(zhí)行高優(yōu)先級的中斷。

          51單片機的默認(rèn)(此時的IP寄存器不做設(shè)置)中斷優(yōu)先級為:

          外部中斷0 > 定時/計數(shù)器0 > 外部中斷1 > 定時/計數(shù)器1 > 串行中斷;

          當(dāng)同時有幾種中斷到達(dá)時,高優(yōu)先級中斷會先得到服務(wù)。

          例如:當(dāng)計數(shù)器0中斷和外部中斷1(優(yōu)先級 計數(shù)器0中斷>外部中斷1)同時到達(dá)時,會進入計時器0的中斷服務(wù)函數(shù);但是在外部中斷1的中斷服務(wù)函數(shù)正在服務(wù)的情況下,這時候任何中斷都是打斷不了它的,包括邏輯優(yōu)先級比它高的外部中斷0計數(shù)器0中斷。

          51單片機的中斷優(yōu)先級控制寄存器IP可以把默認(rèn)的中斷優(yōu)先級設(shè)置為高或低級,

          例如默認(rèn)是外部中斷0 > 定時/計數(shù)器0 > 外部中斷1 > 定時/計數(shù)器1 > 串行中斷;

          現(xiàn)在設(shè)為定時1 和串行中斷為高優(yōu)先級 其它為低 ,那么中斷0執(zhí)行時會被定時器1 或串行中斷打斷,如果設(shè)定的兩個高優(yōu)先級定時/計數(shù)器1 和串行中斷同時響應(yīng),會再自然排隊,先執(zhí)行定時1中斷再執(zhí)行串行中斷。

          2、單片機,中斷3為什么不執(zhí)行,整個程序有什么不對的地方呢?

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


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


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


          關(guān)鍵詞: 單片機 常見延時 中斷問題

          評論


          相關(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); })();