⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51.lst

📁 单片机定点运算子程序库
💻 LST
📖 第 1 页 / 共 5 页
字号:
021D EF              579             MOV     A,R7     ;取原被开方数的左规次数
021E 6009            580             JZ      SQRE     ;未左规,开方结束
0220 C3              581     SQR9:   CLR     C        ;按左规次数右移平方根,得到实际根
0221 EA              582             MOV     A,R2
0222 13              583             RRC     A
0223 FA              584             MOV     R2,A
0224 EB              585             MOV     A,R3
0225 13              586             RRC     A
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE    10

0226 FB              587             MOV     R3,A
0227 DFF7            588             DJNZ    R7,SQR9
0229 22              589     SQRE:   RET
                     590     
                     591     
                     592     ;(14)标号:HASC 功能:单字节十六进制数转换成双字节ASCII码
                     593     
                     594     ;入口条件:待转换的单字节十六进制数在累加器A中。
                     595     ;出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。
                     596     ;影响资源:PSW、A、B    堆栈需求:  4字节
                     597     
022A F5F0            598     HASC:   MOV     B,A     ;暂存待转换的单字节十六进制数
022C 120232          599             LCALL   HAS1    ;转换低四位
022F C5F0            600             XCH     A,B     ;存放低四位的ASCII码
0231 C4              601             SWAP    A       ;准备转换高四位
0232 540F            602     HAS1:   ANL     A,#0FH  ;将累加器的低四位转换成ASCII码
0234 2490            603             ADD     A,#90H
0236 D4              604             DA      A
0237 3440            605             ADDC    A,#40H
0239 D4              606             DA      A
023A 22              607             RET
                     608     
                     609     
                     610     ;(15)标号:ASCH  功能:ASCII码转换成十六进制数
                     611     
                     612     ;入口条件:待转换的ASCII码(30H~39H或41H~46H)在A中。
                     613     ;出口信息:转换后的十六进制数(00H~0FH)仍在累加器A中。
                     614     ;影响资源:PSW、A    堆栈需求:  2字节
                     615     
023B C3              616     ASCH:   CLR     C
023C 9430            617             SUBB    A,#30H
023E 30E402          618             JNB     ACC.4,ASH1
0241 9407            619             SUBB    A,#7
0243 22              620     ASH1:   RET
                     621     
                     622     ;(16)标号: HBCD 功能:单字节十六进制整数转换成单字节BCD码整数
                     623     
                     624     ;入口条件:待转换的单字节十六进制整数在累加器A中。
                     625     ;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
                     626     ;影响资源:PSW、A、B、R3    堆栈需求:  2字节
                     627     
0244 75F064          628     HBCD:   MOV     B,#100  ;分离出百位,存放在R3中
0247 84              629             DIV     AB
0248 FB              630             MOV     R3,A
0249 740A            631             MOV     A,#10   ;余数继续分离十位和个位
024B C5F0            632             XCH     A,B
024D 84              633             DIV     AB
024E C4              634             SWAP    A       ;;将ACC.7-3与ACC.4-0交换
024F 45F0            635             ORL     A,B     ;将十位和个位拼装成BCD码
0251 22              636             RET
                     637     
                     638     ;(17)标号:HB2 功能:双字节十六进制整数转换成双字节BCD码整数
                     639     
                     640     ;入口条件:待转换的双字节十六进制整数在R6、R7中。
                     641     ;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
                     642     ;影响资源:PSW、A、R2~R7    堆栈需求:  2字节
                     643     
0252 E4              644     HB2:    CLR     A       ;BCD码初始化
0253 FB              645             MOV     R3,A
0254 FC              646             MOV     R4,A
0255 FD              647             MOV     R5,A
0256 7A10            648             MOV     R2,#10H ;转换双字节十六进制整数
0258 EF              649     HB3:    MOV     A,R7    ;从高端移出待转换数的一位到CY中
0259 33              650             RLC     A
025A FF              651             MOV     R7,A
025B EE              652             MOV     A,R6
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE    11

025C 33              653             RLC     A
025D FE              654             MOV     R6,A
025E ED              655             MOV     A,R5    ;BCD码带进位自身相加,相当于乘2
025F 3D              656             ADDC    A,R5
0260 D4              657             DA      A       ;十进制调整
0261 FD              658             MOV     R5,A
0262 EC              659             MOV     A,R4
0263 3C              660             ADDC    A,R4
0264 D4              661             DA      A
0265 FC              662             MOV     R4,A
0266 EB              663             MOV     A,R3
0267 3B              664             ADDC    A,R3
0268 FB              665             MOV     R3,A    ;双字节十六进制数的万位数不超过6,不用调整
0269 DAED            666             DJNZ    R2,HB3  ;处理完16bit
                     667     
026B 22              668             RET
                     669     
                     670     ;(18)标号:HBD 功能:单字节十六进制小数转换成单字节BCD码小数
                     671     
                     672     ;入口条件:待转换的单字节十六进制小数在累加器A中。
                     673     ;出口信息:CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
                     674     ;影响资源:PSW、A、B    堆栈需求:  2字节
                     675     
026C 75F064          676     HBD:    MOV     B,#100  ;原小数扩大一百倍
026F A4              677             MUL     AB
0270 33              678             RLC     A       ;余数部分四舍五入
0271 E4              679             CLR     A
0272 35F0            680             ADDC    A,B
0274 75F00A          681             MOV     B,#10   ;分离出十分位和百分位
0277 84              682             DIV     AB
0278 C4              683             SWAP    A
0279 25F0            684             ADD     A,B     ;拼装成单字节BCD码小数
027B D4              685             DA      A       ;调整后若有进位,原小数接近整数1
027C 22              686             RET
                     687     
                     688     ;(19)标号:HBD2 功能:双字节十六进制小数转换成双字节BCD码小数
                     689     
                     690     ;入口条件:待转换的双字节十六进制小数在R2、R3中。
                     691     ;出口信息:转换后的双字节BCD码小数仍在R2、R3中。
                     692     ;影响资源:PSW、A、B、R2、R3、R4、R5    堆栈需求:  6字节
                     693     
027D 7C04            694     HBD2:   MOV     R4,#4   ;四位十进制码
027F EB              695     HBD3:   MOV     A,R3    ;原小数扩大十倍
0280 75F00A          696             MOV     B,#10
0283 A4              697             MUL     AB
0284 FB              698             MOV     R3,A
0285 ADF0            699             MOV     R5,B
0287 EA              700             MOV     A,R2
0288 75F00A          701             MOV     B,#10
028B A4              702             MUL     AB
028C 2D              703             ADD     A,R5
028D FA              704             MOV     R2,A
028E E4              705             CLR     A
028F 35F0            706             ADDC    A,B
0291 C0E0            707             PUSH    ACC     ;保存溢出的一位十进制码
                     708     
0293 DCEA            709             DJNZ    R4,HBD3 ;计算完四位十进制码
0295 D0E0            710             POP     ACC     ;取出万分位
0297 FB              711             MOV     R3,A
0298 D0E0            712             POP     ACC     ;取出千分位
029A C4              713             SWAP    A
029B 4B              714             ORL     A,R3    ;拼装成低字节BCD码小数
029C FB              715             MOV     R3,A
029D D0E0            716             POP     ACC     ;取出百分位
029F FA              717             MOV     R2,A
02A0 D0E0            718             POP     ACC     ;取出十分位
A51 MACRO ASSEMBLER  51                                                                   06/29/2007 15:34:54 PAGE    12

02A2 C4              719             SWAP    A
02A3 4A              720             ORL     A,R2    ;拼装成高字节BCD码小数
02A4 FA              721             MOV     R2,A
02A5 22              722             RET
                     723     
                     724     ;(20)标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数
                     725     
                     726     ;入口条件:待转换的单字节BCD码整数在累加器A中。
                     727     ;出口信息:转换后的单字节十六进制整数仍在累加器A中。
                     728     
                     729     ;影响资源:PSW、A、B、R4   堆栈需求: 2字节
                     730     
02A6 75F010          731     BCDH:   MOV     B,#10H   ;分离十位和个位
02A9 84              732             DIV     AB
02AA ACF0            733             MOV     R4,B     ;暂存个位
02AC 75F00A          734             MOV     B,#10    ;将十位转换成十六进制
02AF A4              735             MUL     AB
02B0 2C              736             ADD     A,R4     ;按十六进制加上个位
02B1 22              737             RET
                     738     
                     739     ;(21)标号:BH2 功能:双字节BCD码整数转换成双字节十六进制整数
                     740     
                     741     ;入口条件:待转换的双字节BCD码整数在R2、R3中。
                     742     ;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
                     743     ;影响资源:PSW、A、B、R2、R3、R4    堆栈需求:  4字节
                     744     
02B2 EB              745     BH2:    MOV     A,R3    ;将低字节转换成十六进制
02B3 1202A6          746             LCALL   BCDH
02B6 FB              747             MOV     R3,A
02B7 EA              748             MOV     A,R2    ;将高字节转换成十六进制
02B8 1202A6          749             LCALL   BCDH
02BB 75F064          750             MOV     B,#100  ;扩大一百倍
02BE A4              751             MUL     AB
02BF 2B              752             ADD     A,R3    ;和低字节按十六进制相加
02C0 FB              753             MOV     R3,A
02C1 E4              754             CLR     A
02C2 35F0            755             ADDC    A,B
02C4 FA              756             MOV     R2,A
02C5 22              757             RET
                     758     
                     759     ;(22)标号:BHD 功能:单字节BCD码小数转换成单字节十六进制小数
                     760     
                     761     ;入口条件:待转换的单字节BCD码数在累加器A中。
                     762     ;出口信息:转换后的单字节十六进制小数仍在累加器A中。
                     763     ;影响资源:PSW、A、R2、R3    堆栈需求:  2字节
                     764     
02C6 7A08            765     BHD:    MOV     R2,#8    ;准备计算一个字节小数
                     766     
02C8 25E0            767     BHD0:   ADD     A,ACC    ;按十进制倍增
02CA D4              768             DA      A
02CB CB              769             XCH     A,R3
02CC 33              770             RLC     A        ;将进位标志移入结果中
02CD CB              771             XCH     A,R3
02CE DAF8            772             DJNZ    R2,BHD0  ;共计算8bit小数
02D0 24B0            773             ADD     A,#0B0H  ;剩余部分达到0.50否?

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -