新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 定時器0延時程序

        定時器0延時程序

        作者: 時間:2016-11-11 來源:網絡 收藏
        本程序主要實現的是用DA指令進行10進制調整,使得兩位數碼管循環顯示0-99,延時1s。

        (1):工作方式0下延時1s

        本文引用地址:http://www.104case.com/article/201611/316932.htm

        查詢方式:

        ORG 0000H
        JMP MAIN
        ORG 30H
        MAIN:
        MOV TMOD,#00H ;設置TIMER0工作在MODE0
        MOV R4,#00H ;設置數碼管顯示初值
        ;SETB EA
        ;SETB ET0

        START:
        MOV R2,#200;延時1s
        MOV P2,R4 ;計數初值送P2顯示
        LCALL DELAY
        XCH A,R4
        ADD A,#01H
        DA A ;R4送A累加,并做十進制調整
        XCH A,R4 ;調整后回送R4

        ;CJNE R4,#60H,START ;若要顯示60進制,需加判斷語句
        ;MOV R4,#00H
        JMP START



        DELAY:
        SETB TR0
        REINIT:
        MOV TL0,#(8192-5000)%256
        MOV TH0,#(8192-5000)/256 ;定時5ms
        LOOP:JBC TF0,LOOP1 ;TF0是否為1,是則跳到LOOP1,并清除TF0
        SJMP LOOP ;不是則跳到LOOP繼續查詢TF0溢出標志位狀態
        LOOP1:
        DJNZ R2,REINIT ;R2不為0繼續裝入初值,繼續定時
        CLR TR0
        RET
        END

        中斷方式:

        ORG 0000H
        JMP MAIN
        ORG 000BH;定時器0中斷的入口地址
        JMP INT_0
        ORG 30H
        MAIN:
        MOV TMOD,#00H
        MOV R4,#00H
        SETB EA
        SETB ET0
        MOV TL0,#(8192-5000)%256
        MOV TH0,#(8192-5000)/256
        SETB TR0
        START:
        MOV P2,R4
        MOV R2,#200
        CJNE R2,#0,$
        MOV R2,#200
        XCH A,R4
        ADD A,#01H
        DA A
        XCH A,R4
        JMP START

        INT_0:
        CLR TF0
        MOV TL0,#(8192-5000)%256
        MOV TH0,#(8192-5000)/256
        DEC R2
        RETI
        END

        如果采用方式1的話,只需要重設TMOD為#01H,TH0=0D8H,TL0=0F0H即可。

        (2):定時器0工作方式2延時1s

        由于工作方式2下一次定時的最大時間為256us,所以設定一次循環的話,寄存器中循環初值設置最大也達不到延時1s的目的,因此采用了用兩個寄存器來循環定時。

        查詢方式:

        ORG 0000H
        JMP MAIN
        ORG 30H
        MAIN:
        MOV TMOD,#02H ;工作方式2
        MOV R4,#00H

        START:
        MOV R2,#200 ;延遲50ms
        MOV R3,#20 ;延遲1s
        COUNT:

        MOV P2,R4
        LCALL DELAY
        DJNZ R3,COUNT;循環定時
        XCH A,R4
        ADD A,#01H
        DA A
        XCH A,R4
        JMP START

        DELAY:
        SETB TR0

        REINIT:
        MOV TL0,#6
        MOV TH0,#6 ;定時250us

        LOOP:JBC TF0,LOOP1
        SJMP LOOP

        LOOP1:
        DJNZ R2,REINIT
        CLR TR0
        RET
        END

        中斷方式:

        ORG 0000H
        JMP MAIN
        ORG 000BH
        JMP INT_0
        ORG 30H
        MAIN:
        MOV TMOD,#02H
        MOV R4,#00H
        SETB EA
        SETB ET0
        MOV TL0,#6
        MOV TH0,#6
        SETB TR0
        START:
        MOV R3,#20
        MOV R2,#200
        LOOP:
        MOV P2,R4
        CJNE R2,#0,$
        MOV R2,#200
        DJNZ R3,LOOP ;循環定時
        XCH A,R4
        ADD A,#01H
        DA A
        XCH A,R4
        JMP START

        INT_0:
        CLR TF0
        MOV TL0,#6
        MOV TH0,#6
        DEC R2
        RETI
        END

        附圖:



        關鍵詞: 定時器0延時程

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 丰都县| 维西| 临西县| 大邑县| 淄博市| 襄垣县| 高州市| 马边| 浦城县| 佛坪县| 成安县| 秦皇岛市| 凤凰县| 阿拉尔市| 伽师县| 西和县| 佛学| 盐津县| 喜德县| 开封县| 虎林市| 和林格尔县| 杭锦后旗| 馆陶县| 芒康县| 南陵县| 石河子市| 广宁县| 望都县| 老河口市| 延边| 光山县| 温宿县| 高邮市| 松潘县| 左贡县| 张家川| 巨鹿县| 汪清县| 额尔古纳市| 铜鼓县|