找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3924|回復: 0
收起左側

8位單片機使用宏指令實例

[復制鏈接]
ID:27770 發(fā)表于 2018-10-26 04:47 | 顯示全部樓層 |閱讀模式
8位單片機使用宏指令實例
我們經常會遇到同時給2個8位RAM賦值,通常是這樣子:
        MOV        A,#20H
        MOV        MM1,A ;高字節(jié)
        MOV        A,#12H
        MOV        MM0,A ;低字節(jié)
;結果是:RAM1,RAM0==#2012H
編寫一條宏指令,讓其簡化一些:
;------------------------------------------------
宏指令:
Z2MN    MACRO   RAM1,RAM0,M_V0,M_V1  ;設置一次16位
        MOV     A,M_V1
        MOV     RAM1,A
        MOV     A,M_V0
        MOV     RAM0,A
        ENDM
;------------------------------------------------
有了這條宏指令,就可以這樣賦值16位:
        M2M        RAM1,RAM0,#20H,#12H
;結果是:RAM1,RAM0==#2012H
這樣子,會更加好看,而且縮短一頁中的代碼行數.不容易眼花出錯,讓人一下子看出是賦值16位.
--- 但是,并沒有節(jié)省空間.
;----------------------------------------------------
改變一下剛才的宏指令,讓其更加簡化一些:
宏指令:
Z2MH    MACRO   RAM1,RAM0,M_V16  ;設置 RAM1,2=16BIT
        MOV     A,M_V16%256
        MOV     RAM1,A
        MOV     A,M_V16/256
        MOV     RAM0,A
        ENDM
;-----------------------------------------------
有了這條宏指令,就可以這樣賦值16位:
        Z2MH   RAM1,RAM0,#2012H
;結果是:RAM1,RAM0==#2012H
這條宏指令,對處理雙字節(jié)數據用處非常大! 它用一行.一個#符號,完成了原始4行代碼做的事!
在數千上萬條指令的代碼里,我們可以少敲打很多個 # 和 H, 符號!
還可以大大縮短一頁當中的代碼長度,更加好看,方便前后對比分析!
編譯器在解釋這些宏指令后,還原其內部包含的詳細指令,可以打開 *.lst 列表文件對比觀看.
這種方法,在 51,SN,HT,EMC,PIC 等多種單片機里都一樣可以使用,僅僅是宏體內部有些不同.
更有意思的是,宏體不同,表面指令一樣,因此,這些宏指令在不同廠家的單片機里直接移植使用,無須更改代碼,僅僅
是它們包含的宏指令文件不同而已. ---- 并非僅僅C語言可以移植的啊!
例如:
        INCLUDE         SN8F_macro.H ;SN8F單片機使用
        INCLUDE         STC_macro.H ;STC51單片機使用
        INCLUDE         HT_macro.H ;HT單片機使用
        INCLUDE         EMC78_macro.H ;EMC78單片機使用
包含不同單片機的宏指令文件,原先的頁面代碼不用動就可以直接使用!
8位單片機的一個字節(jié),最大值僅僅255,畢竟是不夠大,雙字節(jié)可以到達65535,總算可以應付大多數場合的需要.因
此,雙字節(jié)一起使用的就會非常多. 宏指令的好處會更加凸顯出來!
---- 僅供參考!  2018-10-26 3:18
;===============================================================================
;/* SN8F 單片機里使用這種宏指令的實例: */
;-------------------------------------------------------
;1435122325F5 接收號碼--------4
;0008B00A5F00673A6210529F0021----5
        CALL        B_Q100H;組織一條短信
        ZMN        SBM,#7BH ;讀到7BH
        ZHLH        #100H
        Z2MH        DZH,DZL,#0500H ;開機成功的地址----1
        CALL        B_R24RS;讀出
        M2M        RR2,RR3,ARDH,ARDL;復制地址

        ZMN        SBM,#7DH
        Z2MH        DZH,DZL,#000H;中心號碼24C地址----2
        CALL        B_R24R2 ;讀出不能動 HL 地址

        ATM        XZHM
        AS02
        JMP        @F
        Z2MH        DZH,DZL,#0B0H;號碼2 臨時號碼--------4
        JMP        Z_HMXZ
;.......................................
@@:
        AS04
        JMP        @F
        Z2MH        DZH,DZL,#100H;號碼6 臨時號碼--------4
        JMP        Z_HMXZ
@@:
Z_HMXZ:
        CALL        B_R24R2
;====================================================
B_TXDXS: ;發(fā)出短信--測試程序----相當于串口發(fā)出
        ZHLH        #100H
        ZYZH        #180H
@@:
        ATM        @HL
        ASN        #7BH
        JMP        $+3
        INCM        L  ;不發(fā)送
        ;等候返回 > 符號
;====================================================

宏指令運行觀察_0

宏指令運行觀察_0

宏指令運行觀察_1

宏指令運行觀察_1

2018-10-26 4:01

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表