新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機 散轉表程序的使用

        單片機 散轉表程序的使用

        作者: 時間:2016-11-23 來源:網絡 收藏
        使用散轉表可以盡可能的減少程序的編寫,方便。

        減少判斷次數。

        本文引用地址:http://www.104case.com/article/201611/320137.htm程序名:散轉程序試驗
        ;說明: 開使后led1亮,按下任何按鍵,寄存器r0從零加起,根據r0內容,程序散轉到
        ;相應處執行,以點亮不同的led
        ;入口: p3.0--p3.3
        ;出口: P0
        ;練習日期:2007--06--17 好心情

        ;修正日期:2007--06--18
        ;修正內容:將原來用ljmp的部分換為ajmp,將R0結束值改為08
        ;**************************************************************************
        org 0000h
        ljmp main
        org 0030h
        main: mov p0, #07fh ;初始化p0口,led1點亮
        mov r0, #00h ;初始化R0,使R0置1
        ;**********************按鍵檢測********************************************
        st: mov P3, #0Fh ;設置P3口,為檢測按鍵做準備,將p3低3位置0
        mov a, p3 ;讀p3口狀態
        cjne a, #0fh, F1 ;判斷是否有按鍵按下,若有則跳到F1 處(比較轉移,比較a與#0fh的大小
        ;若不相等,責轉移,否則順序往下執行,如果第一個數大于第二個數,則CY
        ;清零,否則置1,不影響其它操作位,3字節指令
        acall del
        ajmp st
        ;**********************去抖動***********************************************
        F1: acall del ;延時
        cjne a, #0fh, f2 ;再次判斷按鍵,若按下,則區按鍵處理程序,否則為干擾
        ajmp st
        ;**********************按鍵處理*********************************************mov
        F2: inc r0 ;r0加1
        cjne r0, #08h, F3 ;判斷R0是否=8,若等于,則順序執行并將R0,清0,否則跳轉到散轉程序
        mov r0, #00h ;R0清零
        ajmp main
        ;**********************散轉處理*********************************************
        F3: mov DPTR, #TAB ;將數據表地址傳送到DPTR
        mov a, R0 ;將偏移量送入a
        clr c ;清零進位位
        rlc a ;累加器a內容左移,(相當于*2)
        jnc nadd ;若cy為零,則跳轉到NADD,否則順序執行
        inc dph ;若cy為1時,DPH+1(因為DPTR為16位地址,a為8位,在此處加一,相當于DPTR低8位
        ;向高8位進位)修正地址
        NADD: jmp @a+DPTR ;散裝指令,將a中的無符號數與數據指針DPTR的16位相加,相加之和做為下一條指令的
        ;地址送入PC中,不改變a和dptr,也不影響標志位,采用變址方式實現無條件轉移
        ;其特點時轉移地址可以在程序中加以改變
        ;***********************數據表************************************************
        TAB: nop
        nop ;空指令,修正地址
        ajmp pb1
        ajmp pb2
        ajmp pb3
        ajmp pb4
        ajmp pb5
        ajmp pb6
        ajmp pb7


        ;***********************延時***************************************************
        del: mov R1, #014h
        d1: mov R2, #0FFH
        d2: mov r5, #01fh
        djnz R5, $
        djnz R2, d2
        djnz R1, d1
        ret
        ;***********************顯示**************************************************
        pb1: mov p0, #03fh
        acall del
        ljmp st
        pb2: mov p0, #01fh
        acall del
        ljmp st
        pb3: mov p0, #0fh
        acall del
        ajmp st
        pb4: mov p0, #07h
        acall del
        ajmp st
        pb5: mov p0, #03h
        acall del
        ajmp st
        pb6: mov p0, #01h
        acall del
        ajmp st
        pb7: mov p0, #00h
        acall del
        ajmp st
        end



        關鍵詞: 單片機散轉表程

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 黄陵县| 顺义区| 游戏| 县级市| 崇左市| 卓资县| 孝感市| 萨迦县| 北川| 当涂县| 蒙城县| 电白县| 合江县| 锦屏县| 龙州县| 九江县| 平和县| 监利县| 襄樊市| 彝良县| 金乡县| 库车县| 房山区| 芜湖市| 涟水县| 静安区| 和静县| 饶平县| 陈巴尔虎旗| 正蓝旗| 房产| 神农架林区| 庄河市| 吐鲁番市| 哈巴河县| 韶山市| 柳江县| 蒲江县| 革吉县| 吐鲁番市| 东港市|