一、汇编软件汇编失败原因分析
这里采用keil c51软件包中的宏汇编器a51作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成汇编失败,常见的汇编错误如下:
1. 标号重复:常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。
2.标点符号以全角方式输入:汇编程序要求标点符号为半角方式,否则汇编失败。可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易犯而且不容易发觉的错误。
3.数值#ffh 前遗漏0:根据要求应该在a~f前加0,写成#0ffh
4.字母o和数字0搞混:有时候这两个字看上去完全相同,要注意哦~~
5.标号后边遗漏:
6.标号使用了特殊字符:标号不能用指令助记符、伪指令、特殊功能寄存器名和8051在指令系统中用的“#”、“@”等,长度以2~6字符为宜,第一字母必须是英文字母。比如:t1、t2、a、b这些字符有特定的含义,不允许用于标号。
7.ajmp跳转超过2k地址:ajmp属于短跳转命令,有2k地址范围的限制。
8.超过地址范围:jb p3.2,exit跳转超过-128~127个地址范围。这个是最容易出现的错误!你有可能程序刚才还能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把jb p3.2,exit转换成jnbp3.2,ld01ajmp exitld01: ajmpexit……
9.字母i和数字1混淆:冒失鬼的常见问题。
10.创造发明不存在的汇编语言指令:在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不认可。
11.符号“:”“;”最好用半角书写。
二、程序出错
1.寄存器重复调用:比如主程序中设定了r4=5,表示主程序循环执行5次,而其中的一个延时子程序又用到r4,使r4的值发生紊乱,造成程序无法正常执行。
2.硬件不熟悉:单片机一般采用下拉输出,往往端口输出0驱动外设工作,和常见的正逻辑相反,容易搞错。
三、指令系统常用符号和含义
(1)ri:工作寄存器0和工作寄存器1,i=0或1。即r0~r1。
(2)rn:工作寄存器r0~r7,n=0~7。
(3)@ri:寄存器ri间接寻址8位存储器单元00h~ffh。
(4)direct:8位直接地址,它可以是内ram 00h~7fh或sfr的80h~ffh。
(5)#data:8位立即数。
(6)#data16:16位立即数。
(7)addr16:16位目的地址。用于lcall和ljmp指令,能调用或转移到64k程序存储器空间的任何地方。(8)addr11:11位目的地址。用于acall和ajmp指令,可在下条指令地址所在的2k字节页面内调用或转移。
(9)rel:带符号的8位偏移地址,用于sjmp和所有的条件转移指令。其范围是相对于下一条指令第1字节地址的-128~+127个字节。
(10)dptr:数据指针,可用作16位的地址寄存器。
(11)bit:位地址。片内ram中的可位寻址及sfr中的可寻址位。
(12)a:累加器acc。
(13)b:通用寄存器,主要用于乘法mul和除法div指令中。
(14)cy:进位标志位或布尔处理器中的累加器。
(15)@:间接寄存器或基址寄存器的前缀。如@ri,@dptr,@a+pc,@a+dptr。编写汇编语言的忠告要养成良好的程序书写习惯,比如标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错。标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于以后读懂,而且有利于其它程序中作为子程序模块的调用。还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的,在初学阶段可以对典型程序比如:延时子程序、查表子程序、按键消抖子程序等编写实践一次,这样印象深刻,便于以后引用。
机械硬盘的下一目标阶段或将是2026年的50TB容量
电池技术何去何从 是否真的成为“搁浅资产”
CA-IS3740LW 四通道标准数字隔离器的介绍
数字化加持管理创新,博尔捷数字科技集团发布复合用工管理云平台
光伏行业中硅粉料位开关选型注意事项
分享一些单片机汇编语言常见的语法和程序错误
中兴通讯发布5G消息全球合作计划
百大案例 | 领先突破,农业银行率先完成端到端IPv6+创新落地
雄迈智能插座来袭 智能可视排插安全可控
比亚迪宣布:连建三厂!
视觉传感器的分类
光纤收发器如何实现长距离组网,实现方法介绍
智慧消防领域怎样加快进程
机器人黄金时代到来 仓储机器人有“钱”图
供电系统低压母线的联络电缆的短路故障的分析与处理方案
基于传感器和深度学习神经网络的血压监测系统
雷军和董明珠新赌约;当年无知无畏,现在打赌更有信心
一款柔性可穿戴给药器械,能够根据佩戴者的生理数据
小米MIX在美过引起热议,获美国网民称赞
国芯科技:高研发投入在手订单饱满,多维拓展汽车电子等优势产品线