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

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

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(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号位 [投放]

     
     

    匠人原创

    推荐阅读

    往日酷贴