单片机的c语言中,#include <AT89X52.h>作用?它和#include<reg52.h>区别?

为什么在程序前面加上头文件:#include <AT89X52.h>
#include<reg52.h>
然后用sbit指令定义:
sbit PA0= P0^0;
sbit PA1= P0^1;
就报错呢?
error c231:'P0':redefinition
删掉#include <AT89X52.h>这个头文件就好了。

#include <AT89X52.h>这个头文件的作用是什么?我看有的程序上加上这个了,有的就没加,我用的单片机是at89s52,所以我就加上了,结果编译出了一堆错误。
它和#include<reg52.h>有什么区别?用哪个好点?

1、AT89X52.h指的就是s或c都可以用。C和S在看门狗、定时器上面有一定的区别,因而实际应用该单片机时要包含对应的头文件。而reg52.h是所有52单片机公共部分所通用的头文件,一般应用情况都能满足。
2、reg51.h和reg52.h实质上是没有区别的,都是一些特殊功能寄存器的申明。当然,51里有的52中都有,但反过来就未必了。这是因为52是51的升级版。at89x52.h中有些特殊功能寄存器没有申明,可能会不符合很多人的习惯。建议用reg52.h,reg51.h。可以打开那几个头文件对比一下具体有哪些区别。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-07
你是用keil? 很简单你把鼠标移到<AT89X52.h>才、,右键技能看到里面的内容了。你所报的错是因为,<REG52.H>和<AT89X52.h>头文件中,一些相同的寄存器被定义两次。希望被采纳,谢谢
第2个回答  2013-06-07
只是头文件而已,可以调用头文件里所定义的东西,你定义了2中单片机,就会报错。。和调用数学公式一样,需要+一个数学公式头文件。你也可以自己写一个程序,如何直接+上你写的文件,就可以调用了
第3个回答  2013-06-07
区别是52有定时器2,51没有追问

没问51,看清楚再回答!这两个都是52

追答

哦sorry,AT89X52是ATMEL专用头文件,定义的东东较多,REG52只定义了一些基本的寄存器和引脚。

追问

这两个头文件是不是相互冲突?只能加一个?我每次把这两个放在一起时都会报错。

追答

不是因为冲突,而是因为重复定义造成的错误,你用AT89X52就可以了,REG52的定义前者里面都有。

本回答被提问者和网友采纳
相似回答