新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機指令應用的誤區與技巧

        單片機指令應用的誤區與技巧

        作者: 時間:2013-02-20 來源:網絡 收藏

          嘿嘿,檢查你的LST文件吧,八成是TBL在做怪!

          另外,TBL還是沒有解決大表格的查表問題,(只好象切豆腐一樣,將大表格切成一個個小于255字節的小表格去查了)

          3.關于“MOV R,R”指令

          這是一條很奇特的指令,首先,閣下不要誤認這條指令,以為它是將一個寄存器的數據送到另一個寄存器中去。匠人開始接觸 8bit IC時,就曾經“中招”!后經過高手指點,方得解脫——我佛慈悲,嘔米脫佛!

          看清楚了:"MOV R,R" 中的兩個R是同一個寄存器,而它的動作是將寄存器的內容送到本身。

          如果你認為這是無意義的動作,那就大錯特錯了。

          按匠人的經驗,這條指令至少有兩個用處:

          用處之一:判零

          此指令的用意在于它能影響Zero Flag,辨別寄存器的內容是否為零。

          如果要辨別某一個寄存器的值是否為零,一般我們會用

          MOV A,R

          JBS STTS,Z ; R3,Zero Flag

          這兩個指令,但是這會影響ACC原先的內容。若不要使用ACC,可能寫成

          INC R

          DEC R

          JBS STTS,Z

          這會用到三個指令。若使用MOV R,R的指令,不僅可達成相同功能,也可減少指令數目,可說是一舉兩得。

          MOV R,R

          JBS STTS,Z

          用處之二:將I/O口的外部電平狀態存入鎖存器

          說到這里,要先介紹一下的IO口特性了。

          的IO口一般都是三態,可設置為 高阻(輸入);或輸出狀態

          當IO口設置為輸入狀態時,只能“讀”,不能“寫”,CPU通過IO口直接“讀”外部電平,如果這時發生“寫”動作,則數據并不會輸出,而是被存放到一個鎖存器中,待到IO口變成輸出狀態時,再將鎖存器中的數據送到IO口上。

          ——注意:在這里,源寄存器和目的寄存器雖然地址相同,但實質不是一回事了。(相當于一個門牌住著兩戶人家)

          假如有這么一條指令:MOV R6,R6

          分析:先將R6口的外部電平狀態讀入,再送到R6的鎖存器里。

          比如:R6口作電平翻轉喚醒功能時,必須先將其外部電平保存到鎖存器中

          MOV R6,R6

          然后開啟R6口電平翻轉喚醒功能,當R6口狀態與鎖存器中發生變化時,即可觸發相應中斷。

         ?。≧6的相應口必須設置為輸入狀態)

          再次提醒,“ MOV R,R”指令 不能用作兩個寄存器間送數用,如果要在兩個寄存器間送數,一定要通過中介公司——ACC。

          如果想減輕寫程序的勞累,那就把下面這段宏插入到你的程序中去:

          MOV MACRO REG1,REG2

          MOV A,REG2

          MOV REG1,A

          ENDM

          這樣,當你寫“MOV REG1,REG2”時,系統會自動幫你轉化成兩條指令:

          MOV A,REG2

          MOV REG1,A


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泽普县| 普宁市| 邯郸县| 昌吉市| 瓦房店市| 泉州市| 秦皇岛市| 威海市| 东明县| 石棉县| 科技| 无棣县| 五河县| 崇州市| 丹寨县| 石棉县| 临朐县| 兴国县| 龙口市| 肃宁县| 德令哈市| 临桂县| 漳浦县| 曲沃县| 灵武市| 周宁县| 山丹县| 色达县| 和龙市| 海原县| 西充县| 双鸭山市| 神木县| 平阳县| 丹巴县| 玛曲县| 江城| 富裕县| 松阳县| 珠海市| 石屏县|