求助,为什么用REGX5.H头文件更改就行,reg51.h就不可以呢

[复制链接]
 楼主| Devil松 发表于 2012-5-6 09:46 | 显示全部楼层 |阅读模式
编了关于看门狗的小程序,本来目的也就是测试下,究竟看门狗应该如何初始化,是该先写0x1e,还是先写0xe1呢,可纠结,因为我上网看有不同的版本,还有的说两个写入不分先后顺序。
    一测试,就发现问题了,问题倒不出在看门狗定时器上,而是出在头文件修改上。我用的器件是AT89S51,最开始编程的时候用的头文件是reg51.h,然后自己修改,加进去了sfr WDTRST =0xA6;但是编译的时候总是提示undefined identifier(未定义标识符),我看了又看头文件,很是纳闷,我明明定义了啊。然后我偶然想到还有另一个头文件REGX51.h,于是,我更换为这个头文件,在里面做了更改,编译就通过了,我自己解释不通,求帮助。
xuyaqi 发表于 2012-5-6 10:11 | 显示全部楼层
提供有关程序便于分析
 楼主| Devil松 发表于 2012-5-6 10:53 | 显示全部楼层
好的,程序如下
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar);
void Kick_Dog();

sbit flag=P1^1;
void main()
{        WDTRST=0x1E;//初始化看门狗
        WDTRST=0xE1;
        while(1)
                {
                  flag=~flag;
                  delay(1000);
                  Kick_Dog();
                 }
}
void Kick_Dog()  //喂狗指令
        {
        WDTRST=0x1E;
        WDTRST=0xE1;
        }
reg51.h修改部分如下
sfr TMOD = 0x89;
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;
sfr IE   = 0xA8;
sfr IP   = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr WDTRST = 0x0A6;

REGX51.h修改部分如下
sfr P3      = 0xB0;
sfr IP      = 0xB8;
sfr PSW     = 0xD0;
sfr ACC     = 0xE0;
sfr B       = 0xF0;
sfr        WDTRST  = 0xA6;
xuyaqi 发表于 2012-5-6 11:56 | 显示全部楼层
要将头文件复制到自己项目文件夹改好后保存,程序里引用要用引号不用括号,看图红框部分。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| Devil松 发表于 2012-5-6 15:51 | 显示全部楼层
谢谢啊,照你说的方法我试了,无论是include"reg51.h"还是include"regx51.h"编译都可以通过,不提示什么错误,但是为什么我用include就可以呢,而且还不是在复制头文件到自己的目录下的方式。说到这了,我还有一处不解,在你包含头文件的时候,软件怎么知道到哪个文件夹里面去找呢?我的软件头文件在INC目录下有,在INC的ATMEL目录下还有reg51.h及reg52.h,这个怎么处理?有矛盾吗?
还有一个小问题,如果想消除警告怎么查找?
此外,你看我的.c文件和.h文件是同级的关系,而你的却有相关性,是子关系,很是不理解,解释一下白

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| Devil松 发表于 2012-5-6 15:57 | 显示全部楼层
为什么你的工程里面不包含startup.A51呢?不解……
 楼主| Devil松 发表于 2012-5-6 16:10 | 显示全部楼层

你看,我这样就能编译通过,用include<regx51.h>

但是一旦我用了这个include<reg51.h>
是因为在INC目录下有reg51.h,而没有regx51.h吗?这样有什么影响吗?只是我装软件出的问题呢,还是每个人都是这样呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xuyaqi 发表于 2012-5-6 17:10 | 显示全部楼层
我让你把修改的头文件放在自己的工程文件夹是因为keil目录里的头文件是大家公用的随便改不好。startup.A51不是每个工程必需的。
ayb_ice 发表于 2012-5-7 14:16 | 显示全部楼层
每家狗都不一样的,有白的,黑的,公的,母的
 楼主| Devil松 发表于 2012-5-7 15:49 | 显示全部楼层
是啊,我知道,可这不都是ATMEL家的吗?同是AT89s51,差别这么大呢,歧视吗?
 楼主| Devil松 发表于 2012-5-7 16:01 | 显示全部楼层
每家狗都不一样的,有白的,黑的,公的,母的
ayb_ice 发表于 2012-5-7 14:16

就是啊,我这狗不都是一样的吗?
 楼主| Devil松 发表于 2012-5-8 14:40 | 显示全部楼层
每家狗都不一样的,有白的,黑的,公的,母的
ayb_ice 发表于 2012-5-7 14:16

请问,这两只狗难道还是不一样的吗?
ayb_ice 发表于 2012-5-8 14:54 | 显示全部楼层
是否一样,具体怎么用,我不知道,就没有什么难度,看手册就行了
一个狗,给他吃饱就行了
有些狗,在喂的时候必须关中断(形象的说的必须栓起来),好的狗必须这样
 楼主| Devil松 发表于 2012-5-11 12:22 | 显示全部楼层
13# ayb_ice
谢谢,有些明白了,只是这个问题,我还得自己研究下。
delin17 发表于 2012-5-11 12:48 | 显示全部楼层
楼主比较一下两个头文件就可以明白是咋回事了
 楼主| Devil松 发表于 2012-5-12 13:20 | 显示全部楼层
15# delin17
谢谢了,我去看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

0

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部