tenx(十速)TM87系列常用宏(二)
tenx(十速)TM87系列常用宏(二)
接上篇:http://xjtudll.cn/Exp/42/
5、位操作
⑴ 位清零
;BIT清零 RAM 00~6FH 70~7FH也可用,但是浪费了两条语句
CLRB .macro REG,BIT
MRW R0,REG
.if BIT=0
ANDI* R0,1110B
.elseif BIT=1
ANDI* R0,1101B
.elseif BIT=2
ANDI* R0,1011B
.elseif BIT=3
ANDI* R0,0111B
.endif
MWR REG,R0
.endm
⑵ 位 置1
; BIT置1 RAM 00~6FH 70~7FH也可用,但是浪费了两条语句
SETB .macro REG,BIT
MRW R0,REG
.if BIT=0
ORI* R0,0001B
.elseif BIT=1
ORI* R0,0010B
.elseif BIT=2
ORI* R0,0100B
.elseif BIT=3
ORI* R0,1000B
.endif
MWR REG,R0
.endm
6、环移
⑴ 左环移
;左环移 最高位保存到CF 低位填0
RLC .macro Reg
MRA Reg
SL0 Reg
.endm
⑵ 右环移
;右环移 最低位保存到CF 高位填0 。R0所在地址不能操作
RRC .macro Reg
MRW R0,Reg
SL0 R0
SL0 R0
SL0 R0
MRA R0
SR0 Reg
.endm
7、常数赋值操作
RAM 7FH~FFH(需索引赋值的)
;如果不用高地址,则调用方式为 MOVX ,AddrL,Num
MOVX .macro AddrH,AddrL,Num
.ifnblank AddrH ;判断宏的参数是否有串入
LDS R0,AddrH
MVH R0
.endif
LDS R0,AddrL
MVL R0
LDS R0,Num
MRW @HL,R0
.endm
8、程序跳转
RAM所存储的数值与常数比较
⑴ 小于跳转
;小于跳转 可操作RAM 00~7FH 70~7FH浪费一条语句
CJSE .macro Reg,Data,Address
MRW R0,Reg
SUBI R0,Data
JNC Address
.endm
⑵ 不等跳转
;不等跳转 可操作RAM 00~7FH 除去R0
CJNE .macro Reg,Data,Address
LDS R0,Data;Data¸øROºÍAC
EOR Reg
JNZ Address
.endm
⑶ 相等跳转
;相等跳转 可操作RAM 00~7FH 除去R0
CJE .macro Reg,Data,Address
LDS R0,Data;Data¸øROºÍAC
EOR Reg
JZ Address
.endm
⑷ -1不等于0跳转
;-1不等于0跳转 可操作RAM 00~7FH
DJNZ .macro Reg,Address
.locallabel DJNZGO
.locallabel DJNZOUT
LDA Reg
JNZ DJNZGO
JMP DJNZOUT
DJNZGO:
DEC* Reg
JNZ Address
DJNZOUT:
.endm