关于89C51的SUBB A R2这个指令的执行作用
请教大家以条指令作用,程序在下列出:
1. SUBB A,R2 即是 A的立即数8减R2的立即数0,要减去进位标志C吗?
按照89C51指令集的功能说明:含借位减法,自累加器中减去错位(即进位标志C)及源操作数,若不够减而有错位则C=1,反之则C=0,
以下这段程序用于遥控器解码,本人不理解进位标志C到底是软件或都是通过检测硬件的信号设定0\1还是依靠A减R2相减后有没有错位决定的.
如果可以软件设定我我在程序加入这句MOV C IRIN,用仿真器仿真程序没问题,但总是不理解这句意思??
IRIN EQU P3.2 ;红外接收信号
I5: MOV R2,#0 ;0.14ms 计数
L1: CALL DEL
JB IRIN, N1 ;等 IR 变为高电平 IRIN等于1跳转
;IR=0,检查R2中的计数值
CALL DEL ;10us
MOV A,#8
;CLR C
SUBB A,R2 ;判断高低位 8-0-0=8=A
;IF C=0 BIT=0
MOV A,@R0 ;A=20H,R0的内容不变
RRC A ;00100000 \00010000 C=0 P=124 即A=10H 将C中的值0或1移入A中的最低位
MOV @R0,A ;处理完一位 地址20H的内容10H,R0和A的内容都不变 P116
INC R3 ;R3内容加1
CJNE R3,#8,LL ;需处理完8位,寄存器与立即数不相等则跳转
MOV R3,#0 ;8位数清0 看I3:
INC R0 ;20H+1
CJNE R0,#24H,LL ;收集到4字节了即32位,1字节8位
JMP IR_COMP
N1: INC R2 ;R2地址内容加1
CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开
[解决办法]
8051没有不带借位的减,所以你的第一 SUBB之前总是需要一条 CLR C
;CLR C ; 就像这样,但你为什么要去掉它?
SUBB A,R2 ;判断高低位 8-0-0=8=A