单片机汇编程序纠错

单片机汇编程序纠错,第1张

我用keil2帮你编译了一下没有错误,选的是atmel的89c52单片机。

首先确定你用的编译软件没的问题,正确安装。如果不是软件的问题,那么针对你的错误提示,解答如下:

warning1:提示说在内存地址0000H到0002H被重复使用了。你写的程序“ORG 0000H SJMP MAIN”正是占用了这部分的地址,出错的原因可能是有些类型的单片机它会把某部分的内存地址作保留,不给用户使用权的。又或者在这个工程里你的其他源程序中也用到了这部分的内存。那么此时你写程序进去肯定会报错了。你试试改改这个地址看问题能否解决。

warning2:提示说无法确定一个外部标号。意思是你的一个叫C_START的外部变量在头文件中有声明,但是没有定义,在程序中定义一下就好了。

第三个warning也是由于这原因的,说你没定义这个变量。

我猜楼主你这是一个c语言和汇编语言的混合编程吧,这上面只是程序的一部分,光看这部分是找不到真正问题所在的。

错误有两个:

1、if条件判断语句中不能使用break关键字,该关键字只能用在循环控制中,如for、while,或者switch中,此处,break可以改为return 0

2、函数void NextDay(int &a,int &b,int &c)的定义中间,在函数的形参中已经定义了三个变量,在函数体内再次定义它们,会导致重复定义,报错,此处,无需定义。

改后的源代码:

#include<iostream>

#include<stdio.h>

#include<conio.h>

using namespace std

void NextDay(int &a,int &b,int &c)

int main()

{

int x,y,z

char ch

scanf("%d%d%d",&x,&y,&z)

NextDay(x,y,z)

printf("%d.%d.%d\n",x,y,z)

x=x,y=y,z=z

ch=getch()

if(ch=='#')

{

printf("\n")

return 0

}

else

{

NextDay(x,y,z)

printf("%d.%d.%d\n",x,y,z)

}

return 0

}

void NextDay(int &a,int &b,int &c)

{

//int a,b,c

if (b==1||b==3||b==5||b==7||b==8||b==10||b==12&&c<31 )

c++

else if (b==12&&c==31)

{

c=1

b=1

a++

}

else if (b==1||b==3||b==5||b==7||b==8||b==10&&c==31 )

{

c=1

b++

}

else if (b==4||b==6||b==9||b==11&&c<30 )

c++

else if (b==4||b==6||b==9||b==11&&c==30)

{

c=1

b++

}

else if (b==2)

{

if (((int)a%4==0&&(int)a%100!=0)||((int)a%400==0) &&(c<=28) )

c++

else if (c==29)

{

c=1

b++

}

else

{

if (c<=27)

c++

else if (c==28)

{

c=1

b++

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11683450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存