版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 . . . ;*增量式PID控制算法程序*;T、TD、TI、KP依次從30H,33H,36H,39H開(kāi)始。;A,B,C的值依次存在BLOCK1,BLOCK2,BLOCK3的地址里; 這里R(k)給的是定值;ORG 0000HBLOCK1 EQU 43H ;A,B ,CBLOCK2 EQU 46HBLOCK3 EQU 49HUK EQU 4CH ;存結(jié)果UKRK EQU 50HEK EQU 53H ;存放偏差值E(k)的始址EK1 EQU 56H ;存放E(k-1)的始址EK2 EQU 59H ;存放E(k-2)的始址CK EQU 5CH ;采樣數(shù)據(jù)始址BUFF EQU 60H ;暫存區(qū)BUF
2、F1 EQU 63HBUFF2 EQU 66HREC EQU 69HTEST:MOV RK,#01H ;常數(shù)Rk的BCD碼浮點(diǎn)數(shù)MOV RK+1,#12H ;1.25MOV RK+2,#50HMOV 3CH,#01H ;常數(shù)1的BCD碼浮點(diǎn)數(shù)MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常數(shù)2的BCD碼浮點(diǎn)數(shù)MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T的BCD 碼浮點(diǎn)數(shù)MOV 31H,#23H ;2.34MOV 32H,#40HMOV 33H,#01H ;Td的BCD碼浮點(diǎn)數(shù)MOV 34H,#35H ;3.54MOV 35H,#4
3、0HMOV 36H,#01H ;Ti的BCD碼浮點(diǎn)數(shù)MOV 37H,#11H ;1.12MOV 38H,#20HMOV 39H,#01H ;Kp的BCD碼浮點(diǎn)數(shù)MOV 3AH,#12H ;1.25MOV 3BH,#50HMOV R0,#RK ;指向BCD碼浮點(diǎn)操作數(shù)LCALL BTOF ;將其轉(zhuǎn)換成二進(jìn)制浮點(diǎn)操作數(shù)MOV R0,#3CHLCALL BTOFMOV R0,#40HLCALL BTOFMOV R0,#39HLCALL BTOFMOV R0,#36H ;指向BCD碼浮點(diǎn)操作數(shù)TiLCALL BTOF ;將其轉(zhuǎn)換成二進(jìn)制浮點(diǎn)操作數(shù)MOV R0,#33H ;指向BCD碼浮點(diǎn)操作數(shù)TdLC
4、ALL BTOF ;將其轉(zhuǎn)換成二進(jìn)制浮點(diǎn)操作數(shù)MOV R0,#30H ;指向BCD碼浮點(diǎn)操作數(shù)TLCALL BTOF ;將其轉(zhuǎn)換成二進(jìn)制浮點(diǎn)操作數(shù)MOV R1, #BUFF1 ;保存30H中的值 即T值LCALL FMOVR0MOV R1, #36H ;計(jì)算A值(1+T/Ti+Td/T).KpLCALL FDIVMOV R1,#3CH ;常數(shù)1LCALL FADDMOV R0,#33H ;保存33H中的值MOV R1,#BUFFLCALL FMOVR0MOV R1,#BUFF1LCALL FDIVMOV R1,#30H ;30H里存的是T/Ti+1LCALL FADDMOV R1,#39HLC
5、ALL FMULMOV R1 ,#BLOCK1 ;將結(jié)果保存在BLOCK1中LCALL FMOVR0MOV R1,#BUFF1 ;30H恢復(fù)原值MOV R0,#30HLCALL FMOVMOV R1,#BUFF ;33H恢復(fù)原值MOV R0,#33HLCALL FMOVMOV R0,#40H ;計(jì)算B的值Kp.(1+2.Td/T)MOV R1,#33HLCALL FMULMOV R1,#30HLCALL FDIVMOV R1,#3CHLCALL FADDMOV R1,#39HLCALL FMULMOV R1,#BLOCK2 ;保存B值到BLOCK2中LCALL FMOVR0MOV R0,#39
6、H ;計(jì)算C的值Kp.Td/TMOV R1,#33HLCALL FMULMOV R1,#30HLCALL FDIVMOV R1,#BLOCK3 ;保存C值到BLOCK3中LCALL FMOVR0MOV R0,#EK1 ;將EK1,EK2設(shè)初值0LCALL FCLRMOV R0,#EK2LCALL FCLRMOV REC,#03H ;設(shè)置采樣次數(shù)LOOP: MOV CK,#7eH ;采樣數(shù)據(jù)暫時(shí)給了一個(gè)定值MOV CK+1,#21H ;0.002112MOV CK+2,#12HMOV R0,#CKLCALL BTOFMOV R0,#RK ;保存R(k)中的值MOV R1,#BUFFLCALL F
7、MOVR0MOV R1,#CKLCALL FSUB ;計(jì)算R(k)-C(k)的值送給E(k)MOV R1,#EKLCALL FMOVR0MOV R1,#BUFF ;恢復(fù)RK的值 釋放BUFFMOV R0,#RKLCALL FMOVMOV R0,#BLOCK2 ;將B.e(k-1)的值暫存在BUFF1中MOV R1,#BUFF ;保存BLCALL FMOVR0MOV R1,#EK1LCALL FMULMOV R1,#BUFF1LCALL FMOVR0MOV R1,#BUFF ;恢復(fù)B釋放BUFFLCALL FMOVMOV R0,#BLOCK3 ;將C.e(K-2)的值暫存在BUFF2中MOV R
8、1,#BUFF ;保存CLCALL FMOVR0MOV R1,#EK2LCALL FMULMOV R1,#BUFF2LCALL FMOVR0MOV R1,#BUFF ;恢復(fù)C釋放BUFFLCALL FMOVMOV R0,#BLOCK1 ;A.E(k)MOV R1,#BUFFLCALL FMOVR0MOV R1,#EKLCALL FMULMOV R1,#BUFF1 ;計(jì)算Uk值A(chǔ).E(k)-B.E(k-1)+C.E(k-2)LCALL FSUBMOV R1,#BUFF2LCALL FADDMOV R1,#UK ;保存結(jié)果到UK中LCALL FMOVR0MOV R1,#BUFF ;恢復(fù)A 釋放BU
9、FFLCALL FMOVMOV R0,#UK ;UK轉(zhuǎn)換成BCD碼浮點(diǎn)數(shù)輸出LCALL FTOBMOV R1,#EK1 ;將E(k-1)->E(k-2),E(k)->E(k-1)MOV R0,#EK2LCALL FMOVMOV R1,#EKMOV R0,#EK1LCALL FMOVLCALL DELAY ;等待采樣時(shí)刻DJNZ REC,NEXT1SJMP $NEXT1: LJMP LOOPDELAY: MOV R7,#02HDELAY1: MOV R6,#0FFHDELAY2: DJNZ R6,DELAY2DJNZ R7,DELAY1RET; () 標(biāo)號(hào):FSDT 功能:浮點(diǎn)數(shù)格式
10、化;入口條件:待格式化浮點(diǎn)操作數(shù)在R0中。;出口信息:已格式化浮點(diǎn)操作數(shù)仍在R0中。;影響資源:PSW、A、R2、R3、R4、位1FH 堆棧需求: 字節(jié)FSDT: LCALL MVR0 ;將待格式化操作數(shù)傳送到第一工作區(qū)中LCALL RLN ;通過(guò)左規(guī)完成格式化LJMP MOV0 ;將已格式化浮點(diǎn)操作數(shù)傳回到R0中; () 標(biāo)號(hào): FADD 功能:浮點(diǎn)數(shù)加法;入口條件:被加數(shù)在R0中,加數(shù)在R1中。;出口信息:OV=0時(shí),和仍在R0中,OV=1時(shí),溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求: 字節(jié)FADD: CLR F0 ;設(shè)立加法標(biāo)志SJMP AS ;計(jì)算代數(shù)和;
11、 () 標(biāo)號(hào): FSUB 功能:浮點(diǎn)數(shù)減法;入口條件:被減數(shù)在R0中,減數(shù)在R1中。;出口信息:OV=0時(shí),差仍在R0中,OV=1時(shí),溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求:字節(jié)FSUB: SETB F0 ;設(shè)立減法標(biāo)志AS: LCALL MVR1 ;計(jì)算代數(shù)和。先將R1傳送到第二工作區(qū)MOV C,F0 ;用加減標(biāo)志來(lái)校正第二操作數(shù)的有效符號(hào)CLR A ; *?應(yīng)加的一條語(yǔ)句RRC AXRL A,R1MOV C,ACC.7ASN: MOV 1EH,C ;將第二操作數(shù)的有效符號(hào)存入位1EH中XRL A,R0 ;與第一操作數(shù)的符號(hào)比較RLC AMOV F0,C ;保
12、存比較結(jié)果LCALL MVR0 ;將R0傳送到第一工作區(qū)中LCALL AS1 ;在工作寄存器中完成代數(shù)運(yùn)算MOV0: INC R0 ;將結(jié)果傳回到R0中的子程序入口INC R0MOV A,R4 ;傳回尾數(shù)的低字節(jié)MOV R0,ADEC R0MOV A,R3 ;傳回尾數(shù)的高字節(jié)MOV R0,ADEC R0MOV A,R2 ;取結(jié)果的階碼MOV C,1FH ;取結(jié)果的數(shù)符MOV ACC.7,C ;拼入階碼中MOV R0,ACLR ACC.7 ;不考慮數(shù)符CLR OV ;清除溢出標(biāo)志CJNE A,#3FH,MV01;階碼是否上溢? * 應(yīng)為#40HSETB OV ;設(shè)立溢出標(biāo)志MV01: MOV A
13、,R0 ;取出帶數(shù)符的階碼RETMVR0: MOV A,R0 ;將R0傳送到第一工作區(qū)中的子程序MOV C,ACC.7 ;將數(shù)符保存在位1FH中MOV 1FH,CMOV C,ACC.6 ;將階碼擴(kuò)充為8bit補(bǔ)碼MOV ACC.7,CMOV R2,A ;存放在R2中INC R0MOV A,R0 ;將尾數(shù)高字節(jié)存放在R3中MOV R3,A ;INC R0MOV A,R0 ;將尾數(shù)低字節(jié)存放在R4中MOV R4,ADEC R0 ;恢復(fù)數(shù)據(jù)指針DEC R0RETMVR1: MOV A,R1 ;將R1傳送到第二工作區(qū)中的子程序MOV C,ACC.7 ;將數(shù)符保存在位1EH中MOV 1EH,CMOV C
14、,ACC.6 ;將階碼擴(kuò)充為8bit補(bǔ)碼MOV ACC.7,CMOV R5,A ;存放在R5中INC R1MOV A,R1 ;將尾數(shù)高字節(jié)存放在R6中MOV R6,AINC R1MOV A,R1 ;將尾數(shù)低字節(jié)存放在R7中MOV R7,ADEC R1 ;恢復(fù)數(shù)據(jù)指針DEC R1RETAS1: MOV A,R6 ;讀取第二操作數(shù)尾數(shù)高字節(jié)ORL A,R7JZ AS2 ;第二操作數(shù)為零,不必運(yùn)算MOV A,R3 ;讀取第一操作數(shù)尾數(shù)高字節(jié)ORL A,R4JNZ EQMOV A,R6 ;第一操作數(shù)為零,結(jié)果以第二操作數(shù)為準(zhǔn)MOV R3,AMOV A,R7MOV R4,AMOV A,R5MOV R2,
15、AMOV C,1EHMOV 1FH,CAS2: RETEQ: MOV A,R2 ;對(duì)階,比較兩個(gè)操作數(shù)的階碼XRL A,R5JZ AS4 ;階碼一樣,對(duì)階結(jié)束 ACC.7,EQ3;階符互異MOV A,R2 ;階符一樣,比較大小CLR CSUBB A,R5JC EQ4EQ2: CLR C ;第二操作數(shù)右規(guī)一次MOV A,R6 ;尾數(shù)縮小一半RRC AMOV R6,AMOV A,R7RRC AMOV R7,AINC R5 ;階碼加一ORL A,R6 ;尾數(shù)為零否?JNZ EQ ;尾數(shù)不為零,繼續(xù)對(duì)階MOV A,R2 ;尾數(shù)為零,提前結(jié)束對(duì)階MOV R5,ASJMP AS4EQ3: MOV A,R2
16、 ;判斷第一操作數(shù)階符JNB ACC.7,EQ2;如為正,右規(guī)第二操作數(shù)EQ4: CLR CLCALL RR1 ;第一操作數(shù)右規(guī)一次ORL A,R3 ;尾數(shù)為零否?JNZ EQ ;不為零,繼續(xù)對(duì)階MOV A,R5 ;尾數(shù)為零,提前結(jié)束對(duì)階MOV R2,AAS4: F0,AS5 ;尾數(shù)加減判斷MOV A,R4 ;尾數(shù)相加ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,AJNC AS2LJMP RR1 ;有進(jìn)位,右規(guī)一次AS5: CLR C ;比較絕對(duì)值大小MOV A,R4SUBB A,R7MOV B,AMOV A,R3SUBB A,R6JC AS6MOV R4,B
17、 ;第一尾數(shù)減第二尾數(shù)MOV R3,ALJMP RLN ;結(jié)果規(guī)格化AS6: CPL 1FH ;結(jié)果的符號(hào)與第一操作數(shù)相反CLR C ;結(jié)果的絕對(duì)值為第二尾數(shù)減第一尾數(shù)MOV A,R7SUBB A,R4MOV R4,AMOV A,R6SUBB A,R3MOV R3,ARLN: MOV A,R3 ;浮點(diǎn)數(shù)規(guī)格化ORL A,R4 ;尾數(shù)為零否?JNZ RLN1MOV R2,#0C0H;階碼取最小值RETRLN1: MOV A,R3 ACC.7,RLN2;尾數(shù)最高位為一否?CLR C ;不為一,左規(guī)一次LCALL RL1SJMP RLN ;繼續(xù)判斷RLN2: CLR OV ;規(guī)格化結(jié)束RETRL1:
18、 MOV A,R4 ;第一操作數(shù)左規(guī)一次RLC A ;尾數(shù)擴(kuò)大一倍MOV R4,AMOV A,R3RLC AMOV R3,ADEC R2 ;階碼減一CJNE R2,#0BFH,RL1E;階碼下溢否?;CLR AMOV R3,A ;階碼下溢,操作數(shù)以零計(jì)MOV R4,AMOV R2,#0C0H ; RL1E: CLR OVRETRR1: MOV A,R3 ;第一操作數(shù)右規(guī)一次RRC A ;尾數(shù)縮小一半MOV R3,AMOV A,R4RRC AMOV R4,AINC R2 ;階碼加一CLR OV ;清溢出標(biāo)志CJNE R2,#40H,RR1E;階碼上溢否?MOV R2,#3FH ;階碼溢出SETB
19、 OVRR1E: RET; (4) 標(biāo)號(hào):FMUL 功能:浮點(diǎn)數(shù)乘法;入口條件:被乘數(shù)在R0中,乘數(shù)在R1中。;出口信息:OV=0時(shí),積仍在R0中,OV=1時(shí),溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求:6字節(jié)FMUL: LCALL MVR0 ;將R0傳送到第一工作區(qū)中MOV A,R0XRL A,R1 ;比較兩個(gè)操作數(shù)的符號(hào)RLC AMOV 1FH,C ;保存積的符號(hào)LCALL MUL0 ;計(jì)算積的絕對(duì)值LJMP MOV0 ;將結(jié)果傳回到R0中MUL0: LCALL MVR1 ;將R1傳送到第二工作區(qū)中MUL1: MOV A,R3 ;第一尾數(shù)為零否?ORL A,R4
20、JZ MUL6MOV A,R6 ;第二尾數(shù)為零否?ORL A,R7JZ MUL5MOV A,R7 ;計(jì)算R3R4×R6R7R3R4MOV B,R4MUL ABMOV A,BXCH A,R7MOV B,R3MUL ABADD A,R7MOV R7,ACLR AADDC A,BXCH A,R4MOV B,R6MUL ABADD A,R7MOV R7,AMOV A,BADDC A,R4MOV R4,ACLR ARLC AXCH A,R3MOV B,R6MUL ABADD A,R4MOV R4,AMOV A,BADDC A,R3MOV R3,A ACC.7,MUL2;積為規(guī)格化數(shù)否? R7四
21、舍五入MOV A,R7 ;左規(guī)一次RLC AMOV R7,ALCALL RL1MUL2: MOV A,R7JNB ACC.7,MUL3INC R4MOV A,R4JNZ MUL3INC R3MOV A,R3JNZ MUL3MOV R3,#80HINC R2MUL3: MOV A,R2 ;求積的階碼ADD A,R5MD: MOV R2,A ;階碼溢出判斷 ACC.7,MUL4JNB ACC.6,MUL6MOV R2,#3FH ;階碼上溢,設(shè)立標(biāo)志SETB OVRETMUL4: ACC.6,MUL6MUL5: CLR A ;結(jié)果清零(因子為零或階碼下溢)MOV R3,AMOV R4,AMOV R2
22、,#41HMUL6: CLR OVRET; (5) 標(biāo)號(hào):FDIV 功能:浮點(diǎn)數(shù)除法;入口條件:被除數(shù)在R0中,除數(shù)在R1中。;出口信息:OV=0時(shí),商仍在R0中,OV=1時(shí),溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求: 字節(jié)FDIV: INC R0MOV A,R0INC R0ORL A,R0DEC R0DEC R0JNZ DIV1MOV R0,#41H;被除數(shù)為零,不必運(yùn)算CLR OVRETDIV1: INC R1MOV A,R1INC R1ORL A,R1DEC R1DEC R1JNZ DIV2SETB OV ;除數(shù)為零,溢出RETDIV2: LCALL MVR
23、0 ;將R0傳送到第一工作區(qū)中MOV A,R0XRL A,R1 ;比較兩個(gè)操作數(shù)的符號(hào)RLC AMOV 1FH,C ;保存結(jié)果的符號(hào)LCALL MVR1 ;將R1傳送到第二工作區(qū)中LCALL DIV3 ;調(diào)用工作區(qū)浮點(diǎn)除法LJMP MOV0 ;回傳結(jié)果DIV3: CLR C ;比較尾數(shù)的大小MOV A,R4SUBB A,R7MOV A,R3SUBB A,R6JC DIV4LCALL RR1 ;被除數(shù)右規(guī)一次SJMP DIV3DIV4: CLR A ;借用R0R1R2作工作寄存器XCH A,R0 ;清零并保護(hù)之PUSH ACCCLR AXCH A,R1PUSH ACCMOV A,R2PUSH A
24、CCMOV B,#10H ;除法運(yùn)算,R3R4R6R7R0R1DIV5: CLR CMOV A,R1RLC AMOV R1,AMOV A,R0RLC AMOV R0,AMOV A,R4RLC AMOV R4,AXCH A,R3RLC AXCH A,R3MOV F0,CCLR CSUBB A,R7MOV R2,AMOV A,R3SUBB A,R6ANL C,/F0JC DIV6MOV R3,AMOV A,R2MOV R4,AINC R1DIV6: DJNZ B,DIV5MOV A,R6 ;四舍五入CLR CRRC ASUBB A,R3CLR AADDC A,R1 ;將結(jié)果存回R3R4MOV R4
25、,ACLR AADDC A,R0MOV R3,APOP ACC ;恢復(fù)R0R1R2MOV R2,APOP ACCMOV R1,APOP ACCMOV R0,AMOV A,R2 ;計(jì)算商的階碼CLR CSUBB A,R5LCALL MD ;階碼檢驗(yàn)LJMP RLN ;規(guī)格化; (6) 標(biāo)號(hào): FCLR功能:浮點(diǎn)數(shù)清零;入口條件:操作數(shù)在R0中。;出口信息:操作數(shù)被清零。;影響資源:A 堆棧需求: 字節(jié)FCLR: INC R0INC R0CLR AMOV R0,ADEC R0MOV R0,ADEC R0MOV R0,#41HRET; (7) 標(biāo)號(hào):FZER 功能:浮點(diǎn)數(shù)判零;入口條件:操作數(shù)在R0
26、中。;出口信息:若累加器A為零,則操作數(shù)R0為零,否則不為零。;影響資源:A 堆棧需求: 字節(jié)FZER: INC R0INC R0MOV A,R0DEC R0ORL A,R0DEC R0JNZ ZEROMOV R0,#41HZERO: RET; (8) 標(biāo)號(hào):FMOV 功能:浮點(diǎn)數(shù)傳送;入口條件:源操作數(shù)在R1中,目標(biāo)地址為R0。;出口信息:R0=R1,R1不變。;影響資源:A 堆棧需求: 字節(jié)FMOV: INC R0INC R0INC R1INC R1MOV A,R1MOV R0,ADEC R0DEC R1MOV A,R1MOV R0,ADEC R0DEC R1MOV A,R1MOV R0,
27、ARET; (8.1) 標(biāo)號(hào): FMOV R0 功能:浮點(diǎn)數(shù)傳送;入口條件:源操作數(shù)在R0中,目標(biāo)地址為R1。;出口信息:R1=R0,R0不變。;影響資源:A 堆棧需求: 字節(jié)FMOVR0: INC R1INC R1INC R0INC R0MOV A,R0MOV R1,ADEC R1DEC R0MOV A,R0MOV R1,ADEC R1DEC R0MOV A,R0MOV R1,ARET; (24) 標(biāo)號(hào):DTOF 功能:雙字節(jié)十六進(jìn)制定點(diǎn)數(shù)轉(zhuǎn)換成格式化浮點(diǎn)數(shù);入口條件:雙字節(jié)定點(diǎn)數(shù)的絕對(duì)值在R0中,數(shù)符在位1FH中,整數(shù)部分的位數(shù)在A中。;出口信息:轉(zhuǎn)換成格式化浮點(diǎn)數(shù)在R0中(三字節(jié))。;影
28、響資源:PSW、A、R2、R3、R4、位1FH 堆棧需求: 字節(jié)DTOF: MOV R2,A ;按整數(shù)的位數(shù)初始化階碼MOV A,R0 ;將定點(diǎn)數(shù)作尾數(shù)MOV R3,AINC R0MOV A,R0MOV R4,ADEC R0LCALL RLN ;進(jìn)行規(guī)格化LJMP MOV0 ;傳送結(jié)果到R0中; (25) 標(biāo)號(hào): FTOD 功能:格式化浮點(diǎn)數(shù)轉(zhuǎn)換成雙字節(jié)定點(diǎn)數(shù);入口條件:格式化浮點(diǎn)操作數(shù)在R0中。;出口信息:OV=1時(shí)溢出,OV=0時(shí)轉(zhuǎn)換成功:定點(diǎn)數(shù)的絕對(duì)值在R0中(雙字節(jié)),數(shù)符;在位1FH中,F(xiàn)0=1 時(shí)為整數(shù),CY=1時(shí)為一字節(jié)整數(shù)一字節(jié)小數(shù),否則為純小數(shù)。;影響資源:PSW、A、B、R
29、2、R3、R4、位1FH 堆棧需求: 字節(jié)FTOD: LCALL MVR0 ;將R0傳送到第一工作區(qū)MOV A,R2JZ FTD4 ;階碼為零,純小數(shù) ACC.7,FTD4;階碼為負(fù),純小數(shù)SETB CSUBB A,#10HJC FTD1SETB OV ;階碼大于,溢出RETFTD1: SETB CMOV A,R2SUBB A,#8 ;階碼大于否?JC FTD3FTD2: MOV B,#10H ;階碼大于,按雙字節(jié)整數(shù)轉(zhuǎn)換LCALL FTD8SETB F0 ;設(shè)立雙字節(jié)整數(shù)標(biāo)志CLR CCLR OVRETFTD3: MOV B,#8 ;按一字節(jié)整數(shù)一字節(jié)小數(shù)轉(zhuǎn)換LCALL FTD8SETB C
30、 ; 設(shè)立一字節(jié)整數(shù)一字節(jié)小數(shù)標(biāo)志CLR F0CLR OVRETFTD4: MOV B,#0 ;按純小數(shù)轉(zhuǎn)換LCALL FTD8CLR OV ;設(shè)立純小數(shù)標(biāo)志CLR F0CLR CRETFTD8: MOV A,R2 ;按規(guī)定的整數(shù)位數(shù)進(jìn)行右規(guī)*階碼是擴(kuò)展后的值CJNE A,B,FTD9MOV A,R3 ;將雙字節(jié)結(jié)果傳送到R0中MOV R0,AINC R0MOV A,R4MOV R0,ADEC R0RETFTD9: CLR CLCALL RR1 ;右規(guī)一次SJMP FTD8; (26) 標(biāo)號(hào):BTOF功能:浮點(diǎn)BCD碼轉(zhuǎn)換成格式化浮點(diǎn)數(shù);入口條件:浮點(diǎn)BCD碼操作數(shù)在R0中。;出口信息:轉(zhuǎn)換成
31、的格式化浮點(diǎn)數(shù)仍在R0中。;影響資源:PSW、A、B、R2R7、位1DH1FH 堆棧需求:字節(jié)BTOF: INC R0 ;判斷是否為零。INC R0MOV A,R0MOV R7,ADEC R0MOV A,R0MOV R6,ADEC R0ORL A,R7JNZ BTF0MOV R0,#41H;為零,轉(zhuǎn)換結(jié)束。RETBTF0: MOV A,R0MOV C,ACC.7MOV 1DH,C ;保存數(shù)符。CLR 1FH ;以絕對(duì)值進(jìn)行轉(zhuǎn)換。MOV C,ACC.6 ;擴(kuò)充階碼為八位。MOV ACC.7,CMOV R0,AJNC BTF1ADD A,#19 ;是否小于?JC BTF2MOV R0,#41H ;
32、小于時(shí)以計(jì)。INC R0MOV R0,#0INC R0MOV R0,#0DEC R0DEC R0RETBTF1: SUBB A,#19JC BTF2MOV A,#3FH ;大于時(shí)封頂。MOV C,1DHMOV ACC.7,CMOV R0,AINC R0MOV R0,#0FFHINC R0MOV R0,#0FFHDEC R0DEC R0RETBTF2: CLR A ;準(zhǔn)備將BCD碼尾數(shù)轉(zhuǎn)換成十六進(jìn)制浮點(diǎn)數(shù)。MOV R4,AMOV R3,AMOV R2,#10H ;至少兩個(gè)字節(jié)。BTF3: MOV A,R7ADD A,R7DA AMOV R7,AMOV A,R6ADDC A,R6DA AMOV R
33、6,AMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,ADEC R2JNB ACC.7,BTF3;直到尾數(shù)規(guī)格化。MOV A,R6 ;四舍五入。ADD A,#0B0H ; *加#80H,也可以CLR AADDC A,R4MOV R4,ACLR AADDC A,R3MOV R3,AJNC BTF4MOV R3,#80H ; *有進(jìn)位右規(guī)一次INC R2BTF4: MOV DPTR,#BTFL;準(zhǔn)備查表得到十進(jìn)制階碼對(duì)應(yīng)的浮點(diǎn)數(shù)。MOV A,R0ADD A,#19 ;計(jì)算表格偏移量。MOV B,#3MUL ABADD A,DPLMOV DPL,AJNC BTF5I
34、NC DPHBTF5: CLR A ;查表。MOVC A,A+DPTRMOV C,ACC.6MOV ACC.7,CMOV R5,AMOV A,#1MOVC A,A+DPTRMOV R6,AMOV A,#2MOVC A,A+DPTRMOV R7,ALCALL MUL1 ;將階碼對(duì)應(yīng)的浮點(diǎn)數(shù)和尾數(shù)對(duì)應(yīng)的浮點(diǎn)數(shù)相乘。MOV C,1DH ;取出數(shù)符。MOV 1FH,CLJMP MOV0 ;傳送轉(zhuǎn)換結(jié)果。; (27) 標(biāo)號(hào): 功能:格式化浮點(diǎn)數(shù)轉(zhuǎn)換成浮點(diǎn)碼;入口條件:格式化浮點(diǎn)操作數(shù)在R0中。;出口信息:轉(zhuǎn)換成的浮點(diǎn)碼仍在R0中。;影響資源:PSW、A、B、R2R7、位1DH1FH 堆棧需求:字節(jié)FTO
35、B: INC R0MOV A,R0INC R0ORL A,R0DEC R0DEC R0JNZ FTB0MOV R0,#41HRETFTB0: MOV A,R0MOV C,ACC.7MOV 1DH,CCLR ACC.7MOV R0,ALCALL MVR0MOV DPTR,#BFL0;絕對(duì)值大于或等于時(shí)的查表起點(diǎn)。MOV B,#0 ;十的次冪。MOV A,R2JNB ACC.7,FTB1MOV DPTR,#BTFL;絕對(duì)值小于時(shí)的查表起點(diǎn)。MOV B,#0EDH ;十的次冪。ADD A,#16JNC FTB1MOV DPTR,#BFLN;絕對(duì)值大于或等于時(shí)的查表起點(diǎn)。MOV B,#0FAH ;十的
36、次冪。FTB1: CLR A ;查表,找到一個(gè)比待轉(zhuǎn)換浮點(diǎn)數(shù)大的整數(shù)冪。MOVC A,A+DPTRMOV C,ACC.6MOV ACC.7,CMOV R5,AMOV A,#1MOVC A,A+DPTRMOV R6,AMOV A,#2MOVC A,A+DPTRMOV R7,AMOV A,R5 ;和待轉(zhuǎn)換浮點(diǎn)數(shù)比較。CLR CSUBB A,R2 ACC.7,FTB2;差為負(fù)數(shù)。JNZ FTB3MOV A,R6CLR CSUBB A,R3JC FTB2JNZ FTB3MOV A,R7CLR CSUBB A,R4JC FTB2JNZ FTB3MOV R5,B ;正好是表格中的數(shù)。INC R5 ;冪加一
37、。MOV R6,#10H ;尾數(shù)為。MOV R7,#0SJMP FTB6 ;傳送轉(zhuǎn)換結(jié)果。FTB2: INC DPTR ;準(zhǔn)備表格下一項(xiàng)。INC DPTRINC DPTRINC B ;冪加一。SJMP FTB1 ;FTB3: PUSH B ;保存冪值。LCALL DIV3 ;相除,得到一個(gè)二進(jìn)制浮點(diǎn)數(shù)的純小數(shù)。FTB4: MOV A,R2 ;取階碼。JZ FTB5 ;為零嗎?CLR C ;LCALL RR1 ;右規(guī)。SJMP FTB4FTB5: POP ACC ;取出冪值。MOV R5,A ;作為十進(jìn)制浮點(diǎn)數(shù)的階碼。LCALL HB2 ;轉(zhuǎn)換尾數(shù)的十分位和百分位。MOV R6,ALCALL HB2 ;轉(zhuǎn)換尾數(shù)的千分位和萬(wàn)分位。MOV R7,AMOV A,R3 ;四舍五入。RLC ACLR AADDC A,R7DA AMOV R7,ACLR AADDC A,R6DA AMOV R6,AJNC FTB6MOV R6,#10HINC R5FTB6: INC R0 ;存放轉(zhuǎn)換結(jié)果。INC R0MOV A,R7MOV R0,ADEC R0MOV A,R6MO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人瓷磚銷售合同范本
- 產(chǎn)品設(shè)計(jì)合同范例
- 委托檢查服務(wù)合同范例
- 吊裝裝卸合同范例
- 國(guó)際商事交易合同范例
- 學(xué)校安裝空調(diào)收費(fèi)合同范本
- 內(nèi)部督導(dǎo)聘用合同范例
- 原材料下浮合同范本
- 培訓(xùn)機(jī)構(gòu)客戶合同范例
- 保姆解雇合同范例
- 5《這些事我來(lái)做》(說(shuō)課稿)-部編版道德與法治四年級(jí)上冊(cè)
- 2025年度高端商務(wù)車輛聘用司機(jī)勞動(dòng)合同模板(專業(yè)版)4篇
- 2025年福建福州市倉(cāng)山區(qū)國(guó)有投資發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年人教版新教材數(shù)學(xué)一年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2025長(zhǎng)江航道工程局招聘101人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年黑龍江哈爾濱市面向社會(huì)招聘社區(qū)工作者1598人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年國(guó)新國(guó)際投資有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年八省聯(lián)考四川高考生物試卷真題答案詳解(精校打印)
- 《供電營(yíng)業(yè)規(guī)則》
- 執(zhí)行總經(jīng)理崗位職責(zé)
評(píng)論
0/150
提交評(píng)論