|
8位单片机使用宏指令实例
我们经常会遇到同时给2个8位RAM赋值,通常是这样子:
MOV A,#20H
MOV MM1,A ;高字节
MOV A,#12H
MOV MM0,A ;低字节
;结果是: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位.
--- 但是,并没有节省空间.
;----------------------------------------------------
改变一下刚才的宏指令,让其更加简化一些:
宏指令:
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
这条宏指令,对处理双字节数据用处非常大! 它用一行.一个#符号,完成了原始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位单片机的一个字节,最大值仅仅255,毕竟是不够大,双字节可以到达65535,总算可以应付大多数场合的需要.因
此,双字节一起使用的就会非常多. 宏指令的好处会更加凸显出来!
---- 仅供参考! 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: ;发出短信--测试程序----相当于串口发出
ZHLH #100H
ZYZH #180H
@@:
ATM @HL
ASN #7BH
JMP $+3
INCM L ;不发送
;等候返回 > 符号
;====================================================
宏指令运行观察_0
宏指令运行观察_1
2018-10-26 4:01
|
评分
-
查看全部评分
|