|
这几天折腾一个AD结果换算成某比值数的问题,终于有了结果,结果存放在一个字节内,不超过0X64(100d). 要将其转化为2位BCD码在七段LED上显示,搜了一些现成程序,发现计算时间消耗较多,于是想用查表法解决。以下是子程序,二进制数存在DATAA1里,转换后的结果以压缩BCD码格式仍存在DATAA1中。有个DATAA2是临时占用。两个表附后。该子程序在我的实际应用中调试通过。
- ;*****************BIN TO BCD CONVERT**************
- BIN_TO_BCD
- MOVF DATAA1,W
- MOVWF DATAA2
- SWAPF DATAA1,W
- ANDLW 0X0F
- CALL BIN_HIGHHALF_BCD_TABLE
- MOVWF DATAA1
- MOVF DATAA2,W
- ANDLW 0X0F
- CALL BIN_LOWHALF_BCD_TABLE
- ADDWF DATAA1,W
- MOVWF DATAA2
- ANDLW 0XF0
- MOVWF DATAA1
- MOVF DATAA2,W
- ANDLW 0X0F
- CALL BIN_LOWHALF_BCD_TABLE
- ADDWF DATAA1,F
- RETURN
- ;***************BIN HIGH HALF TO BCD TABLE**********
- ;用于将高半字节的BIN码换成整字节的压缩BCD码
- BIN_HIGHHALF_BCD_TABLE
- ADDWF PCL,1
- RETLW B'00000000' ;0
- RETLW B'00010110' ;16
- RETLW B'00110010' ;32
- RETLW B'01001000' ;48
- RETLW B'01100100' ;64
- RETLW B'10000000' ;80
- RETLW B'10010110' ;96
- RETLW B'00101000' ;128,失掉了百位
- ;***************BIN LOW HALF TO BCD TABLE**********
- ;用于将低半字节的BIN码换成整字节的压缩BCD码
- BIN_LOWHALF_BCD_TABLE
- ADDWF PCL,1
- RETLW B'00000000' ;0
- RETLW B'00000001' ;1
- RETLW B'00000010' ;2
- RETLW B'00000011' ;3
- RETLW B'00000100' ;4
- RETLW B'00000101' ;5
- RETLW B'00000110' ;6
- RETLW B'00000111' ;7
- RETLW B'00001000' ;8
- RETLW B'00001001' ;9
- RETLW B'00010000' ;A
- RETLW B'00010001' ;B
- RETLW B'00010010' ;C
- RETLW B'00010011' ;D
- RETLW B'00010100' ;E
- RETLW B'00010101' ;F
复制代码
|
|