|
8位單片機(jī)使用宏指令實(shí)例
我們經(jīng)常會(huì)遇到同時(shí)給2個(gè)8位RAM賦值,通常是這樣子:
MOV A,#20H
MOV MM1,A ;高字節(jié)
MOV A,#12H
MOV MM0,A ;低字節(jié)
;結(jié)果是:RAM1,RAM0==#2012H
編寫一條宏指令,讓其簡(jiǎn)化一些:
;------------------------------------------------
宏指令:
Z2MN MACRO RAM1,RAM0,M_V0,M_V1 ;設(shè)置一次16位
MOV A,M_V1
MOV RAM1,A
MOV A,M_V0
MOV RAM0,A
ENDM
;------------------------------------------------
有了這條宏指令,就可以這樣賦值16位:
M2M RAM1,RAM0,#20H,#12H
;結(jié)果是:RAM1,RAM0==#2012H
這樣子,會(huì)更加好看,而且縮短一頁(yè)中的代碼行數(shù).不容易眼花出錯(cuò),讓人一下子看出是賦值16位.
--- 但是,并沒有節(jié)省空間.
;----------------------------------------------------
改變一下剛才的宏指令,讓其更加簡(jiǎn)化一些:
宏指令:
Z2MH MACRO RAM1,RAM0,M_V16 ;設(shè)置 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
;結(jié)果是:RAM1,RAM0==#2012H
這條宏指令,對(duì)處理雙字節(jié)數(shù)據(jù)用處非常大! 它用一行.一個(gè)#符號(hào),完成了原始4行代碼做的事!
在數(shù)千上萬條指令的代碼里,我們可以少敲打很多個(gè) # 和 H, 符號(hào)!
還可以大大縮短一頁(yè)當(dāng)中的代碼長(zhǎng)度,更加好看,方便前后對(duì)比分析!
編譯器在解釋這些宏指令后,還原其內(nèi)部包含的詳細(xì)指令,可以打開 *.lst 列表文件對(duì)比觀看.
這種方法,在 51,SN,HT,EMC,PIC 等多種單片機(jī)里都一樣可以使用,僅僅是宏體內(nèi)部有些不同.
更有意思的是,宏體不同,表面指令一樣,因此,這些宏指令在不同廠家的單片機(jī)里直接移植使用,無須更改代碼,僅僅
是它們包含的宏指令文件不同而已. ---- 并非僅僅C語(yǔ)言可以移植的啊!
例如:
INCLUDE SN8F_macro.H ;SN8F單片機(jī)使用
INCLUDE STC_macro.H ;STC51單片機(jī)使用
INCLUDE HT_macro.H ;HT單片機(jī)使用
INCLUDE EMC78_macro.H ;EMC78單片機(jī)使用
包含不同單片機(jī)的宏指令文件,原先的頁(yè)面代碼不用動(dòng)就可以直接使用!
8位單片機(jī)的一個(gè)字節(jié),最大值僅僅255,畢竟是不夠大,雙字節(jié)可以到達(dá)65535,總算可以應(yīng)付大多數(shù)場(chǎng)合的需要.因
此,雙字節(jié)一起使用的就會(huì)非常多. 宏指令的好處會(huì)更加凸顯出來!
---- 僅供參考! 2018-10-26 3:18
;===============================================================================
;/* SN8F 單片機(jī)里使用這種宏指令的實(shí)例: */
;-------------------------------------------------------
;1435122325F5 接收號(hào)碼--------4
;0008B00A5F00673A6210529F0021----5
CALL B_Q100H;組織一條短信
ZMN SBM,#7BH ;讀到7BH
ZHLH #100H
Z2MH DZH,DZL,#0500H ;開機(jī)成功的地址----1
CALL B_R24RS;讀出
M2M RR2,RR3,ARDH,ARDL;復(fù)制地址
ZMN SBM,#7DH
Z2MH DZH,DZL,#000H;中心號(hào)碼24C地址----2
CALL B_R24R2 ;讀出不能動(dòng) HL 地址
ATM XZHM
AS02
JMP @F
Z2MH DZH,DZL,#0B0H;號(hào)碼2 臨時(shí)號(hào)碼--------4
JMP Z_HMXZ
;.......................................
@@:
AS04
JMP @F
Z2MH DZH,DZL,#100H;號(hào)碼6 臨時(shí)號(hào)碼--------4
JMP Z_HMXZ
@@:
Z_HMXZ:
CALL B_R24R2
;====================================================
B_TXDXS: ;發(fā)出短信--測(cè)試程序----相當(dāng)于串口發(fā)出
ZHLH #100H
ZYZH #180H
@@:
ATM @HL
ASN #7BH
JMP $+3
INCM L ;不發(fā)送
;等候返回 > 符號(hào)
;====================================================
HZL0.jpg (68.2 KB, 下載次數(shù): 102)
下載附件
宏指令運(yùn)行觀察_0
2018-10-26 04:40 上傳
HZL2.jpg (82.9 KB, 下載次數(shù): 86)
下載附件
宏指令運(yùn)行觀察_1
2018-10-26 04:41 上傳
2018-10-26 4:01
|
評(píng)分
-
查看全部評(píng)分
|