|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
貼一個宋榮、尹勇的 BCD 碼加法程序。分析錯誤 |
| 作者:shiaf 欄目:單片機 |
O_flow equ 9 ; 其它的寄存器自己定義 ; BCDAdd movf Num_1,W clrf Num_1 ;clear num_1 addwf Num_2,1 ; do binary addition btfsc STATUS,C ;< 256 then skip goto inc_n1n2 ;else inc all movlw 66 ;add 66 addwf Num_2,1 ;/ btfss STATUS,DC ;half carry? goto sub_06 ;no then subtract btfss STATUS,C ;full carry? goto sub_60 ;yes then subtract inc_n1 incf Num_1,1 ;inc it retlw 0 ;clr w sub_06 btfss STATUS,C ;full carry goto sub_66 ;yes subtract 66 movlw 6 ;else subtract 6 goto sub_com ;do common sub_66 movlw 66 sub_com subwf Num_2,1 retlw 0 sub_60 movlw 60 goto sub_com inc_n1n2 movlw 66 addwf Num_2,1 goto inc_n1 ; ;******************************************************************** ; 測試程序(注意它怎樣使用該子程序) ;********************************************************************* main movlw 99 movwf Num_1 ; Set Num_1 = 99 ( max BCD digit ) movlw 99 movwf Num_2 ; Set Num_2 = 99 ; call BCDAdd ; After addition, Num_2 = 98 ; ; and Num_1 = 01 ( 99+99 = 198 -> max NUMBER ) ; self goto self ;如不是測試程序,這句無用 ; ; org 1FF goto main ; END 不要迷信網(wǎng)上程序,大師也有錯誤喲! http://www.teachersong.com/pass_word1/add_bcd.txt |
| 2樓: | >>參與討論 |
| 作者: shiaf 于 2003/12/30 10:52:00 發(fā)布:
錯誤還比較多,以下是我修改好的程序。 REG_TEMP1 EQU 0x23 ; 功能 FSR + WREG ; 入口 FSR 指相加數(shù) WREG = 被加數(shù) ; 出口 WREG = 和 C = 進位標(biāo)志 ; 占用一個零時寄存器 REG_TEMP1 BCDAdd: MOVWF REG_TEMP1 MOVF INDF,W ADDWF REG_TEMP1,F BTFSC STATUS,C GOTO INC_N1N2 BTFSC STATUS,DC GOTO INC_N2 INC_N0: MOVLW 0x66 ADDWF REG_TEMP1,F BTFSS STATUS,DC GOTO SUB_06 BTFSS STATUS,C GOTO SUB_60 INC_N1: MOVF REG_TEMP1,W BSF STATUS,C RETURN INC_N1N2: BTFSS STATUS,DC GOTO INC_N1N2N3 MOVLW 0x66 ADDWF REG_TEMP1,F GOTO INC_N1 INC_N1N2N3: MOVLW 0x66 ADDWF REG_TEMP1,F BTFSC STATUS,DC GOTO INC_N1 MOVLW 0x6 SUBWF REG_TEMP1,F GOTO INC_N1 INC_N2: MOVLW 0x6 ADDWF REG_TEMP1,F GOTO INC_N0 SUB_06: BTFSS STATUS,C GOTO SUB_66 MOVLW 0x6 SUBWF REG_TEMP1,F GOTO INC_N1 SUB_60: MOVLW 0x60 GOTO SUB_COM SUB_66: MOVLW 0x66 SUB_COM: SUBWF REG_TEMP1,W BCF STATUS,C RETURN END * - 本貼最后修改時間:2003-12-30 10:55:39 修改者:shiaf |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |