单片机汇编语言中单片机syntax errorr的错误怎么改

单片机汇编语言常用指令的识读_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机汇编语言常用指令的识读
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢单片机汇编语言常见错误分析
一、汇编软件汇编失败原因分析
这里采用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
JNB P3.2,LD01
LD01: AJMP EXIT
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。
编写汇编语言的忠告
要养成良好的程序书写习惯,比如标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错。标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于以后读懂,而且有利于其它程序中作为子程序模块的调用。还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的,在初学阶段可以对典型程序比如:延时子程序、查表子程序、按键消抖子程序等编写实践一次,这样印象深刻,便于以后引用。
德州仪器公开课
特 别 推 荐
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点syntax error怎么修复_百度知道
syntax error怎么修复
我有更好的答案
既然是【语法错误】,那就修改成正确的语法咯!
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。流水灯 keil 汇编程序出错 error A9:syntax error_百度知道
流水灯 keil 汇编程序出错 error A9:syntax error
Build target 'Target 1'
assembling liu.asm...
liu.asm(1): error A9: SYNTAX ERROR
liu.asm(1): error A3: ILLEGAL CHARACTER
liu.asm(1): error A3: ILLEGAL CHARACTER
liu.asm(1): error A3: ILLEGAL CHARACTER
liu.asm(1): error A3: ILLEGAL CHARACT...
我有更好的答案
程序中的冒号:逗号,小数点. 及注释的分号;都是全角符号吧。一律改成半角的。
采纳率:91%
你的所有注释都用的是“;”,将之改为“;”就可以了。
注释要用半角分号“;”,而不是中文全角分号“;”
错误很多源文件发给我看看吧
其他1条回答
为您推荐:
其他类似问题
流水灯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 1191|回复: 7
51单片机里 error c141语法错误该怎么改
#include&reg52.h&
& & & & & & & && &#define off 1& & & && &//高电平时灯为关闭状态
& & & & & & & && &#define on 0& & & && &//低电平时灯为开启状态
& & & & & & & && &bit flag1 = 0;&&//接收标志位
& & & & & & & && &bit flag2 = 0;
& & & & & & & && &bit flag3 = 0;
& & & & & & & && &sbit led = P1^7;
& & & & & & & && &void main()
& & & & & & & && &{
& & & & & & & && &TMOD = 0x21;
& & & & & & & && &SCON = 0x90;& & & && & //串行方式2
& & & & & & & && &SP = 0x07;& & & && & //初始推栈指针
& & & & & & & && &IE = 0x90;& & & && & //允许串行中断
& & & & & & & && &PCON = 0;
& & & & & & & && &TCON = 0;
& & & & & & & && &led =
& & & & & & & && &while(1)
& & & & & & & && & {
& & & & & & & && &PCON = 1;
& & & & & & & && & }
& & & & & & & && &//当连续接收到字符串cccc5555时,将灯开启
& & & & 22行& & & && &intcom_isr() interrupt 4& & & &&&//串口中断
& & & & 23行& & & && & {
& & & & & & & && & unsigned int temp = 0;
& & & & & & & && & temp = SBUF;
& & & & & & & && & RI = 0;
& & & & & & & && & if(temp == 0x0cc) //收到cc字符
& & & & & & & && && &{
& & & & & & & & & & & &&&if(flag1 == 0)& & & && & //如果是第一次收到cc,置位flag1
& & & & & & & & & & & && & {
& & & & & & & & & & & && & flag1 = 1;
& & & & & & & & & & & && & }
& & & & & & & & & & & &&&else
& & & & & & & & & & & && & {
& & & & & & & & & & & && & if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
& & & & & & & & & & & && && &{
& & & & & & & & & & & & & & & &&&flag1 = 0;
& & & & & & & & & & & & & & & &&&flag2 = 0;
& & & & & & & & & & & & & & & &&&flag3 = 0;
& & & & & & & & & & & & & & & &&&led =
& & & & & & & & & & & & & & & &&&}
& & & & & & & & & & & && & else& & & & & & & & //接收到两次cc时,置位第二个标志位
& & & & & & & & & & & && && &{
& & & &&&flag2 = 1;
& & & & & & & & & & & & & & & &&&}
& & & & & & & & & & & && & }
& & & & & & & & & & & &&&}
& & & & & & & & & & & &&&else if(temp == 0x55)
& & & & & & & & & & & && &{
& & & & & & & & & & & && &if(flag1 == 1&&flag2 == 1)&&//如果收到55,并且之前已经收到cccc
& & & & & & & & & & & && &&&{
& & & & & & & & & & & & & & & &&&if(flag3 == 0)& & & & & & & & //如果第一次接收到55
& & & & & & & & & & & & & & & &&&flag3 = 1;& & & & & & & & & & & &
& & & & & & & & & & & &&&& & & &&&else& && && && && & //如果已经收到一次55
& & & & & & & & & & & & & & & && &{
& & & & & & & & & & & & & & & && &led =
& & & & & & & & & & & & & & & && &flag1 = 0;
& & & & & & & & & & & & & & & && &flag2 = 0;
& & & & & & & & & & & & & & & && &flag3 = 0;
& & & & & & & & & & & & & & & && &}
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & && &else& && & //如果收到的数据为乱序
& & & & & & & & & & & && &&&{
& & & && && && && &&&flag1 = 0;
& & & & & & & & & & & & & & & &&&flag2 = 0;
& & & & & & & & & & & & & & & &&&flag3 = 0;
& & & & & & & & & & & & & & & &&&led =
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & && &}
& & & & & & & & & & & && &else& &&&//当收到其他字符串
& & & & & & & & & & & && &{
& & & & & & & & & & & && && & & &&&flag1 = 0;
& & & & & & & & & & & & & & & &&&flag2 = 0;
& & & & & & & & & & & & & & & &&&flag3 = 0;
& & & & & & & & & & & & & & & &&&led =
& & & & & & & & & & & && &}
& & & & & & & && & & & & & }
& & & & & & & && &}
Error c141: syntax error near ‘{’& & & &&&
Error c141: syntax error near ‘interrupt’
Warning& & & & c206: ‘intcom_isr’ :missing function prototype
语法错误,中断函数写在主函数外,不要写在主函数里。
回帖助人的奖励!
不能在函数内定义函数,中断服务函数放到主函数外面定义
回帖助人的奖励!
#include&reg52.h&
#define off 1& && && & //高电平时灯为关闭状态
#define on 0& && && & //低电平时灯为开启状态
bit flag1 = 0;&&//接收标志位
bit flag2 = 0;
bit flag3 = 0;
sbit led = P1^7;
void main()
{
& & & & TMOD = 0x21;
& & & & SCON = 0x90;& && && &&&//串行方式2
& & & & SP = 0x07;& && && &&&//初始推栈指针
& & & & IE = 0x90;& && && &&&//允许串行中断
& & & & PCON = 0;
& & & & TCON = 0;
& & & & led =
& & & & while(1)
& & & & {
& & & & & & & & PCON = 1;
& & & & }
& & & &
}
//当连续接收到字符串cccc5555时,将灯开启
intcom_isr() interrupt 4& && && &//串口中断
{
& & & & unsigned int temp = 0;
& & & & temp = SBUF;
& & & & RI = 0;
& & & & if(temp == 0x0cc) //收到cc字符
& & & & {
& & & & & & & & if(flag1 == 0)& && && &&&//如果是第一次收到cc,置位flag1
& & & & & & & & {
& & & & & & & & & & & & flag1 = 1;
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & flag1 = 0;
& & & & & & & & & & & & & & & & flag2 = 0;
& & & & & & & & & & & & & & & & flag3 = 0;
& & & & & & & & & & & & & & & & led =
& & & & & & & & & & & & }
& & & & & & & & & & & & else& && && && && & //接收到两次cc时,置位第二个标志位
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & flag2 = 1;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & }
& & & & else if(temp == 0x55)
& & & & {
& & & & & & & & if(flag1 == 1&&flag2 == 1)&&//如果收到55,并且之前已经收到cccc
& & & & & & & & {
& & & & & & & & & & & & if(flag3 == 0)& && && && && & //如果第一次接收到55
& & & & & & & & & & & & flag3 = 1;& && && && && && && && &
& & & & & & & & & & & & else& && && && && & //如果已经收到一次55
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & led =
& & & & & & & & & & & & & & & & flag1 = 0;
& & & & & & & & & & & & & & & & flag2 = 0;
& & & & & & & & & & & & & & & & flag3 = 0;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & else& && & //如果收到的数据为乱序
& & & & & & & & {
& & & & & & & & & & & & flag1 = 0;
& & & & & & & & & & & & flag2 = 0;
& & & & & & & & & & & & flag3 = 0;
& & & & & & & & & & & & led =
& & & & & & & & }
& & & & }
& & & & else& &&&//当收到其他字符串
& & & & {
& & & & & & & & flag1 = 0;
& & & & & & & & flag2 = 0;
& & & & & & & & flag3 = 0;
& & & & & & & & led =
& & & & }
}
回帖助人的奖励!
RE: 51单片机里 error c141语法错误该怎么改
#include&reg52.h&
#define off 1& && && & //高电平时灯为关闭状态
#define on 0& && && & //低电平时灯为开启状态
bit flag1 = 0;&&//接收标志位
bit flag2 = 0;
bit flag3 = 0;
sbit led = P1^7;
void main()
&&TMOD = 0x21;
&&SCON = 0x90;& && && &&&//串行方式2
&&SP = 0x07;& && && &&&//初始推栈指针
&&IE = 0x90;& && && &&&//允许串行中断
&&PCON = 0;
&&TCON = 0;
&&while(1)
& & PCON = 1;
&&//当连续接收到字符串cccc5555时,将灯开启22行
intcom_isr() interrupt 4& && && &//串口中断23行& && && &&&
&&unsigned int temp = 0;
&&temp = SBUF;
&&if(temp == 0x0cc) //收到cc字符
& & if(flag1 == 0)& && && &&&//如果是第一次收到cc,置位flag1
& && &flag1 = 1;
& && &if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
& && &&&flag1 = 0;
& && &&&flag2 = 0;
& && &&&flag3 = 0;
& && &&&led =
& && &else& && && && && & //接收到两次cc时,置位第二个标志位
& && &&&flag2 = 1;
&&else if(temp == 0x55)
& & if(flag1 == 1&&flag2 == 1)&&//如果收到55,并且之前已经收到cccc
& && &if(flag3 == 0)& && && && && & //如果第一次接收到55
& && &flag3 = 1;& && && && && && && && &
& && &else& && && && && & //如果已经收到一次55
& && &&&led =
& && &&&flag1 = 0;
& && &&&flag2 = 0;
& && &&&flag3 = 0;
& & else& && & //如果收到的数据为乱序
& && &flag1 = 0;
& && &flag2 = 0;
& && &flag3 = 0;
& && &led =
&&else& &&&//当收到其他字符串
& & flag1 = 0;
& & flag2 = 0;
& & flag3 = 0;
回帖助人的奖励!
<font color="# 发表于
不能在函数内定义函数,中断服务函数放到主函数外面定义
谢谢,编译成功了
angmall 发表于
谢谢,编译成功了
不倒翁.WZT 发表于
#define off 1& && && & //高电平时灯为关闭状态
#define on 0& && && & //低电平时灯为开启状 ...
谢谢,编译成功了
Powered by

我要回帖

更多关于 单片机汇编语言教程 的文章

 

随机推荐