- 1、本文档共142页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 AT89C51单片机软件
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ·*· 数码转换程序 计算机中只能处理二进制数据,而实际应用中常用到其他进制的表示,如八进制、十进制、十六进制,为了用户读取方便,另还有字符形式等,所以需进行各种数码之间的转换。 计算机中的十进制数常用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位无符号数升序排列。 分析:冒泡法是非常经典的数据排序算法,是一个将相邻数互换的排序方法。 执行时将一个数与其后面每一个数进行比较,若数据的大小次序与要求的顺序不符,就将两数交换。比如要求升序排列,那么第一次冒泡最大的数就排到了最后,然后取第二个数,再“冒泡”一次
文档评论(0)