logo

您所在位置网站首页 > 海量文档  > 教学课件 > 大学课件

第3章 AT89C51单片机软件.ppt 142页

本文档一共被下载: ,您可全文免费在线阅读后下载本文档。

  • 支付并下载
  • 收藏该文档
  • 百度一下本文档
  • 修改文档简介
全屏预览

下载提示

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
下载地址
需要金币:300    文档纠错   收藏文档   下载帮助
支付并下载
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ·*· 数码转换程序 计算机中只能处理二进制数据,而实际应用中常用到其他进制的表示,如八进制、十进制、十六进制,为了用户读取方便,另还有字符形式等,所以需进行各种数码之间的转换。 计算机中的十进制数常用BCD码表示,一个字节存放一个BCD码称为非压缩BCD码;一个字节存放两个BCD码则称为压缩BCD码。 3.3.7 程序设计实例 ·*· 【例3.18】将8位二进制数转换为3位BCD码。 分析:8位二进制最多可表示到百位,故需3位BCD码表示。 如用3位压缩BCD码则需两个存储单元。 子程序名:B2BCD 入口参数:R0中存8位二进制数 出口参数:R1、R2存放转换后的BCD码,R2中存放高位。 使用资源:A、B、R0、R1、R2 ·*· 子程序如下: B2BCD:MOV B,#100 MOV A, R0 ;取待转换的二进制数 DIV AB ;除以100,商为百位 MOV R2 , A ;百位存入R2 MOV A, #10 XCH A , B DIV AB ; 余数除以10,A中商为十位, ;B中所得余数为个 位 SWAP A ;十位换到高4位 ADD A,B ;高、低各4位拼装成BCD码 MOV R1,A ;保存十位、个位结果 RET ·*· 运算类程序 AT89C51指令系统中,提供了单字节的加、减、乘、除,但实际应用中,常会碰到多字节的加、减、乘、除,及带符号数的运算,则需编程人员自己进行程序设计。 ·*· 【例3.19】 8位带符号整数的乘法子程序。 分析:先保存乘数的符号,对乘数绝对值进行相乘,然后求出乘积符号 (两乘数符号位相同时为正数,相异时为负数),最后根据符号位情况对绝对值乘积进行处理。 子程序名:MULF 入口参数:被乘数、乘数分别放R1、R0中 出口参数:积高8位存R3,低8位存R2中,积的符号存于可位寻址单元22H。 使用资源:A,B,PSW,20H,21H,22H,R1,R2,R3,R0 ·*· 子程序如下: MULF: PUSH PSW ;现场保护 PUSH ACC PUSH B MOV A,R1 ;取被乘数送入累加器A RLC A ;符号位送入CY MOV 20H,C ;存被乘数的符号 MOV A,R0 ;取乘数 RLC A ;符号位送入CY MOV 21H,C ;存乘数的符号 ANL C,/20H MOV 22H,C ;暂存到22H位 MOV C,20H ;取被乘数符号 ANL C,/21H ORL C,22H ;或运算 MOV 22H,C ;保存乘积符号 MOV A,R0 ;取乘数 JNB ACC.7,MUL1 ;乘数为正则转向MUL1 CPL A ;乘数为负则求补 INC A ·*· (续上) MUL1: MOV B,A ;乘数存入B MOV A,R1 ;取被乘数 JNB ACC.7,MUL2 ;被乘数为正则转向MUL2 CPL A ;被乘数为负则求补 INC A MUL2: MUL AB ;相乘 JNB 22H,MUL3 ;积为正则转向MUL3 CPL A ;积为负则求补 INC A MUL3: MOV R2,A ;存积的低8位 MOV A,B ;积的高8位送A JNB 22H,MUL4 ;积为正则转向MUL4 CPL A ;高8位取反 ADDC A,#00H ;加进位 MUL4: MOV R3,A ;保存积的高8位 POP B ;恢复现场 POP ACC POP PSW RET ;返回 ·*· 数据处理程序 实际应用中的数据处理包括对数据进行排序、查找、求极值、平均值、平方、开方等操作。 【例3.20】用冒泡法对片内RAM单元由40H开始连续存放的20个8位无符号数升序排列。 分析:冒泡法是非常经典的数据排序算法,是一个将相邻数互换的排序方法。 执行时将一个数与其后面每一个数进行比较,若数据的大小次序与要求的顺序不符,就将两数交换。比如要求升序排列,那么第一次冒泡最大的数就排到了最后,然后取第二个数,再“冒泡”一次

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片

©2010-2013 max.book118.com在线文档投稿赚钱网. All Rights Reserved 蜀ICP备08101938号