mcs-51单片机实用子程序库3

上传人:wm****3 文档编号:43364775 上传时间:2018-06-05 格式:DOC 页数:14 大小:18.28KB
返回 下载 相关 举报
mcs-51单片机实用子程序库3_第1页
第1页 / 共14页
mcs-51单片机实用子程序库3_第2页
第2页 / 共14页
mcs-51单片机实用子程序库3_第3页
第3页 / 共14页
mcs-51单片机实用子程序库3_第4页
第4页 / 共14页
mcs-51单片机实用子程序库3_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《mcs-51单片机实用子程序库3》由会员分享,可在线阅读,更多相关《mcs-51单片机实用子程序库3(14页珍藏版)》请在金锄头文库上搜索。

1、MCS-51MCS-51 单片机实用子程序库单片机实用子程序库 3 3MCS-51 单片机实用子程序库(三)MCS-51 单片机实用子程序库 ()标号: 功能:双字节码小数转换成双字节十六进制小数入口条件:待转换的双字节码小数在 R4、R5 中。出口信息:转换后的双字节十六进制小数在 R2、R3 中。*影响资源:PSW、A、R2R6 堆栈需求: 字节BHD2: MOV R6,#10H ;准备计算两个字节小数BHD3: MOV A,R5 ;按十进制倍增ADD A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3 ;将进位标志移入结果中RLC

2、AMOV R3,AMOV A,R2RLC AMOV R2,ADJNZ R6,BHD3 ;共计算小数MOV A,R4ADD A,#0B0H ;剩余部分达到否?JNC BHD4 ;四舍INC R3 ;五入MOV A,R3JNZ BHD4INC R2BHD4: RET() 标号: 功能:求单字节十六进制无符号数据块的极值入口条件:数据块的首址在 DPTR 中,数据个数在 R7 中。出口信息:最大值在 R6 中,地址在 R2R3 中;最小值在 R7 中,地址在 R4R5 中。影响资源:PSW、A、B、R1R7 堆栈需求: 字节MM: MOV B,R7 ;保存数据个数MOVX A,DPTR ;读取第一个

3、数据MOV R6,A ;作为最大值的初始值MOV R7,A ;也作为最小值的初始值MOV A,DPL ;取第一个数据的地址MOV R3,A ;作为最大值存放地址的初始值MOV R5,A ;也作为最小值存放地址的初始值MOV A,DPHMOV R2,AMOV R4,AMOV A,B ;取数据个数DEC A ;减一,得到需要比较的次数JZ MME ;只有一个数据,不需要比较MOV R1,A ;保存比较次数PUSH DPL ;保护数据块的首址PUSH DPHMM1: INC DPTR ;指向一个新的数据MOVX A,DPTR ;读取这个数据MOV B,A ;保存SETB C ;与最大值比较SUBB

4、A,R6JC MM2 ;不超过当前最大值,保持当前最大值MOV R6,B ;超过当前最大值,更新最大值存放地址MOV R2,DPH ;同时更新最大值存放地址MOV R3,DPLSJMP MM3MM2: MOV A,B ;与最小值比较CLR CSUBB A,R7JNC MM3 ;大于或等于当前最小值,保持当前最小值MOV R7,B ;更新最小值MOV R4,DPH ;更新最小值存放地址MOV R5,DPLMM3: DJNZ R1,MM1 ;处理完全部数据POP DPH ;恢复数据首址POP DPLMME: RET() 标号: 功能:求单字节十六进制有符号数据块的极值入口条件:数据块的首址在 DP

5、TR 中,数据个数在 R7 中。出口信息:最大值在 R6 中, 地址在 R2R3 中;最小值在 R7 中,地址在 R4R5 中。影响资源:PSW、A、B、R1R7 堆栈需求: 字节MMS: MOV B,R7 ;保存数据个数MOVX A,DPTR ;读取第一个数据MOV R6,A ;作为最大值的初始值MOV R7,A ;也作为最小值的初始值MOV A,DPL ;取第一个数据的地址MOV R3,A ;作为最大值存放地址的初始值MOV R5,A ;也作为最小值存放地址的初始值MOV A,DPHMOV R2,AMOV R4,AMOV A,B ;取数据个数DEC A ;减一,得到需要比较的次数JZ MM

6、SE ;只有一个数据,不需要比较MOV R1,A ;保存比较次数PUSH DPL ;保护数据块的首址PUSH DPHMMS1: INC DPTR ;调整数据指针MOVX A,DPTR ;读取一个数据MOV B,A ;保存SETB C ;与最大值比较SUBB A,R6JZ MMS4 ;相同,不更新最大值JNB OV,MMS2 ;差未溢出,符号位有效CPL ACC.7 ;差溢出,符号位取反MMS2: JB ACC.7,MMS4;差为负,不更新最大值MOV R6,B ;更新最大值MOV R2,DPH ;更新最大值存放地址MOV R3,DPLSJMP MMS7MMS4: MOV A,B ;与最小值比较

7、CLR CSUBB A,R7JNB OV,MMS6 ;差未溢出,符号位有效CPL ACC.7 ;差溢出,符号位取反MMS6: JNB ACC.7,MMS7;差为正,不更新最小值MOV R7,B ;更新最小值MOV R4,DPH ;更新最小值存放地址MOV R5,DPLMMS7: DJNZ R1,MMS1 ;处理完全部数据POP DPH ;恢复数据首址POP DPLMMSE: RET() 标号: 功能:顺序查找()单字节表格入口条件:待查找的内容在 A 中,表格首址在 DPTR 中,表格的字节数在 R7 中。出口信息:OV=0 时,顺序号在累加器 A 中;OV=1 时,未找到。影响资源:PSW、

8、A、B、R2、R6 堆栈需求: 字节FDS1: MOV B,A ;保存待查找的内容MOV R2,#0 ;顺序号初始化(指向表首)MOV A,R7 ;保存表格的长度MOV R6,AFD11: MOV A,R2 ;按顺序号读取表格内容MOVC A,A+DPTRCJNE A,B,FD12;与待查找的内容比较CLR OV ;相同,查找成功MOV A,R2 ;取对应的顺序号RETFD12: INC R2 ;指向表格中的下一个内容DJNZ R6,FD11 ;查完全部表格内容SETB OV ;未查找到,失败RET() 标号: 功能:顺序查找()双字节表格入口条件:查找内容在 R4、R5 中,表格首址在 DP

9、TR 中,数据总个数在 R7 中。出口信息:OV=0 时顺序号在累加器 A 中,地址在 DPTR 中;OV=1 时未找到。影响资源:PSW、A、R2、R6、DPTR 堆栈需求: 字节FDS2: MOV A,R7 ;保存表格中数据的个数MOV R6,AMOV R2,#0 ;顺序号初始化(指向表首)FD21: CLR A ;读取表格内容的高字节MOVC A,A+DPTRXRL A,R4 ;与待查找内容的高字节比较JNZ FD22MOV A,#1 ;读取表格内容的低字节MOVC A,A+DPTRXRL A,R5 ;与待查找内容的低字节比较JNZ FD22CLR OV ;相同,查找成功MOV A,R2

10、 ;取对应的顺序号RETFD22: INC DPTR ;指向下一个数据INC DPTRINC R2 ;顺序号加一DJNZ R6,FD21 ;查完全部数据SETB OV ;未查找到,失败RET() 标号: 功能:对分查找()单字节无符号增序数据表格入口条件:待查找的内容在累加器 A 中,表格首址在 DPTR 中,字节数在 R7 中。出口信息:OV=0 时,顺序号在累加器 A 中;OV=1 时,未找到。影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 字节FDD1: MOV B,A ;保存待查找的内容MOV R2,#0 ;区间低端指针初始化(指向第一个数据)MOV A,R7DEC AMOV

11、R3,A ;区间高端指针初始化(指向最后一个数据)FD61: CLR C ;判断区间大小MOV A,R3SUBB A,R2JC FD69 ;区间消失,查找失败RRC A ;取区间大小的一半ADD A,R2 ;加上区间的低端MOV R4,A ;得到区间的中心MOVC A,A+DPTR;读取该点的内容CJNE A,B,FD65;与待查找的内容比较CLR OV ;相同,查找成功MOV A,R4 ;取顺序号RETFD65: JC FD68 ;该点的内容比待查找的内容大否?MOV A,R4 ;偏大,取该点位置DEC A ;减一MOV R3,A ;作为新的区间高端SJMP FD61 ;继续查找FD68:

12、MOV A,R4 ;偏小,取该点位置INC A ;加一MOV R2,A ;作为新的区间低端SJMP FD61 ;继续查找FD69: SETB OV ;查找失败RET() 标号: 功能:对分查找()双字节无符号增序数据表格入口条件:查找内容在 R4、R5 中,表格首址在 DPTR 中,数据个数在 R7 中。出口信息:OV=0 时顺序号在累加器 A 中,址在 DPTR 中;OV=1 时未找到。影响资源:PSW、A、B、R1R7、DPTR 堆栈需求: 字节FDD2: MOV R2,#0 ;区间低端指针初始化(指向第一个数据)MOV A,R7DEC AMOV R3,A ;区间高端指针初始化,指向最后一

13、个数据MOV R6,DPH ;保存表格首址MOV R7,DPLFD81: CLR C ;判断区间大小MOV A,R3SUBB A,R2JC FD89 ;区间消失,查找失败RRC A ;取区间大小的一半ADD A,R2 ;加上区间的低端MOV R1,A ;得到区间的中心MOV DPH,R6CLR C ;计算区间中心的地址RLC AJNC FD82INC DPHFD82: ADD A,R7MOV DPL,AJNC FD83INC DPHFD83: CLR A ;读取该点的内容的高字节MOVC A,A+DPTRMOV B,R4 ;与待查找内容的高字节比较CJNE A,B,FD84;不相同MOV A,

14、#1 ;读取该点的内容的低字节MOVC A,A+DPTRMOV B,R5CJNE A,B,FD84;与待查找内容的低字节比较MOV A,R1 ;取顺序号CLR OV ;查找成功RETFD84: JC FD86 ;该点的内容比待查找的内容大否?MOV A,R1 ;偏大,取该点位置DEC A ;减一MOV R3,A ;作为新的区间高端SJMP FD81 ;继续查找FD86: MOV A,R1 ;偏小,取该点位置INC A ;加一MOV R2,A ;作为新的区间低端SJMP FD81 ;继续查找FD89: MOV DPH,R6 ;相同,恢复首址MOV DPL,R7SETB OV ;查找失败RET()

15、 标号: 功能:求单字节十六进制无符号数据块的平均值入口条件:数据块的首址在 DPTR 中,数据个数在 R7 中。出口信息:平均值在累加器 A 中。影响资源:PSW、A、R2R6 堆栈需求: 字节DDM1: MOV A,R7 ;保存数据个数MOV R2,APUSH DPHPUSH DPLCLR A ;初始化累加和MOV R4,AMOV R5,ADM11: MOVX A,DPTR ;读取一个数据ADD A,R5 ;累加到累加和中MOV R5,AJNC DM12INC R4DM12: INC DPTR ;调整指针DJNZ R2,DM11 ;累加完全部数据LCALL D457 ;求平均值(R4R5R

16、7R3)MOV A,R3 ;取平均值POP DPLPOP DPHRET() 标号: 功能:求双字节十六进制无符号数据块的平均值入口条件:数据块的首址在 DPTR 中,双字节数据总个数在 R7 中。出口信息:平均值在 R4、R5 中。影响资源:PSW、A、R2R6 堆栈需求: 字节DDM2: MOV A,R7 ;保存数据个数MOV R2,A ;初始化数据指针PUSH DPL ;保持首址PUSH DPHCLR A ;初始化累加和MOV R3,AMOV R4,AMOV R5,ADM20: MOVX A,DPTR ;读取一个数据的高字节MOV B,AINC DPTRMOVX A,DPTR ;读取一个数据的低字节INC DPTRADD A,R5 ;累加到累加和中MOV R5,AMOV A,BADDC A,R4MOV R4,AJNC DM21INC R3DM21: DJ

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号