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

📄 i5_5_01_01.htm

📁 用单片机汇编语言写的使用的子程序 包扩浮点书的加减还有 模糊算法
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(27) 标号: FDS2 
功能:顺序查找(ROM)双字节表格</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:查找内容在R4、R5中,表格首址在DPTR中,数据总个数在R7中。</p>

<p ALIGN="JUSTIFY">出口信息:OV=0时顺序号在累加器A中,地址在DPTR中;OV=1时未找到。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、R2、R6、DPTR 堆栈需求: 2字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">FDS2: MOV A,R7 ;保存表格中数据的个数</p>

<p ALIGN="JUSTIFY">MOV R6,A</p>

<p ALIGN="JUSTIFY">MOV R2,#0 ;顺序号初始化(指向表首)</p>

<p ALIGN="JUSTIFY">FD21: CLR A ;读取表格内容的高字节</p>

<p ALIGN="JUSTIFY">MOVC A,@A+DPTR</p>

<p ALIGN="JUSTIFY">XRL A,R4 ;与待查找内容的高字节比较</p>

<p ALIGN="JUSTIFY">JNZ FD22</p>

<p ALIGN="JUSTIFY">MOV A,#1 ;读取表格内容的低字节</p>

<p ALIGN="JUSTIFY">MOVC A,@A+DPTR</p>

<p ALIGN="JUSTIFY">XRL A,R5 ;与待查找内容的低字节比较</p>

<p ALIGN="JUSTIFY">JNZ FD22</p>

<p ALIGN="JUSTIFY">CLR OV ;相同,查找成功</p>

<p ALIGN="JUSTIFY">MOV A,R2 ;取对应的顺序号</p>

<p ALIGN="JUSTIFY">RET </p>

<p ALIGN="JUSTIFY">FD22: INC DPTR ;指向下一个数据</p>

<p ALIGN="JUSTIFY">INC DPTR</p>

<p ALIGN="JUSTIFY">INC R2 ;顺序号加一</p>

<p ALIGN="JUSTIFY">DJNZ R6,FD21 ;查完全部数据</p>

<p ALIGN="JUSTIFY">SETB OV ;未查找到,失败</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(28) 标号:FDD1 
功能:对分查找(ROM)单字节无符号增序数据表格</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:待查找的内容在累加器A中,表格首址在DPTR中,字节数在R7中。</p>

<p ALIGN="JUSTIFY">出口信息:OV=0 时,顺序号在累加器A中;OV=1 
时,未找到。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 2字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">FDD1: MOV B,A ;保存待查找的内容</p>

<p ALIGN="JUSTIFY">MOV R2,#0 ;区间低端指针初始化(指向第一个数据)</p>

<p ALIGN="JUSTIFY">MOV A,R7</p>

<p ALIGN="JUSTIFY">DEC A</p>

<p ALIGN="JUSTIFY">MOV R3,A ;区间高端指针初始化(指向最后一个数据)</p>

<p ALIGN="JUSTIFY">FD61: CLR C ;判断区间大小</p>

<p ALIGN="JUSTIFY">MOV A,R3</p>

<p ALIGN="JUSTIFY">SUBB A,R2</p>

<p ALIGN="JUSTIFY">JC FD69 ;区间消失,查找失败</p>

<p ALIGN="JUSTIFY">RRC A ;取区间大小的一半</p>

<p ALIGN="JUSTIFY">ADD A,R2 ;加上区间的低端</p>

<p ALIGN="JUSTIFY">MOV R4,A ;得到区间的中心</p>

<p ALIGN="JUSTIFY">MOVC A,@A+DPTR;读取该点的内容</p>

<p ALIGN="JUSTIFY">CJNE A,B,FD65;与待查找的内容比较</p>

<p ALIGN="JUSTIFY">CLR OV ;相同,查找成功</p>

<p ALIGN="JUSTIFY">MOV A,R4 ;取顺序号</p>

<p ALIGN="JUSTIFY">RET </p>

<p ALIGN="JUSTIFY">FD65: JC FD68 ;该点的内容比待查找的内容大否?</p>

<p ALIGN="JUSTIFY">MOV A,R4 ;偏大,取该点位置</p>

<p ALIGN="JUSTIFY">DEC A ;减一</p>

<p ALIGN="JUSTIFY">MOV R3,A ;作为新的区间高端</p>

<p ALIGN="JUSTIFY">SJMP FD61 ;继续查找</p>

<p ALIGN="JUSTIFY">FD68: MOV A,R4 ;偏小,取该点位置</p>

<p ALIGN="JUSTIFY">INC A ;加一</p>

<p ALIGN="JUSTIFY">MOV R2,A ;作为新的区间低端</p>

<p ALIGN="JUSTIFY">SJMP FD61 ;继续查找</p>

<p ALIGN="JUSTIFY">FD69: SETB OV ;查找失败</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(29) 标号:FDD2 
功能:对分查找(ROM)双字节无符号增序数据表格</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:查找内容在R4、R5中,表格首址在DPTR中,数据个数在R7中。</p>

<p ALIGN="JUSTIFY">出口信息:OV=0 时顺序号在累加器A中,址在DPTR中;OV=1 
时未找到。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R1~R7、DPTR 堆栈需求: 2字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">FDD2: MOV R2,#0 
;区间低端指针初始化(指向第一个数据)</p>

<p ALIGN="JUSTIFY">MOV A,R7</p>

<p ALIGN="JUSTIFY">DEC A</p>

<p ALIGN="JUSTIFY">MOV R3,A ;区间高端指针初始化,指向最后一个数据</p>

<p ALIGN="JUSTIFY">MOV R6,DPH ;保存表格首址</p>

<p ALIGN="JUSTIFY">MOV R7,DPL</p>

<p ALIGN="JUSTIFY">FD81: CLR C ;判断区间大小</p>

<p ALIGN="JUSTIFY">MOV A,R3</p>

<p ALIGN="JUSTIFY">SUBB A,R2</p>

<p ALIGN="JUSTIFY">JC FD89 ;区间消失,查找失败</p>

<p ALIGN="JUSTIFY">RRC A ;取区间大小的一半</p>

<p ALIGN="JUSTIFY">ADD A,R2 ;加上区间的低端</p>

<p ALIGN="JUSTIFY">MOV R1,A ;得到区间的中心</p>

<p ALIGN="JUSTIFY">MOV DPH,R6</p>

<p ALIGN="JUSTIFY">CLR C ;计算区间中心的地址</p>

<p ALIGN="JUSTIFY">RLC A</p>

<p ALIGN="JUSTIFY">JNC FD82</p>

<p ALIGN="JUSTIFY">INC DPH</p>

<p ALIGN="JUSTIFY">FD82: ADD A,R7</p>

<p ALIGN="JUSTIFY">MOV DPL,A</p>

<p ALIGN="JUSTIFY">JNC FD83</p>

<p ALIGN="JUSTIFY">INC DPH</p>

<p ALIGN="JUSTIFY">FD83: CLR A ;读取该点的内容的高字节</p>

<p ALIGN="JUSTIFY">MOVC A,@A+DPTR</p>

<p ALIGN="JUSTIFY">MOV B,R4 ;与待查找内容的高字节比较</p>

<p ALIGN="JUSTIFY">CJNE A,B,FD84;不相同</p>

<p ALIGN="JUSTIFY">MOV A,#1 ;读取该点的内容的低字节</p>

<p ALIGN="JUSTIFY">MOVC A,@A+DPTR</p>

<p ALIGN="JUSTIFY">MOV B,R5</p>

<p ALIGN="JUSTIFY">CJNE A,B,FD84;与待查找内容的低字节比较</p>

<p ALIGN="JUSTIFY">MOV A,R1 ;取顺序号</p>

<p ALIGN="JUSTIFY">CLR OV ;查找成功</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY">FD84: JC FD86 ;该点的内容比待查找的内容大否?</p>

<p ALIGN="JUSTIFY">MOV A,R1 ;偏大,取该点位置</p>

<p ALIGN="JUSTIFY">DEC A ;减一</p>

<p ALIGN="JUSTIFY">MOV R3,A ;作为新的区间高端</p>

<p ALIGN="JUSTIFY">SJMP FD81 ;继续查找</p>

<p ALIGN="JUSTIFY">FD86: MOV A,R1 ;偏小,取该点位置</p>

<p ALIGN="JUSTIFY">INC A ;加一</p>

<p ALIGN="JUSTIFY">MOV R2,A ;作为新的区间低端</p>

<p ALIGN="JUSTIFY">SJMP FD81 ;继续查找</p>

<p ALIGN="JUSTIFY">FD89: MOV DPH,R6 ;相同,恢复首址</p>

<p ALIGN="JUSTIFY">MOV DPL,R7</p>

<p ALIGN="JUSTIFY">SETB OV ;查找失败</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(30) 标号: DDM1 
功能:求单字节十六进制无符号数据块的平均值</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:数据块的首址在DPTR中,数据个数在R7中。</p>

<p ALIGN="JUSTIFY">出口信息:平均值在累加器A中。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、R2~R6 堆栈需求: 4字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">DDM1: MOV A,R7 ;保存数据个数</p>

<p ALIGN="JUSTIFY">MOV R2,A</p>

<p ALIGN="JUSTIFY">PUSH DPH</p>

<p ALIGN="JUSTIFY">PUSH DPL</p>

<p ALIGN="JUSTIFY">CLR A ;初始化累加和</p>

<p ALIGN="JUSTIFY">MOV R4,A</p>

<p ALIGN="JUSTIFY">MOV R5,A</p>

<p ALIGN="JUSTIFY">DM11: MOVX A,@DPTR ;读取一个数据</p>

<p ALIGN="JUSTIFY">ADD A,R5 ;累加到累加和中</p>

<p ALIGN="JUSTIFY">MOV R5,A</p>

<p ALIGN="JUSTIFY">JNC DM12</p>

<p ALIGN="JUSTIFY">INC R4</p>

<p ALIGN="JUSTIFY">DM12: INC DPTR ;调整指针</p>

<p ALIGN="JUSTIFY">DJNZ R2,DM11 ;累加完全部数据</p>

<p ALIGN="JUSTIFY">LCALL D457 ;求平均值(R4R5/R7-→R3)</p>

<p ALIGN="JUSTIFY">MOV A,R3 ;取平均值</p>

<p ALIGN="JUSTIFY">POP DPL</p>

<p ALIGN="JUSTIFY">POP DPH</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(31) 标号: DDM2 
功能:求双字节十六进制无符号数据块的平均值</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:数据块的首址在DPTR中,双字节数据总个数在R7中。</p>

<p ALIGN="JUSTIFY">出口信息:平均值在R4、R5中。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、R2~R6 堆栈需求: 4字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">DDM2: MOV A,R7 ;保存数据个数</p>

<p ALIGN="JUSTIFY">MOV R2,A ;初始化数据指针</p>

<p ALIGN="JUSTIFY">PUSH DPL ;保持首址</p>

<p ALIGN="JUSTIFY">PUSH DPH</p>

<p ALIGN="JUSTIFY">CLR A ;初始化累加和</p>

<p ALIGN="JUSTIFY">MOV R3,A</p>

<p ALIGN="JUSTIFY">MOV R4,A</p>

<p ALIGN="JUSTIFY">MOV R5,A</p>

<p ALIGN="JUSTIFY">DM20: MOVX A,@DPTR ;读取一个数据的高字节</p>

<p ALIGN="JUSTIFY">MOV B,A</p>

<p ALIGN="JUSTIFY">INC DPTR</p>

<p ALIGN="JUSTIFY">MOVX A,@DPTR ;读取一个数据的低字节</p>

<p ALIGN="JUSTIFY">INC DPTR</p>

<p ALIGN="JUSTIFY">ADD A,R5 ;累加到累加和中</p>

<p ALIGN="JUSTIFY">MOV R5,A</p>

<p ALIGN="JUSTIFY">MOV A,B</p>

<p ALIGN="JUSTIFY">ADDC A,R4</p>

<p ALIGN="JUSTIFY">MOV R4,A</p>

<p ALIGN="JUSTIFY">JNC DM21</p>

<p ALIGN="JUSTIFY">INC R3</p>

<p ALIGN="JUSTIFY">DM21: DJNZ R2,DM20 ;累加完全部数据</p>

<p ALIGN="JUSTIFY">POP DPH ;恢复首址</p>

<p ALIGN="JUSTIFY">POP DPL</p>

<p ALIGN="JUSTIFY">LJMP DV31 ;求R3R4R5/R7-→R4R5,得到平均值</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(32) 标号: XR1 
功能:求单字节数据块的(异或)校验和</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:数据块的首址在DPTR中,数据的个数在R6、R7中。</p>

<p ALIGN="JUSTIFY">出口信息:校验和在累加器A中。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R4~R7 堆栈需求: 2字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">XR1: MOV R4,DPH ;保存数据块的首址</p>

<p ALIGN="JUSTIFY">MOV R5,DPL</p>

<p ALIGN="JUSTIFY">MOV A,R7 ;双字节计数器调整</p>

<p ALIGN="JUSTIFY">JZ XR10</p>

<p ALIGN="JUSTIFY">INC R6</p>

<p ALIGN="JUSTIFY">XR10: MOV B,#0 ;校验和初始化</p>

<p ALIGN="JUSTIFY">XR11: MOVX A,@DPTR ;读取一个数据</p>

<p ALIGN="JUSTIFY">XRL B,A ;异或运算</p>

<p ALIGN="JUSTIFY">INC DPTR ;指向下一个数据</p>

<p ALIGN="JUSTIFY">DJNZ R7,XR11 ;双字节计数器减一</p>

<p ALIGN="JUSTIFY">DJNZ R6,XR11</p>

<p ALIGN="JUSTIFY">MOV DPH,R4 ;恢复数据首址</p>

<p ALIGN="JUSTIFY">MOV DPL,R5</p>

<p ALIGN="JUSTIFY">MOV A,B ;取校验和</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(33) 标号: XR2 
功能:求双字节数据块的(异或)校验和</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:数据块的首址在DPTR中,双字节数据总个数在R6、R7中。</p>

<p ALIGN="JUSTIFY">出口信息:校验和在R2、R3中。</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、R2~R7 堆栈需求: 2字节</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">XR2: MOV R4,DPH ;保存数据块的首址</p>

<p ALIGN="JUSTIFY">MOV R5,DPL</p>

<p ALIGN="JUSTIFY">MOV A,R7 ;双字节计数器调整</p>

<p ALIGN="JUSTIFY">JZ XR20</p>

<p ALIGN="JUSTIFY">INC R6</p>

<p ALIGN="JUSTIFY">XR20: CLR A ;校验和初始化</p>

<p ALIGN="JUSTIFY">MOV R2,A</p>

<p ALIGN="JUSTIFY">MOV R3,A</p>

<p ALIGN="JUSTIFY">XR21: MOVX A,@DPTR ;读取一个数据的高字节</p>

<p ALIGN="JUSTIFY">XRL A,R2 ;异或运算</p>

<p ALIGN="JUSTIFY">MOV R2,A</p>

<p ALIGN="JUSTIFY">INC DPTR</p>

<p ALIGN="JUSTIFY">MOVX A,@DPTR ;读取一个数据的低字节</p>

<p ALIGN="JUSTIFY">XRL A,R3 ;异或运算</p>

<p ALIGN="JUSTIFY">MOV R3,A</p>

<p ALIGN="JUSTIFY">INC DPTR ;指向下一个数据</p>

<p ALIGN="JUSTIFY">DJNZ R7,XR21 ;双字节计数器减一</p>

<p ALIGN="JUSTIFY">DJNZ R6,XR21</p>

<p ALIGN="JUSTIFY">MOV DPH,R4 ;恢复数据首址</p>

<p ALIGN="JUSTIFY">MOV DPL,R5</p>

<p ALIGN="JUSTIFY">RET</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">(34) 标号: SORT 
功能:单字节无符号数据块排序(增序)</p>

<p ALIGN="JUSTIFY"> </p>

<p ALIGN="JUSTIFY">入口条件:数据块的首址在R0中,字节数在R7中。</p>

<p ALIGN="JUSTIFY">出口信息:完成排序(增序)</p>

<p ALIGN="JUSTIFY">影响资源:PSW、A、R2~R6 堆栈需求: 2字节</p>

⌨️ 快捷键说明

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