《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴新100贴

载入中...

广告3号位
百宝日历
载入中...

百宝专栏

说明:请先返回首页,再点击下列专栏即可进入。
  • 首页 相册 标签
  • 匠人公告(87)
  • 匠人笔记(144)
  • 匠人文集(167)
  • 写书近况(189)
  • 团队撰写(96)
  • 与非门专栏(566)
  • 比尔熊专栏(12)
  • 网络酷文(492)
  • 程序宝典(477)
  • 程序算法(28)
  • 编程技巧(482)
  • 资料宝藏(280)
  • 硬件技术(178)
  • 汽车电子(52)
  • 藏经宝阁(47)
  • 项目管理(15)
  • 趣味设计(6)
  • 社区热贴(5)
  • 开发工具(19)
  • 电脑应用(66)
  • 供需信息(24)
  • 最新货色

    载入中...

    粉丝评论

    载入中...

    载入中...



    百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)


    匠人手记

    购书攻略勘误表

    开发板专卖——淘宝店

     编程技巧: 优质代码的十诫

    中颖指令宏定义
    程序匠人 发表于 2006-12-8 8:31:00  阅读全文 | 回复(0) | 引用通告 | 编辑

    中颖的宏指令
    未雨绸缪 发表于 10/19/2006 10:28:58 AM 中颖MCU ←返回版面   

    ;;=============================================================================
    ;===================中颖指令宏定义=====================================
    ;*******************TEMP为中间变量寄存器*******************
    ;中颖MCU减法的说明
    ;所有的减法指令执行后的差均为补码
    ;当CY=1时,说明无借位,结果为正数,不需调整为原码(正数原码=补码)
    ;当CY=0时,说明有借位,结果为负数,差需调整为原码才能使用

    ;预编译识别RAM分页,简化指令行书写,共计16条指令
    ;=====================================
    MADC        MACRO BX
            ADC    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MADCM    MACRO BX
            ADCM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MADD        MACRO BX
            ADD    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MADDM    MACRO BX
            ADDM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MSBC        MACRO BX
            SBC    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MSBCM    MACRO BX
            SBCM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MSUB        MACRO BX
            SUB    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MSUBM    MACRO BX
            SUBM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MEOR        MACRO BX
            EOR    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MEORM    MACRO BX
            EORM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MOR        MACRO BX
            OR    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MORM        MACRO BX
            ORM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MAND        MACRO BX
            AND    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MANDM    MACRO BX
            ANDM    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MLDA        MACRO BX
            LDA    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MSTA        MACRO BX
            STA    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MLDI        MACRO BX,IX
            LDI    TEMP,IX
            STA    BX,(BX>>7)&07H
            ENDM
    ;=====================================
    MLD        MACRO BX,BY
            LDA    BY,(BY>>7)&07H
            STA    BX,(BX>>7)&07H
            ENDM
    ;=====================================

    ;===================通用宏定义=====================================
    ;**************************************************************
    ;通用宏定义(中颖)
    ;**************************************************************

    ;清零操作
    ;=====================================
    CLR    MACRO    B0X
        LDI    TEMP,00H
        STA    B0X
        ENDM
    ;=====================================
    ;清进位位
    CLRCY    MACRO
        LDI    TEMP,00H
        ADD    TEMP
        ENDM
    ;=====================================

    ;加1减1操作
    ;=====================================
    INC4    MACRO    B0X
        ADIM    B0X,01H
        ENDM
    ;=====================================
    DEC4    MACRO    B0X
        SBIM    B0X,01H
        ENDM
    ;=====================================
    INC8    MACRO    B0XH,B0XL
        ADIM    B0XL,01H
        LDI    TEMP,00H
        ADCM    B0XH
        ENDM
    ;=====================================
    DEC8    MACRO    B0XH,B0XL
        SBIM    B0XL,01H
        LDI    TEMP,00H
        SBCM    B0XH
        ENDM
    ;=====================================

    ;8位立即数加减法
    ;=====================================
    ADDI8    MACRO    B0XH,B0XL,IYH,IYL;(XH,XL IS BANK0)
        ADIM    B0XL,IYL
        LDI    TEMP,IYH
        ADCM    B0XH
        ENDM
    ;=====================================
    SUBI8    MACRO    B0XH,B0XL,IYH,IYL;(XH,XL IS BANK0)
        SBIM    B0XL,IYL
        LDI    TEMP,IYH
        SBCM    B0XH
        ENDM
    ;=====================================

    ;8位加减法
    ;=====================================
    ;调用:    ADD8 被加数高位,被加数低位,加数高位,加数低位,
    ;和存入被加数
    ADD8    MACRO    B0XH,B0XL,B0YH,B0YL;(XH,XL,YH,YL IS BANK0)
        LDA    B0YL
        ADDM    B0XL
        LDA    B0YH
        ADCM    B0XH
        ENDM
    ;=====================================
    ;调用:    ADD8 被减数高位,被减数低位,减数高位,减数低位,
    ;差存入被减数
    SUB8    MACRO    B0XH,B0XL,B0YH,B0YL;(XH,XL,YH,YL IS BANK0)
        LDA    B0YL
        SUBM    B0XL
        LDA    B0YH
        SBCM    B0XH
        ENDM
    ;=====================================
    SUB8M MACRO    B0XH,B0XL,IYH,IYL
        SBIM B0XL,IYL
        LDI    TEMP,IYH
        SBCM    B0XH
        ENDM
    ;=====================================


    ;位操作
    ;=====================================
    SETBA    MACRO    B0X,IBIT
        ORIM    B0X,IBIT
        ENDM
    ;=====================================
    CLRBA    MACRO    B0X,IBIT
        ANDIM    B0X,IBIT^0FH
        ENDM
    ;=====================================
    CPLB    MACRO    B0X,IBIT
        EORIM    B0X,IBIT
        ENDM
    ;=====================================


    ;条件转移宏定义
    ;位条件转移
    ;=====================================
    JPCB    MACRO    B0X,IBIT,ADDR
        LDI    TEMP,IBIT
        AND    B0X,00H
        BAZ    ADDR
        ENDM
    ;=====================================
    JPSB    MACRO    B0X,IBIT,ADDR
        LDI    TEMP,IBIT
        AND    B0X,00H
        BNZ    ADDR
        ENDM
    ;=====================================
    ;op0 > op1 tHen jump address
    ;=====================================
    CJA4    MACRO    B0X,IY,ADDR
        SBI    B0X,IY
        BAZ    $+2
        BC    ADDR
        ENDM
    ;=====================================
    ;op0 < op1 tHen jump address
    ;=====================================
    CJB4    MACRO    B0X,IY,ADDR
        SBI    B0X,IY
        BNC    ADDR
        ENDM
    ;=====================================
    ;op0 <=op1 tHen jump address
    ;=====================================
    CJBE4    MACRO    B0X,IY,ADDR
        SBI    B0X,IY
        BAZ    ADDR
        BNC    ADDR
        ENDM
    ;====================================
    ;op0 >= op1 tHen jump address
    ;====================================
    CJAE4    MACRO    B0X,IY,ADDR
        SBI     B0X,IY
        BC    ADDR
        ENDM
    ;=====================================
    ;op0 == op1 tHen jump address
    ;=====================================
    CJE4    MACRO    B0X,IY,ADDR    ;Y=BAN
        SBI    B0X,IY
        BAZ    ADDR
        ENDM
    ;=====================================
    ;op0 != op1 tHen jump address
    ;=====================================
    CJNE4    MACRO    B0X,IY,ADDR
        SBI    B0X,IY
        BNZ    ADDR
        ENDM
    ;=====================================
    ;op0 = op1 tHen jump address
    ;=====================================
    CJE8    MACRO    B0XH,B0XL,IYH,IYL,ADDR  ;( XH,XL IS BANK0 )
        SBI    B0XH,IYH
        BNZ    $+3
        SBI    B0XL,IYL
        BAZ    ADDR
        ENDM
    ;=====================================
    ;op0 != op1 tHen jump address
    ;=====================================
    CJNE8     MACRO     B0XH,B0XL,IYH,IYL,ADDR  ;( XH,XL IS BANK0 )
        SBI    B0XH,IYH
        BNZ    ADDR
        SBI    B0XL,IYL
        BNZ    ADDR
        ENDM
    ;=====================================
    ;op0 < op1 tHen jump address
    ;=====================================
    CJB8    MACRO    B0XH,B0XL,IYH,IYL,ADDR  ;( XH,XL IS BANK0 )
        SBI    B0XH,IYH
        BNC    ADDR
        BNZ    $+3
        SBI    B0XL,IYL
        BNC    ADDR
        ENDM
    ;=====================================
    ;op0 >= op1 tHen jump address
    ;====================================
    CJAE8    MACRO    B0XH,B0XL,IYH,IYL,ADDR
        SBI     B0XH,IYH
        BAZ    $+3
        BC    ADDR
        JMP    $+3
        SBI    B0XL,IYL
        BC    ADDR
        ENDM
    ;=====================================
    ;op0 = op1 tHen jump address
    ;=====================================
    DJE8    MACRO    B0XH,B0XL,A0XH,A0XL,ADDR  ;( XH,XL IS BANK0 )
        LDA    A0XH
        SUB    B0XH
        BNZ    $+3
        LDA    A0XL
        SUB    B0XL
        BAZ    ADDR
        ENDM
    ;=====================================
    ;op0 != op1 tHen jump address
    ;=====================================
    DJNE8     MACRO     B0XH,B0XL,A0XH,A0XL,ADDR  ;( XH,XL IS BANK0 )
        LDA    A0XH
        SUB    B0XH
        BNZ    ADDR
        LDA    A0XL
        SUB    B0XL
        BNZ    ADDR
        ENDM
    ;=====================================
    ;op0 < op1 tHen jump address
    ;=====================================
    DJB8    MACRO    B0XH,B0XL,A0XH,A0XL,ADDR  ;( XH,XL IS BANK0 )
        LDA    A0XH
        SUB    B0XH
        BNC    ADDR
        BNZ    $+3
        LDA    A0XL
        SUB    B0XL
        BNC    ADDR
        ENDM
    ;====================================
    ;op0 >= op1 tHen jump address
    ;====================================
    DJAE8    MACRO    B0XH,B0XL,A0XH,A0XL,ADDR  ;
        LDA    A0XH
        SUB    B0XH
        BAZ    $+3
        BC    ADDR
        JMP    $+4
        LDA    A0XL
        SUB    B0XL
        BC    ADDR
        ENDM
    ;=====================================
    ;op0 < op1 tHen jump address
    ;=====================================
    DJB16    MACRO    B0XH,B0XM,B0XML,B0XL,A0XH,A0XM,A0XML,A0XL,ADDR  ;
        LDA    A0XH
        SUB    B0XH
        BNC    ADDR
        BNZ    $+11
        LDA    A0XM
        SUB    B0XM
        BNC    ADDR
        BNZ    $+7
        LDA    A0XML
        SUB    B0XML
        BNC    ADDR
        BNZ    $+3
        LDA    A0XL
        SUB    B0XL
        BNC    ADDR
        ENDM
    ;====================================

    ;移位操作
    ;=====================================
    ;变量右移1位
    MSHR    MACRO    BX,BK
        LDA    BX,BK
        SHR
        STA    BX,BK
        ENDM
    ;=====================================
    ;变量左移1位
    MSHL    MACRO    BX,BK
        LDA    BX,BK
        ADDM    BX,BK
        ENDM
    ;=====================================
    ;变量带进位位左移1位
    ;SHIFT  LEFT  WITH  CARRY
    MSHLC    MACRO    BX,BK
        LDA    BX,BK
        ADCM    BX,BK
        ENDM
    ;=====================================
    ;变量带进位位右移1位
    ;SHIFT  RIGHT  WITH  CARRY
    MSHRC MACRO BX,BK
        LDA    BX,BK
        BC    $+3
        SHR
        JMP    $+4
        SHR
        STA    TEMP,00H
        ORIM    TEMP,1000B
        STA    BX,BK
        ENDM
    ;=====================================
    ;MSHRC MACRO BX,BK
    ;    LDA    BX,BK
    ;    CALL    MSHR_CY
    ;    STA    BX,BK
    ;    ENDM
    ;MSHR_CY:
    ;    BC    $+3
    ;    SHR
    ;    RTNI
    ;    SHR
    ;    STA    TEMP,00H
    ;    ORIM    TEMP,1000B
    ;    RTNI
    ;=====================================
    ;8位带进位位右移
    MSHRC8    MACRO    BXH,BXL,BKH,BKL
            ;HIGH NIBBLE
            LDA    BXH,BKH
            BC    $+3
            SHR
            JMP    $+4
            SHR
            STA    TEMP,00H
            ORIM    TEMP,1000B
            STA    BXH,BKH
            ;LOW NIBBLE
            LDA    BXL,BKL
            BC    $+3
            SHR
            JMP    $+4
            SHR
            STA    TEMP,00H
            ORIM    TEMP,1000B
            STA    BXL,BKL
            ENDM
    ;=====================================
    ;8位左移
    MSHL8        MACRO    BXH,BXL,BKH,BKL
            LDA    BXL,BKL
            ADDM    BXL,BKL
            BC    $+4
            LDA    BXH,BKH
            ADDM    BXH,BKH
            JMP    $+3
            LDA    BXH,BKH
            ADCM    BXH,BKH
            ENDM
    ;=====================================
    ;功能:    Bank0-->直接跳转,Bank123-->跨页跳转,修改RomBank寄存器
    ;条件:    仅用于Bank0 <--> Bank123间跨页跳转,可直接用rtni返回
    LONGJUMP    MACRO    FUNCLABEL
            LDI    TEMP,(FUNCLABEL>>11)&0FH
            BAZ    $+2
            LDI    ROMBANK,((FUNCLABEL>>11)-1)&0FH
            JMP    FUNCLABEL
            ENDM
    DISABLEINT    EQU    0000B
    ENABLEINT    EQU    1111B
    ;=====================================
    ;功能:    Bank0<-->Bank123间相互子程序长调用,地址范围 8K
    ;条件:    1.主程序与子程序在同一Bank
    ;    2.主程序与子程序分在Bank0<-->Bank123两个页面中
    ;如果扩展此指令功能,使之支持8K内任意调用,则返回指令亦需改造,call前备份
    ;Rombank,rtni前恢复之.
    LONGCALL    MACRO    FUNCLABEL
            CALL    $+2
            JMP    $+5
            LDI    TEMP,(FUNCLABEL>>11)&0FH
            BAZ    $+2
            LDI    ROMBANK,((FUNCLABEL>>11)-1)&0FH
            JMP    FUNCLABEL
            ENDM
    ;=====================================
    ;功能:    Bank0<-->Bank1间相互子程序长调用,地址范围 4K
    ;条件:    1.主程序与子程序在同一Bank
    ;    2.主程序与子程序分在Bank0<-->Bank1两个页面中
    ;如果扩展此指令功能,使之支持4K内任意调用,则返回指令亦需改造,call前备份
    ;Rombank,rtni前恢复之.
    SLONGCALL    MACRO    FUNCLABEL
            CALL    $+2
            JMP    $+2
            JMP    FUNCLABEL
            ENDM
    ;=====================================
    ;功能:    Bank0 主程序调用 Bank123 子程序
    CALL_B0_B123    MACRO    FUNCLABEL
            CALL    $+2
            JMP    $+3
            LDI    ROMBANK,((FUNCLABEL>>11)-1)&0FH
            JMP    FUNCLABEL
            ENDM
    ;=====================================
    ;功能:    Bank123 主程序调用 Bank0 子程序
    CALL_B123_B0    MACRO    FUNCLABEL
            CALL    $+2
            JMP    $+2
            JMP    FUNCLABEL
            ENDM
    ;=====================================

     

    ;=====================================
    ;入口:    Address-->表头地址,BXH,BXL-->8位偏移量
    ;出口:    8位数据-->RDT1,RDT0
    ;影响资源: R3,R2,R1,R0    256bytes以内查表
    LOOKUP    macro    Address,BXH,BXL
        ;得到表头
        ldi    R3,(Address>>12)&0FH
        ldi    R2,(Address>>8)&0FH
        ldi    R1,(Address>>4)&0FH
        ldi    R0,(Address>>0)&0FH
        ;得到目的地址
        lda    BXL,(BXL>>7)&07H
        addm    R0,(R0>>7)&07H
        lda    BXH,(BXH>>7)&07H
        adcm    R1,(R1>>7)&07H
        ldi    TEMP,0
        adcm    R2,(R2>>7)&07H
        ldi    TEMP,0
        adcm    R3,(R3>>7)&07H
        ;查表
        lda    R3,(R3>>7)&07H
        STA    RDT3,(RDT3>>7)&07H
        lda    R2,(R2>>7)&07H
        STA    RDT2,(RDT2>>7)&07H
        lda    R1,(R1>>7)&07H
        STA    RDT1,(RDT1>>7)&07H
        lda    R0,(R0>>7)&07H
        STA    RDT0,(RDT0>>7)&07H
        nop
        endm
    ;=====================================

     
     

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

  • 标签:中颖 指令 宏定义 
  • 发表评论:
    载入中...

    芯片专题

    器件专题

    软件专题

    硬件专题

    综合专题

    项目专题

    原创专题

    器件检测
    LCD LED
    按键 触摸键
    E2PROM
    电池 电机
    电阻 电容 电感

    指令系统
    软件算法
    编程规范
    滤波算法
    串行通讯

    PCB设计
    I2C PWM
    红外遥控
    充电技术
    中断 ADC 

    匠人手记
    匠人夜话
    网络心路
    一周热点串烧
    从零开始玩PIC
    DIY旋转时钟

    广告5号位 [投放]

    广告3号位 [投放]

    站内搜索


    站外搜索


    百度  google
    mp3  歌词 
    图片  FLASH 
    知道  文档
    新闻  词典 
    地图  mp3 
    软件  天网 
    雅虎  爱问 
    搜狗  讯雷 
    网讯  华军 
    天空 

    21IC器件搜索
    百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》废站
  • 《匠人的百宝箱》土豆视频站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     

    推荐阅读

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]

    [工控365网]

    [煮透社]

    [白沙的香烟盒]

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    大学生电子网 

     

     

     

     

     

     

     

     《匠人的百宝箱》