|
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
宏指令運行觀察_1
2018-10-26 4:01
|
評分
-
查看全部評分
|