keil中代码,编译后显示错误为重定义

东沽 2021-01-24 09:31:24
代码如下 #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar temp; temp=0xfe; P1=temp; void main() { while(1) { temp=_cror_ (temp,1); delay(600); P1=temp; } } void delay(uint z) { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); } 显示错误 error C231:'P1':redefinition 是哪里错了,我没有重定义P1呀?
...全文
443 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
khaunag 2021-01-26
  • 打赏
  • 举报
回复
1、Reg51.h内已经定义了sfr P1 = 0x90; //P1口,这是重复定义的原因。
2、这种P1特殊的变量,已经全局芯片头文件定义,和你说的普通全局变量不一样,可以认为是芯片保留全局变量。
  • 打赏
  • 举报
回复
#include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar temp=0xfe; void main() {P1=temp; while(1) { temp=_cror_ (temp,1); delay(600); P1=temp; } } void delay(uint z) { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); }
dceacho 2021-01-25
  • 打赏
  • 举报
回复
uchar temp; 这个是定义 temp=0xfe; P1=temp; 这就不是定义了
东沽 2021-01-24
  • 打赏
  • 举报
回复
引用 楼主 weixin_54872636的回复:
代码如下 #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar temp; temp=0xfe; P1=temp; void main() { while(1) { temp=_cror_ (temp,1); delay(600); P1=temp; } } void delay(uint z) { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); } 显示错误 error C231:'P1':redefinition 是哪里错了,我没有重定义P1呀?
我知道了,要把uchar temp和P1=0xfe放到主函数中,这样就正常写出流水灯的代码了,不过这应该是这种特有规定吧,我当时学基础C语言的时候,是可以在主函数前定义全局变量的

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧