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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī) 散轉(zhuǎn)表程序的使用

          單片機(jī) 散轉(zhuǎn)表程序的使用

          作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
          使用散轉(zhuǎn)表可以盡可能的減少程序的編寫(xiě),方便。

          減少判斷次數(shù)。

          本文引用地址:http://www.ex-cimer.com/article/201611/320137.htm程序名:散轉(zhuǎn)程序試驗(yàn)
          ;說(shuō)明: 開(kāi)使后led1亮,按下任何按鍵,寄存器r0從零加起,根據(jù)r0內(nèi)容,程序散轉(zhuǎn)到
          ;相應(yīng)處執(zhí)行,以點(diǎn)亮不同的led
          ;入口: p3.0--p3.3
          ;出口: P0
          ;練習(xí)日期:2007--06--17 好心情

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


          ;***********************延時(shí)***************************************************
          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



          評(píng)論


          技術(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); })();