- 20
- 0
- 约4.11千字
- 约 7页
- 2019-09-27 发布于广东
- 举报
;多位BCD码加法:BCD AN
;入口:字节数在R7中,被加数在[R0],加数在[R1]
;岀口:结果在[R0]
;使用寄存器:A,R7,R2,R1,C,RO
BCDAN:MOV A, R7
MOV R2, A
ADD A, RO
MOV RO, A
MOV A, R2
ADD A, R1
MOVR1,A
CLRC;指令1
BCDAN1: DEC RO;指令 2
DECR1;指令 3
MOV A, @R1
ADDCA, @R0;指令 6
DAA;指令4
MOV @R0,A;指令 5
DJNZ R2, BCDAN1
RET
上述子程序出错的可能发生在子程序设计过程屮,也可能发牛在子程序调用时。现分别讨 论如下:
指令疏漏
指令1最有可能被疏漏,此指令被疏漏的后果是该了程序的结呆吋对时错。错误的特征是 比正确结果小1。尤其是当编写调试减法程序时,由于5 1单片机的减法指令只有SUBB是带 进位减法,故在减法开始而不使用CLRC指令将进位清除,会导致类似的错误,而且更不容易 发现。
2?位置不妥
指令2、3最可能出现这种错误。显然程序设计的思想是BCD码的高位在低地址单元,低 位在高地址单元,从高到低依次存放。因此相加时必须从低位加起,所以作为被加数、加数的 指针RO、R 1必须通过程序前的一段指令调整到指向低位,调整的方法是原指针加字节数。 但实际上直接加字节数后使得RO、R 1指到最低字节的后而一个字节去了,故必须
首先将这1减掉,指向最低字节。从表血上看,指令2、3放在指令5后血似乎也实现了 从低字节逐渐向高字节的推进作用,很多开发者一不留神就想当然的这样做了,结果前面的一 层作用被疏漏掉了,导致程序错误。
3 .指令不当
例如指令6由丁?疏忽写成A D D指令,则结果无法正确。
4.非法调用
按照了程序的说明,调用该了程序是非常容易的。但有时由于疏忽,没有按照入口要求送 数出现非法调用现象,导致出错。这类错误在调试时会使得开发者一时不知错在子程序还是调 用它的程序。例如,在调用前R 7必须按字节数口止确置数,如果忘了此步,显然结果是无法 正常的。
【例二】7 1 3 5 A/ D转换结杲读取中断子程序。
;AD转换结果读取中断程序:(/INT0)
:万位引起中断:其它各位采川查询方式
;结果暂存在AD单元中(3字节)
?士 ?卜
叶屯
,
ICL7135: CLR IEO;因为是电平触发,故必软件清屮断标志
PUSH ACC :保护现场
PUSH 02H ; R2
PUSH01H : R1
PUSH 00H
PUSH DPL
PUSH DPH
MOV DPTR, #I8155_PA;读 8155A 口的 A/D 结果
MOVX A, @DPTR
MOV R2, A ;万位入 R2
ANL A, #0F0H
JNZ ICL7135_0 ; POL,OV,UN各位非0,则说明结果不正常
SJMP ICL7135_1
ICL7135_0: LJMP PRI
ICL7135_1: MOV Rl, #AD ;结果暂存单元(始地址)
MOV A, R2
ANL A, #01H;存万位
XCHD A, @R1
MOV A, R2
ANL A, #00H
SWAP A
XCHD A, @R1
MOV @R1,A
INCR1
WD4: MOVX A, @DPTR:读千位
JNB ACC.7, WD4
SWAP A
MOV@R1,A;千存入
WD3: MOVX A, @DPTR ;读百位
JNB ACC.6, WD3
XCHD A, @R1 ;百位存入
INCR1
WD2: MOVX A, @DPTR ;读十位
JNB ACC.5, WD2
SWAP A
MOV @R1,A
WD1: MOVX A, @DPTR ;读个位
JNB ACC.4, WD1
XCHD A, @R1
SETB EOC_AD ;设置转换完成标志
MOV RO, #AD_L; RO指向结果单元首址
MOVR1,#AD;转存结果缓冲区
MOV R2, #03H
YL_0: MOV A, @R1
MOV @R0,A
INC RO
INCR1
DJNZ R2, YL_O
SJMP PR1
PRI:POPDPH;恢复现场
POP DPL
POP OOH
POPOIH
POP 02H
POP ACC
RETI;中断返回
弓I用该了程序主要想讨论以下两个问题:
中断程序的常规错误
1) 现场的保护与恢复
该指令通过PUSH压栈指令将程序中用到的寄存器及其它资源保护起來,然后通过出栈指 令按照“先进后出”原则在中断返回]逬依次恢复,避免干扰或破坏其它程序的止常执行。
当然,工作寄存器的保存也可通过寄存器组切换的方式更为便捷地实现。由于屮断的不可 预测性,因此现场保护显得尤为重要,否则
原创力文档

文档评论(0)