3.二进制数到BCD码转换程序实例
程序流程如下图所示。其中,下图a是二进制数到BCD码的转换流程图。下图b是BCD码(数)调整流程图。
根据下图的流程。定义的源程序命名为PIC3TD·ASM.其清单如下:
UST P=PICl6F873A;选芯片型号
TRO EOU 26H
;设置等效十进制小数点位寄
存器
TRl EOU 27H
;设置等效的十进制个位寄存
器
TR2 EOU 28H
:设置等效的十进制10位寄存
器
REGH EOU 3FH
REGLEOU 40H
REGHl EOU 32H
REGLl EOU 33H
COUNT3 EOU 2CH
;定义左移次数寄存器
BCD2 EOU 3lH
BCDl EoU 30H
BCD0 EOU 2FH
MO EOU 2EH
ORG 0000H
GOTO START
ORG 10H
:RA3比较电压,RA0输入,RB口
输出BCD码,RC口位扫描控制
START BCF STATUS.RPl
BSF STATUS.RP0
NOP
BCF STATUS.RPO
;10位A/D转换结果转4位BCD
码(百位未用)
MOVLW 0x03
;设A/D转换高两位为0x03
MOVWF REGH
;将0x03通过W送REGH,以便
仿真
MOVLW 0x85
:设A/D转换低8位为0x85
MOVWF REGL
;将0x85通过W送REGL,以便
仿真
EJZ_BCD1 MOVFW REGH;A/
D转换高两位→W
MOVWF REGHl:W→REGHl
MOVFW REGL;A/D转换低8
位→W
MOVWF REGLl:W→REGLl
MOVLW H'lO':设定左移次数
MOVWF COUNT3
CLRF BCD0;清BCD0、BCDl、
BCD2
CLRF BCDl
CLRF BCD2
BCF STATUS,C;清进位位C
LLMP RLF REGLl,1:REGLl左
移
RLF REGHl,l;REGHl左移
RLF BCD2。1;BCD2左移
RLF BCDl。1:BCDl左移
RLF BCD0,1;BCDO左移
DECFSZ COUNT3,1:COUNT3
减l不等于0
GOTO POLl;转标号POLl
MOVFW BCD2;BCD→W
ANDLW HOF';取BCD2低四
位
MOVWF TRO;小数点位值送
TR0
SWAPF BCD2,W;BCD2字节交
换
ANDLW H'0F':取BCD2高四位
MOVWF TRl;BCD个位值送
TRl
MOVFW BCDl:BCDl→W
ANDLW H'0F':取BCDl低4位
MOVWF TR2:BCD十位值送
TR2
RETURN
POLl
MOVLIW BCD2:BCD2地址送W
MOVWF FSR:W→间址FSR
CALL ZHCX:调ZHCX
MOVLW BCDl;BCDl地址送W
MOVWF FSR:W→间址FSR
CALL ZHCX:调ZHCX
MOVLW BCDO;BCD0地址送W
MOVWF FSR;W→间址FSR
CALL ZHCX:调用ZHCX
GOTO LLMP:转LLMP
ZHCX MOVLW H'03';将值3→
W
ADDWF INDF,W;W+INDF→
W
MOVWF MO;W→寄存器M0
BTFSC MO,3;M0大于7?
MOVWF INDF:大于7→INDFMOVLW H'30‘;将30→WADDWF INDF,W:W+INDF→WMOVWF M0;W→寄存器M0BTFSC MO,7:M0高4位大于7?
MOVWF INDF:大于7→INDFRETURN:不大于7返回END;程序结束说明:1.上述源程序(PIC3TD·ASM)将电子温度计源程序PIC3T·ASM中的加转换、查表查序删去,仅剩二进制数转BCD码的程序部分,目的是突出学习二进制数转BCD码的程序技术。
2.为直观学习其转换过程和进行该程序的模拟仿真演示,增加了以下4条指令:
MOVLW 0x03MOVWF REGHMOVLW Ox85MOVWF REGL加上述四条指令的意义是,给A/D转换结果寄存器高2位送常数0×03:低8位送常数0×85.此时10位A/D转换结果寄存器的内容应该是:
0×0385=3×162+8×16+5=901其目的是将上述的程序在MPLAB集成开发软件下汇编。生成目标码后,直接在MPLAB的OPTION命令进行软件仿真。可看到TR0(LED第l位)、TRl(LED第二位)、TR2(LED第三位)的值,即为90l。可见,给定的A/D转换常数值901,经程序左移调整运行,模拟仿真结果完全相同。说明文中所介绍的二进制数到BCD转换方法完全正确。
注意:所加的四条指令不能放在电子温度计PIC3T·ASM源程序中,否则引起错误结果。
五、小结
本文介绍的内容包括:1.完整可执行的高精度电子温度计的源程序;2.电子温度计的数码管LED显示方法:3.二进制数转BCD码、再转等效的十进制数。供查表程序给数码管LED显示。
上一页 [1] [2]