找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3228|回复: 0
收起左侧

8位单片机使用宏指令实例

[复制链接]
ID:27770 发表于 2018-10-26 04:47 | 显示全部楼层 |阅读模式
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

宏指令运行观察_0

宏指令运行观察_1

宏指令运行观察_1

2018-10-26 4:01

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表