新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機延時問題20問

        單片機延時問題20問

        作者: 時間:2013-01-30 來源:網絡 收藏

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

        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,而是跳轉位置不對,改為如下:

        delay: mov r6,#0

        delayloop:mov r7,#0

        :djnz r7,$

        djnz r6,delayloop

        ret

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

        0-1=255的解釋:

        0000 0000

        - 0000 0001

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

        1111

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

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

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

        答:

        首先明確一點你說單片機沒有串口,應該是指沒有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

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

        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++) //這個是通過軟件仿真得出的數

        ;

        }

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

        19、片機的有些程序需要調用延時程序,如何能合理的安排循環次數以及空操作的個數?

        答:用匯編的話就根據你的當前晶振頻率去推算你的指令周期,然后結合你需要延遲的時間,編寫延遲程序,用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

        為什么?求大俠指點

        答:某個函數與聲明。

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

        51單片機相關文章:51單片機教程


        c語言相關文章:c語言教程


        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理


        晶振相關文章:晶振原理

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 芦山县| 吉隆县| 措勤县| 石家庄市| 虎林市| 荔波县| 岳西县| 会泽县| 镇坪县| 固原市| 通道| 梧州市| 佛冈县| 德安县| 临泽县| 华宁县| 阳朔县| 宁安市| 莫力| 天门市| 慈溪市| 商南县| 横峰县| 手游| 涪陵区| 灌南县| 普兰县| 太和县| 华宁县| 兴化市| 嘉禾县| 喀什市| 深州市| 鱼台县| 丹寨县| 新营市| 侯马市| 河津市| 伊金霍洛旗| 蕲春县| 宁乡县|