版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 . . . ;*增量式PID控制算法程序*;T、TD、TI、KP依次從30H,33H,36H,39H開始。;A,B,C的值依次存在BLOCK1,BLOCK2,BLOCK3的地址里; 這里R(k)給的是定值;ORG 0000HBLOCK1 EQU 43H ;A,B ,CBLOCK2 EQU 46HBLOCK3 EQU 49HUK EQU 4CH ;存結果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碼浮點數(shù)MOV RK+1,#12H ;1.25MOV RK+2,#50HMOV 3CH,#01H ;常數(shù)1的BCD碼浮點數(shù)MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常數(shù)2的BCD碼浮點數(shù)MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T的BCD 碼浮點數(shù)MOV 31H,#23H ;2.34MOV 32H,#40HMOV 33H,#01H ;Td的BCD碼浮點數(shù)MOV 34H,#35H ;3.54MOV 35H,#4
3、0HMOV 36H,#01H ;Ti的BCD碼浮點數(shù)MOV 37H,#11H ;1.12MOV 38H,#20HMOV 39H,#01H ;Kp的BCD碼浮點數(shù)MOV 3AH,#12H ;1.25MOV 3BH,#50HMOV R0,#RK ;指向BCD碼浮點操作數(shù)LCALL BTOF ;將其轉換成二進制浮點操作數(shù)MOV R0,#3CHLCALL BTOFMOV R0,#40HLCALL BTOFMOV R0,#39HLCALL BTOFMOV R0,#36H ;指向BCD碼浮點操作數(shù)TiLCALL BTOF ;將其轉換成二進制浮點操作數(shù)MOV R0,#33H ;指向BCD碼浮點操作數(shù)TdLC
4、ALL BTOF ;將其轉換成二進制浮點操作數(shù)MOV R0,#30H ;指向BCD碼浮點操作數(shù)TLCALL BTOF ;將其轉換成二進制浮點操作數(shù)MOV R1, #BUFF1 ;保存30H中的值 即T值LCALL FMOVR0MOV R1, #36H ;計算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 ;將結果保存在BLOCK1中LCALL FMOVR0MOV R1,#BUFF1 ;30H恢復原值MOV R0,#30HLCALL FMOVMOV R1,#BUFF ;33H恢復原值MOV R0,#33HLCALL FMOVMOV R0,#40H ;計算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 ;計算C的值Kp.Td/TMOV R1,#33HLCALL FMULMOV R1,#30HLCALL FDIVMOV R1,#BLOCK3 ;保存C值到BLOCK3中LCALL FMOVR0MOV R0,#EK1 ;將EK1,EK2設初值0LCALL FCLRMOV R0,#EK2LCALL FCLRMOV REC,#03H ;設置采樣次數(shù)LOOP: MOV CK,#7eH ;采樣數(shù)據(jù)暫時給了一個定值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 ;計算R(k)-C(k)的值送給E(k)MOV R1,#EKLCALL FMOVR0MOV R1,#BUFF ;恢復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 ;恢復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 ;恢復C釋放BUFFLCALL FMOVMOV R0,#BLOCK1 ;A.E(k)MOV R1,#BUFFLCALL FMOVR0MOV R1,#EKLCALL FMULMOV R1,#BUFF1 ;計算Uk值A.E(k)-B.E(k-1)+C.E(k-2)LCALL FSUBMOV R1,#BUFF2LCALL FADDMOV R1,#UK ;保存結果到UK中LCALL FMOVR0MOV R1,#BUFF ;恢復A 釋放BU
9、FFLCALL FMOVMOV R0,#UK ;UK轉換成BCD碼浮點數(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 ;等待采樣時刻DJNZ REC,NEXT1SJMP $NEXT1: LJMP LOOPDELAY: MOV R7,#02HDELAY1: MOV R6,#0FFHDELAY2: DJNZ R6,DELAY2DJNZ R7,DELAY1RET; () 標號:FSDT 功能:浮點數(shù)格式
10、化;入口條件:待格式化浮點操作數(shù)在R0中。;出口信息:已格式化浮點操作數(shù)仍在R0中。;影響資源:PSW、A、R2、R3、R4、位1FH 堆棧需求: 字節(jié)FSDT: LCALL MVR0 ;將待格式化操作數(shù)傳送到第一工作區(qū)中LCALL RLN ;通過左規(guī)完成格式化LJMP MOV0 ;將已格式化浮點操作數(shù)傳回到R0中; () 標號: FADD 功能:浮點數(shù)加法;入口條件:被加數(shù)在R0中,加數(shù)在R1中。;出口信息:OV=0時,和仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求: 字節(jié)FADD: CLR F0 ;設立加法標志SJMP AS ;計算代數(shù)和;
11、 () 標號: FSUB 功能:浮點數(shù)減法;入口條件:被減數(shù)在R0中,減數(shù)在R1中。;出口信息:OV=0時,差仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求:字節(jié)FSUB: SETB F0 ;設立減法標志AS: LCALL MVR1 ;計算代數(shù)和。先將R1傳送到第二工作區(qū)MOV C,F0 ;用加減標志來校正第二操作數(shù)的有效符號CLR A ; *?應加的一條語句RRC AXRL A,R1MOV C,ACC.7ASN: MOV 1EH,C ;將第二操作數(shù)的有效符號存入位1EH中XRL A,R0 ;與第一操作數(shù)的符號比較RLC AMOV F0,C ;保
12、存比較結果LCALL MVR0 ;將R0傳送到第一工作區(qū)中LCALL AS1 ;在工作寄存器中完成代數(shù)運算MOV0: INC R0 ;將結果傳回到R0中的子程序入口INC R0MOV A,R4 ;傳回尾數(shù)的低字節(jié)MOV R0,ADEC R0MOV A,R3 ;傳回尾數(shù)的高字節(jié)MOV R0,ADEC R0MOV A,R2 ;取結果的階碼MOV C,1FH ;取結果的數(shù)符MOV ACC.7,C ;拼入階碼中MOV R0,ACLR ACC.7 ;不考慮數(shù)符CLR OV ;清除溢出標志CJNE A,#3FH,MV01;階碼是否上溢? * 應為#40HSETB OV ;設立溢出標志MV01: MOV A
13、,R0 ;取出帶數(shù)符的階碼RETMVR0: MOV A,R0 ;將R0傳送到第一工作區(qū)中的子程序MOV C,ACC.7 ;將數(shù)符保存在位1FH中MOV 1FH,CMOV C,ACC.6 ;將階碼擴充為8bit補碼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 ;恢復數(shù)據(jù)指針DEC R0RETMVR1: MOV A,R1 ;將R1傳送到第二工作區(qū)中的子程序MOV C,ACC.7 ;將數(shù)符保存在位1EH中MOV 1EH,CMOV C
14、,ACC.6 ;將階碼擴充為8bit補碼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 ;恢復數(shù)據(jù)指針DEC R1RETAS1: MOV A,R6 ;讀取第二操作數(shù)尾數(shù)高字節(jié)ORL A,R7JZ AS2 ;第二操作數(shù)為零,不必運算MOV A,R3 ;讀取第一操作數(shù)尾數(shù)高字節(jié)ORL A,R4JNZ EQMOV A,R6 ;第一操作數(shù)為零,結果以第二操作數(shù)為準MOV R3,AMOV A,R7MOV R4,AMOV A,R5MOV R2,
15、AMOV C,1EHMOV 1FH,CAS2: RETEQ: MOV A,R2 ;對階,比較兩個操作數(shù)的階碼XRL A,R5JZ AS4 ;階碼一樣,對階結束 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ù)對階MOV A,R2 ;尾數(shù)為零,提前結束對階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ù)對階MOV A,R5 ;尾數(shù)為零,提前結束對階MOV R2,AAS4: F0,AS5 ;尾數(shù)加減判斷MOV A,R4 ;尾數(shù)相加ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,AJNC AS2LJMP RR1 ;有進位,右規(guī)一次AS5: CLR C ;比較絕對值大小MOV A,R4SUBB A,R7MOV B,AMOV A,R3SUBB A,R6JC AS6MOV R4,B
17、 ;第一尾數(shù)減第二尾數(shù)MOV R3,ALJMP RLN ;結果規(guī)格化AS6: CPL 1FH ;結果的符號與第一操作數(shù)相反CLR C ;結果的絕對值為第二尾數(shù)減第一尾數(shù)MOV A,R7SUBB A,R4MOV R4,AMOV A,R6SUBB A,R3MOV R3,ARLN: MOV A,R3 ;浮點數(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ī)格化結束RETRL1:
18、 MOV A,R4 ;第一操作數(shù)左規(guī)一次RLC A ;尾數(shù)擴大一倍MOV R4,AMOV A,R3RLC AMOV R3,ADEC R2 ;階碼減一CJNE R2,#0BFH,RL1E;階碼下溢否?;CLR AMOV R3,A ;階碼下溢,操作數(shù)以零計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 ;清溢出標志CJNE R2,#40H,RR1E;階碼上溢否?MOV R2,#3FH ;階碼溢出SETB
19、 OVRR1E: RET; (4) 標號:FMUL 功能:浮點數(shù)乘法;入口條件:被乘數(shù)在R0中,乘數(shù)在R1中。;出口信息:OV=0時,積仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求:6字節(jié)FMUL: LCALL MVR0 ;將R0傳送到第一工作區(qū)中MOV A,R0XRL A,R1 ;比較兩個操作數(shù)的符號RLC AMOV 1FH,C ;保存積的符號LCALL MUL0 ;計算積的絕對值LJMP MOV0 ;將結果傳回到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 ;計算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 ;階碼上溢,設立標志SETB OVRETMUL4: ACC.6,MUL6MUL5: CLR A ;結果清零(因子為零或階碼下溢)MOV R3,AMOV R4,AMOV R2
22、,#41HMUL6: CLR OVRET; (5) 標號:FDIV 功能:浮點數(shù)除法;入口條件:被除數(shù)在R0中,除數(shù)在R1中。;出口信息:OV=0時,商仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH 堆棧需求: 字節(jié)FDIV: INC R0MOV A,R0INC R0ORL A,R0DEC R0DEC R0JNZ DIV1MOV R0,#41H;被除數(shù)為零,不必運算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 ;比較兩個操作數(shù)的符號RLC AMOV 1FH,C ;保存結果的符號LCALL MVR1 ;將R1傳送到第二工作區(qū)中LCALL DIV3 ;調用工作區(qū)浮點除法LJMP MOV0 ;回傳結果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 ;清零并保護之PUSH ACCCLR AXCH A,R1PUSH ACCMOV A,R2PUSH A
24、CCMOV B,#10H ;除法運算,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 ;將結果存回R3R4MOV R4
25、,ACLR AADDC A,R0MOV R3,APOP ACC ;恢復R0R1R2MOV R2,APOP ACCMOV R1,APOP ACCMOV R0,AMOV A,R2 ;計算商的階碼CLR CSUBB A,R5LCALL MD ;階碼檢驗LJMP RLN ;規(guī)格化; (6) 標號: FCLR功能:浮點數(shù)清零;入口條件:操作數(shù)在R0中。;出口信息:操作數(shù)被清零。;影響資源:A 堆棧需求: 字節(jié)FCLR: INC R0INC R0CLR AMOV R0,ADEC R0MOV R0,ADEC R0MOV R0,#41HRET; (7) 標號:FZER 功能:浮點數(shù)判零;入口條件:操作數(shù)在R0
26、中。;出口信息:若累加器A為零,則操作數(shù)R0為零,否則不為零。;影響資源:A 堆棧需求: 字節(jié)FZER: INC R0INC R0MOV A,R0DEC R0ORL A,R0DEC R0JNZ ZEROMOV R0,#41HZERO: RET; (8) 標號:FMOV 功能:浮點數(shù)傳送;入口條件:源操作數(shù)在R1中,目標地址為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) 標號: FMOV R0 功能:浮點數(shù)傳送;入口條件:源操作數(shù)在R0中,目標地址為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) 標號:DTOF 功能:雙字節(jié)十六進制定點數(shù)轉換成格式化浮點數(shù);入口條件:雙字節(jié)定點數(shù)的絕對值在R0中,數(shù)符在位1FH中,整數(shù)部分的位數(shù)在A中。;出口信息:轉換成格式化浮點數(shù)在R0中(三字節(jié))。;影
28、響資源:PSW、A、R2、R3、R4、位1FH 堆棧需求: 字節(jié)DTOF: MOV R2,A ;按整數(shù)的位數(shù)初始化階碼MOV A,R0 ;將定點數(shù)作尾數(shù)MOV R3,AINC R0MOV A,R0MOV R4,ADEC R0LCALL RLN ;進行規(guī)格化LJMP MOV0 ;傳送結果到R0中; (25) 標號: FTOD 功能:格式化浮點數(shù)轉換成雙字節(jié)定點數(shù);入口條件:格式化浮點操作數(shù)在R0中。;出口信息:OV=1時溢出,OV=0時轉換成功:定點數(shù)的絕對值在R0中(雙字節(jié)),數(shù)符;在位1FH中,F(xiàn)0=1 時為整數(shù),CY=1時為一字節(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;階碼為負,純小數(shù)SETB CSUBB A,#10HJC FTD1SETB OV ;階碼大于,溢出RETFTD1: SETB CMOV A,R2SUBB A,#8 ;階碼大于否?JC FTD3FTD2: MOV B,#10H ;階碼大于,按雙字節(jié)整數(shù)轉換LCALL FTD8SETB F0 ;設立雙字節(jié)整數(shù)標志CLR CCLR OVRETFTD3: MOV B,#8 ;按一字節(jié)整數(shù)一字節(jié)小數(shù)轉換LCALL FTD8SETB C
30、 ; 設立一字節(jié)整數(shù)一字節(jié)小數(shù)標志CLR F0CLR OVRETFTD4: MOV B,#0 ;按純小數(shù)轉換LCALL FTD8CLR OV ;設立純小數(shù)標志CLR F0CLR CRETFTD8: MOV A,R2 ;按規(guī)定的整數(shù)位數(shù)進行右規(guī)*階碼是擴展后的值CJNE A,B,FTD9MOV A,R3 ;將雙字節(jié)結果傳送到R0中MOV R0,AINC R0MOV A,R4MOV R0,ADEC R0RETFTD9: CLR CLCALL RR1 ;右規(guī)一次SJMP FTD8; (26) 標號:BTOF功能:浮點BCD碼轉換成格式化浮點數(shù);入口條件:浮點BCD碼操作數(shù)在R0中。;出口信息:轉換成
31、的格式化浮點數(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;為零,轉換結束。RETBTF0: MOV A,R0MOV C,ACC.7MOV 1DH,C ;保存數(shù)符。CLR 1FH ;以絕對值進行轉換。MOV C,ACC.6 ;擴充階碼為八位。MOV ACC.7,CMOV R0,AJNC BTF1ADD A,#19 ;是否小于?JC BTF2MOV R0,#41H ;
32、小于時以計。INC R0MOV R0,#0INC R0MOV R0,#0DEC R0DEC R0RETBTF1: SUBB A,#19JC BTF2MOV A,#3FH ;大于時封頂。MOV C,1DHMOV ACC.7,CMOV R0,AINC R0MOV R0,#0FFHINC R0MOV R0,#0FFHDEC R0DEC R0RETBTF2: CLR A ;準備將BCD碼尾數(shù)轉換成十六進制浮點數(shù)。MOV R4,AMOV R3,AMOV R2,#10H ;至少兩個字節(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 ; *有進位右規(guī)一次INC R2BTF4: MOV DPTR,#BTFL;準備查表得到十進制階碼對應的浮點數(shù)。MOV A,R0ADD A,#19 ;計算表格偏移量。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 ;將階碼對應的浮點數(shù)和尾數(shù)對應的浮點數(shù)相乘。MOV C,1DH ;取出數(shù)符。MOV 1FH,CLJMP MOV0 ;傳送轉換結果。; (27) 標號: 功能:格式化浮點數(shù)轉換成浮點碼;入口條件:格式化浮點操作數(shù)在R0中。;出口信息:轉換成的浮點碼仍在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;絕對值大于或等于時的查表起點。MOV B,#0 ;十的次冪。MOV A,R2JNB ACC.7,FTB1MOV DPTR,#BTFL;絕對值小于時的查表起點。MOV B,#0EDH ;十的次冪。ADD A,#16JNC FTB1MOV DPTR,#BFLN;絕對值大于或等于時的查表起點。MOV B,#0FAH ;十的
36、次冪。FTB1: CLR A ;查表,找到一個比待轉換浮點數(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 ;和待轉換浮點數(shù)比較。CLR CSUBB A,R2 ACC.7,FTB2;差為負數(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 ;傳送轉換結果。FTB2: INC DPTR ;準備表格下一項。INC DPTRINC DPTRINC B ;冪加一。SJMP FTB1 ;FTB3: PUSH B ;保存冪值。LCALL DIV3 ;相除,得到一個二進制浮點數(shù)的純小數(shù)。FTB4: MOV A,R2 ;取階碼。JZ FTB5 ;為零嗎?CLR C ;LCALL RR1 ;右規(guī)。SJMP FTB4FTB5: POP ACC ;取出冪值。MOV R5,A ;作為十進制浮點數(shù)的階碼。LCALL HB2 ;轉換尾數(shù)的十分位和百分位。MOV R6,ALCALL HB2 ;轉換尾數(shù)的千分位和萬分位。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 ;存放轉換結果。INC R0MOV A,R7MOV R0,ADEC R0MOV A,R6MO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國汽車經(jīng)銷行業(yè)開拓第二增長曲線戰(zhàn)略制定與實施研究報告
- 自動排序上料工作原理解析
- 關于大學校園真善美的調查
- 2025年中國海島旅游行業(yè)發(fā)展趨勢預測及投資戰(zhàn)略咨詢報告
- 蛹蟲草產業(yè)化項目可行性研究報告建議書
- 春節(jié)購房盛宴
- 年產2000萬米汽車密封條生產線技術升級改造項目可行性研究報告寫作模板-備案審批
- 二零二五年度房產購置專項貸款服務合同3篇
- 有機食品知識培訓課件
- 2025年度數(shù)據(jù)中心EMC合同能源管理項目合同2篇
- 陜西2020-2024年中考英語五年真題匯編學生版-專題09 閱讀七選五
- 多源數(shù)據(jù)融合平臺建設方案
- 2023-2024學年上海市普陀區(qū)三年級(上)期末數(shù)學試卷
- 居家養(yǎng)老上門服務投標文件
- 浙江省寧波市鄞州區(qū)2024年七年級上學期期末數(shù)學試題【含答案】
- 浙江省杭州市錢塘區(qū)2023-2024學年四年級上學期語文期末試卷
- 《聞泰科技并購安世半導體的風險應對案例探析》8200字(論文)
- 肝斷面引流管護理
- GB/T 44713-2024節(jié)地生態(tài)安葬服務指南
- 2024年形勢與政策 第一講《讀懂中國式現(xiàn)代化》
- 小班班本課程《吃飯這件小事》
評論
0/150
提交評論