|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
PIC16F877 運算子程序(定點) |
| 作者:晴兒 欄目:單片機 |
21ic,bbs使前面在這里相識,快要過節(jié)了,把我以前收集的一些子程序拿出來大家一塊用!希望大家共同進步! 16×16位定點數(shù)加、減法子程序 ;***雙字節(jié)減法子程序,入口地址ACCB-ACCA,出口地址ACCB*** D_sub CALL NEG_A ;求ACCA的補碼 ;***雙字節(jié)加法子程序,入口地址ACCB+ACCA,出口地址ACCB*** D_add MOVF ACCALO,0 ;ACCB和ACCA低半字節(jié)相加 ADDWF ACCBLO BTFSC STATUS,C ;有進位否? INCF ACCBHI ;有,ACCB高字節(jié)加1,再加ACCAHI MOVF ACCAHI,0 ;ACCA、ACCB高半字節(jié)相加 ADDWF ACCBHI RETURN ;子程序返回 ;************** ACCA取補子程序***************** NEG_A COMF ACCALO ;ACCALO取反加1 INCF ACCALO BTFSC STATUS,Z ;低8位有進位嗎? DECF ACCAHI ;有,ACCAHI減1,再取反 COMF ACCAHI ;否則ACCAHI直接取反 RETURN ;子程序返回 16×16位定點數(shù)乘法子程序 ;***16×16位乘法子程序,入口地址ACCB×ACCA,出口地址ACCB和ACCC *** ORG 0X0100 D_mpy CALL S_SIGN ;求取乘積的符號,并對負數(shù)取補 CALL SETUP ;調(diào)用子程序,將ACCB的值送ACCD INCF TEMP CLRF ACCCHI ;清ACCC CLRF ACCCLO MLOOP BCF STATUS,C ;清進位位 RRF ACCDHI ;ACCD右移 RRF ACCDLO BTFSC STATUS,C ;判斷是否需要相加 CALL D_add ;加乘數(shù)至ACCB,見加法程序 BCF STATUS,C ;清進位位 RRF ACCBHI ;右移部分乘積 RRF ACCBLO RRF ACCCHI RRF ACCCLO DECFSZ TEMP ;乘法完成否? GOTO MLOOP ;否,繼續(xù)求乘積 BTFSS SIGN,7 ;是,確定乘積的符號 GOTO OVER ;為正,乘法結(jié)束 COMF ACCCLO ;為負,乘積取補 INCF ACCCLO BTFSC STATUS,Z DECF ACCCHI COMF ACCCHI BTFSC STATUS,Z NEG_B DECF ACCBLO ; COMF ACCBLO BTFSC STATUS,Z DECF ACCBHI COMF ACCBHI OVER RETURN ;子程序返回 ;**************************************** SETUP MOVLW .15 ;初始化TEMP寄存器 MOVWF TEMP MOVF ACCBHI,0 ;ACCB送ACCD MOVWF ACCDHI MOVF ACCBLO,0 MOVWF ACCDLO CLRF ACCBHI ;清ACCB CLRF ACCBLO RETURN ;子程序返回 ;*******乘法運算確定結(jié)果符號判斷子程序****** S_SIGN MOVF ACCAHI,0 ;ACCAHI異或ACCBHI,結(jié)果送SIGN單元 XORWF ACCBHI,0 MOVWF SIGN BTFSS ACCBHI,7 ;ACCB為負嗎? GOTO CHEK_A ;否,檢查ACCA CALL NEG_B ;是,求取ACCB絕對值 CHEK_A BTFSC ACCAHI,7 ;ACCA為負嗎? CALL NEG_A ;ACCA為負,求取ACCA絕對值, ;見雙字節(jié)加法程序 RETURN ;ACCA和ACCB均為正,返回 16×16位定點數(shù)除法子程序 ;***16×16位數(shù)除法子程序,入口地址ACCB /ACCA,出口地址ACCB *** D_div CALL S_SIGN ;確定商的符號,并將負數(shù)取補 CALL SETUP ;初始化TEMP,將被除數(shù)移至ACCD, ;(SETUP子程序請參見16×16位定點數(shù) ;乘法子程序SETUP) INCF TEMP CLRF ACCCHI ;清余數(shù)寄存器 CLRF ACCCLO DLOOP BCF STATUS,C ;清進位位 RLF ACCDLO ;被除數(shù)、余數(shù)左移1位 RLF AC |
| 2樓: | >>參與討論 |
| 作者: xuebing 于 2003/12/27 14:33:00 發(fā)布:
好,頂! |
|
| 3樓: | >>參與討論 |
| 作者: HotPower 于 2004/1/15 20:18:00 發(fā)布:
不知為何大家都喜歡抄書???不解。。。 |
|
| 4樓: | >>參與討論 |
| 作者: nfldr 于 2004/1/18 13:18:00 發(fā)布:
to HotPower,因為很多人不看書 晴兒也是幫這些人看書了 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |