英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3775|回复: 0

一些应用程序/算法/子程!!(

[复制链接]
发表于 2009-3-8 15:54:12 | 显示全部楼层 |阅读模式
双字节定点数至5位BCD码转换程序
     入口条件:ACCBHI、ACCBLO
     出口条件:ACCCHI低半字节、ACCCLO、ACCDHI
以下为双字节定点数至5位BCD码转换程序清单。
     LIST                  p=16f877
     INCLUDE            p16f877.inc
     ACCBLO            EQU      23            ;存放被转换的双字节整数低8位
     ACCBHI            EQU      24            ;存放被转换的双字节整数高8位
     ACCCLO            EQU      26            ;存放5位BCD码
     ACCCHI            EQU      27
     ACCDLO            EQU      28
     ACCDHI            EQU      29
     TEMP            EQU      2A            ;临时寄存器
     SIGN            EQU      2B            ;被转换数符号寄存器
     ORG                  0X0000
START      GOTO            MAIN
     ORG                  0X0100
;**********双字节数至BCD码子程序************
BtoBCD      CLRF            SIGN                  ;初始化符号寄存器
     BTFSS            ACCBHI,7      ;被转换数为负?
     GOTO            LOOP1            ;否,转BtoBCD
     BSF                  SIGN,7            ;是,存符号
     CALL            NEG_B            ;ACCB取补
LOOP1      BCF                  STATUS,C      ;清进位位
     MOVLW            .16                  ;移位计数器赋初值
     MOVWF            COUNT
     CLRF            ACCCHI            ;初始化出口寄存器
     CLRF            ACCCLO
     CLRF            ACCDHI
LOOP16      RLF                  ACCBLO            ;ACCB左移一位至出口寄存器
     RLF                  ACCBHI
     RLF                  ACCDHI
     RLF                  ACCCLO
     RLF                  ACCCHI
     DECFSZ            COUNT            ;移位计数器=0?
     GOTO            ADJDEC            ;否,转ADJDEC
     RETLW            0                  ;是,返回
ADJDEC      MOVLW            ACCDHI            ;指针指向ACCDHI
     MOVWF            FSR
     CALL            ADJBCD            ;调用BCD码校正子程序
     MOVLW            ACCCLO            ;指针指向ACCCLO
     MOVWF            FSR
     CALL            ADJBCD            ;调用BCD码校正子程序      
     MOVLW            ACCCHI            ;指针指向ACCCHI
     MOVWF            FSR
     CALL            ADJBCD            ;调用BCD码校正子程序
     GOTO            LOOP16            ;ACCB重新左移
;************* BCD码校正子程序**************
ADJBCD      MOVLW            00X03            ;LSD+3>7?
     ADDWF            INDF,0
     MOVWF            TEMP
     BTFSC            TEMP,3
     MOVWF            INDF            ;是,LSD=LSD+3
     MOVLW            0X30                  ;否,MSD+3>7?
     ADDWF            INDF,0
     MOVWF            TEMP
     BTFSC            TEMP,7
     MOVWF            INDF                  ;是,MSD=MSD+3
     RETLW            0                  ;返回
【校验举例1】 -23808(十进制)
化为十六进制数:A300
结果:023808(BCD),SIGN=80
【校验举例2】 12306(十进制)
化为十六进制数: 3012
结果:012306(BCD),SIGN=00
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-3-19 12:27 , Processed in 0.053599 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表