您的位置 首页 IOT

汇编语言单片机程序过错剖析

【春芽电子科技】【汇编语言】汇编语言单片机程序错误分析一、MAS51汇编软件汇编失败原因分析单片机的汇编语言编写时要注意一定的语法,详

【春芽电子科技】【汇编语言】汇编语言单片机程序过错剖析

一、MAS51汇编软件汇编失利原因剖析

单片机的汇编语言编写时要留意必定的语法,具体介绍能够参阅相关参阅书,语法过错汇会形成汇编失利,常见的汇编过错如下:
1.标号重复常见于仿制、张贴程序时忘掉修正标号,形成呈现多个相同的标号,标号是不允许重复的。
2.标点符号以全角方法输入MAS51程序要求标点符号为半角方法,不然汇编失利。能够在输入:,;时切换到半角方法,或许在大写状况输入标点符号,这也是很简单犯并且不简单发觉的过错。
3.注释太长有时为了今后读懂程序,写了很长的注释,站长发现超越20个汉子时也会形成汇编失利,解决办法能够将太长的注释分红多个注释。
4.数值#FFH前遗失0,依据要求应该在a~f前加0,写成#0FFH
5.字母O和数字0搞混有时候这两个字看上去完全相同,要留意哦
6.标号后边遗失”:”
7.标号运用了特别字符,比方:T1、T2、A、B这些字符有特定的意义,不允许用于标号。
8.AJMP跳转超越2K地址,AJMP归于短跳转指令,有2K地址规模的约束。
9.JB P3.2,EXIT跳转超越-128~127个地址规模。这个是最简单呈现的过错!你有或许程序方才还能汇编编译成功,你加了一段程序后程序就提示犯错了,你能够把
JB P3.2,EXIT
转换成
JNB P3.2,UUU
AJMP EXIT
UUU:
10.字母I和数字1混杂,糊涂蛋的常见问题。
11.创造发明不存在的汇编语言指令,在编写程序程序的过程中可不欢迎这种立异,这种指令汇编程序不支持,芯片也不认可。
12.符号“:”“;”最好用半角书写。
运用汇编软件常见问题解答:
1.假如汇编软件呈现** Unrecongnized Command **提示字样阐明是汇编指令输入过错。正确的汇编指令是asm51 d:01.txt留意asm51后边要加空格。
2.假如汇编软件呈现**Dos File I/O error **提示字样阐明是汇编文件的途径犯错。榜首要留意MASM51软件的装置途径中不能呈现中文名称,例如汇编软件装置在D:单片机下面,第二要汇编的文件的途径中也不能呈现中文名称,例如D:单片机01.TXT。当文件后缀不是asm时,后缀不能省掉。
二、程序犯错
1.寄存器重复调用比方主程序中设定了R4=5,表明主程序循环履行5次,而其间的一个延时子程序又用到R4,使R4的值产生紊乱,形成程序无法正常履行。
2.硬件不熟悉单片机一般选用下拉输出,往往端口输出0驱动外设作业,和常见的正逻辑相反,简单搞错。
以上是站长学单片机时产生的不止一次的过错!!
编写汇编语言的劝告:
要养成杰出的程序书写习气,比方标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不简单犯错。标号最好选用有意义的英文,这样比较直观,注释尽量具体精确,便于今后读懂,并且有利于其它程序中作为子程序模块的调用。还有要留意典型程序模块的堆集,再杂乱的程序也是由一个个小程序模块组成的,在初学阶段能够对典型程序比方:延时子程序、查表子程序、按键消抖子程序等编写实践一次,这样形象深入,便于今后引证。
常见汇编语言指令解说:
1.Rn表明R0~R7中的一个
2.#data表明8位的数值00H~FFH
3.direct表明8位的地址00H~FFH
4.@Ri表明寄存器直接寻址只能是R0或许R1
5.@DPTR表明数据指针直接寻址
6.bit表明位地址
7.$表明当时地址
寄存器寻址MOV A,R1将R1中的数值赋予A
直接寻址MOV A,3AH将地址3AH中的数值赋予A
当即寻址MOV A,#3AH将3AH数值赋予A
寄存器间址MOV A,@R0将R0中地址的数值赋予A
变址寻址MOVC A,@A+DPTR以A中的数值为地址偏移量进行查表
相对寻址AJMP MATN跳转到行号为MATNC处
位寻址MOV C,7FH将位地址7FH的数值赋予C
MOV A,#3AH数据传输、赋值指令
PUSH direct将direct为地址的数值压入仓库中
POP direct将direct为地址的数值弹出仓库
XCH A,direct将direct中的数值与A进行交流
ADD A,direct将direct中的数值与
INC direct将direct中的数值加1
SUBB A,direct将A中的数值减去direct中的数值和Cy值,并保存在A中,假如想运用不带Cy减法,能够在运算前对Cy清零CLR C
DEC direct将direct中的数值减1
DA A用于对BCD码加减法后进行10进制调整
MUL AB将A和B相乘,并把高八位放在B中,低八位放在A中
DIV AB将A和B相除,并把商放在A中,余数放在B中
ANL A,direct将A与direct中的数值进行与运算,成果保留在A中(与运算规则:有0出0,全1出1)
ORL A,direct将A与direct中的数值进行或运算,成果保留在A中(或运算规则:有1出1,全0出0)
XRL A,direct将A与direct中的数值进行异或运算,成果保留在A中(异或运算规则:全0出0,全1出0,01、10出1)
CRL A对A清零
CPL A对A取反
RL A对A中数右移
RR A对A中数左移
RLC A对A中数带Cy右移
RRC A对A中数带Cy左移
SWAP A对A中的数高4位低4位相互交流
LJMP长跳转指令,64K地址规模
AJMP短跳转指令,2K地址规模
JZ rel假如A为0就跳转到rel行号处
JNZ rel假如A不为0就跳转到rel行号处
CJNE A,#data,rel假如A不等于data就跳转到rel行号处
DJNZ R1,rel假如R1减1后不为0就跳转到rel行号处
ACALL rel调用rel子程序,2K地址以内
LCALL rel调用rel子程序,64K地址以内
RET子程序回来指令
RETI中止程序回来指令
NOP空操作指令
MOV C,bit将位地址bit中的值赋予C
CRL bit将bit位地址清0
SETB bit将bit位地址置1
CPL bit将bit位地址取反
ANL C,bit将地址bit中的值和C做与运算,成果存放在C中
ORL C,bit将地址bit中的值和C做或运算,成果存放在C中
JC rel假如Cy为1,就跳转到rel行号处
JNC rel假如Cy为0,就跳转到rel行号处

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/257645.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部