- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 单片机汇编程序设计
在内部RAM30h和31H依次存储有用户输入的两位数字的ASCII,30H为十位,31H为个位,将其组合成BCD存储到32H 在外部RAM2000H处存储有一个字节的带符号整数, (0)将其绝对值转换成非组合的BCD分别存储到内部RAM50H以后单元 (1)将其转换10进制的ASCII字符串 作业 1、在外部RAM2000H字节单元存储有一个在1-4的整数,根据该整数实现分支, RAM2000H的值与转移地址对应表如下 1 120H 2 141H 162 H 4 190H 作业 2、 对外部RAM3000H开始的20H个带符号整数中的正数求总和,结果存储到内部RAM55H开始的两个字节单元 RL A ORL A,40H MOV 40H,A END 【例3-29】设片内RAM的20H单元的内容为: (20H)=x7x6x5x4x3x2x1x0 把该单元内容反序后放回20H单元,即为: (20H)=x0x1x2x3x4x5x6x7 可以通过先把原内容右移一位,低位移入CF中,然后左移一位,CF中的内容移入,通过8次处理即可,由于8次过程相同,可以通过循环完成,移位过程当中必须通过累加器来处理。设20H单元原来的内容先通过R3暂存,结果先通过R4暂存,R2作循环变量。 程序如下: ORG 0200H MOV R3,20H MOV R4,#0 MOV R2,#8 LOOP: MOV A,R3 RRC A MOV R3,A MOV A,R4 RLC A MOV R4,A DJNZ R2,LOOP MOV 20H,R4 END 另外,由于片内RAM的20H单元在位寻址区,这一问题还可以通过位处理方式来实现,这种方法留给读者自己完成。 【例3-29】一位十六进制数转换成ASC1I码。 一位十六进制数有十六个符号0~9、A、B、C、D、E、F。其中,0~9的ASCII码为30H~39H,A~F的ASCII码为41H~46H,转换时,只要判断十六进制数是在0~9之间还是在A~F之间,如在0~9之间,加30H,如在A~F之间,加37H,就可得到ASCII码。设十六进制数放于R2中,转换的结果放于R2中。 程序如下: ORG 0200H MOV A,R2 CLR C SUBB A,#0AH ;减去0AH,判断在0~9之间,还是在A~F之间 MOV A,R2 JC ADD30 ;如在0~9之间,直接加30H ADD A,#07H ;如在A~F之间,先加07H,再加30H ADD30:ADD A,#30H MOV R2,A END 【例3-30】一位十六进制数转换8段式数码管显示码。 一位十六进制数0~9、A、B、C、D、E、F的8段式数码管的共阴极显示码为3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、5EH、79H、71H。由于数与显示码没有规律,不能通过运算得到,只能通过查表方式得到。 设数放在R2中,查得的显示码也放于R2中,用MOVC A,@A+DPTR查表。 程序如下: ORG 0200H CONVERT:MOV DPTR,#TAB ;DPTR指向表首址 MOV A,R2 ;转换的数放于A MOVC A,@A+DPTR ;查表指令转换 MOV R2,A RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,67H,77H,7CH,39H,5EH,79H,71H ;显示码表 在这个例子中,编码是一个字节,只通过一次查表指令就可实现转换,如编码是两个字节,则需要用两次查表指令才能查得编码,第一次取得低位,第二次取得高位。 【例3-31】在一温度控制系统中,温度0~100C每一个温度值都已经通过温度传感器测得一个两字节的标准电压值。现在R2中给出一个0~100C的温度值,取得它的标准电压值放于R3、R4中,低字节放在R3中,高字节放在R4中。 通过用MOVC A,@A+DPTR查表,两个字节分两次取得,由DPTR指向表首,由放于R2中的温度值得到所查的电压值相对于表首位置的位移量放于累加器A中,由于每一个电压值为两个字节,位移量须用R2中的温度值乘以2得到。第一次取得低字节,第二次位移量加1后查表取得高字节,分别放于R3、R4中。 程序如下: ORG 0300H CHECK: MOV DP
文档评论(0)