打印

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

[复制链接]
7673|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
编了关于看门狗的小程序,本来目的也就是测试下,究竟看门狗应该如何初始化,是该先写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 | 只看该作者
要将头文件复制到自己项目文件夹改好后保存,程序里引用要用引号不用括号,看图红框部分。

改头文件.JPG (101.28 KB )

改头文件.JPG

使用特权

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

使用特权

评论回复
6
Devil松|  楼主 | 2012-5-6 15:57 | 只看该作者
为什么你的工程里面不包含startup.A51呢?不解……

使用特权

评论回复
7
Devil松|  楼主 | 2012-5-6 16:10 | 只看该作者

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

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

使用特权

评论回复
8
xuyaqi| | 2012-5-6 17:10 | 只看该作者
我让你把修改的头文件放在自己的工程文件夹是因为keil目录里的头文件是大家公用的随便改不好。startup.A51不是每个工程必需的。

使用特权

评论回复
9
ayb_ice| | 2012-5-7 14:16 | 只看该作者
每家狗都不一样的,有白的,黑的,公的,母的

使用特权

评论回复
10
Devil松|  楼主 | 2012-5-7 15:49 | 只看该作者
是啊,我知道,可这不都是ATMEL家的吗?同是AT89s51,差别这么大呢,歧视吗?

使用特权

评论回复
11
Devil松|  楼主 | 2012-5-7 16:01 | 只看该作者
每家狗都不一样的,有白的,黑的,公的,母的
ayb_ice 发表于 2012-5-7 14:16

就是啊,我这狗不都是一样的吗?

使用特权

评论回复
12
Devil松|  楼主 | 2012-5-8 14:40 | 只看该作者
每家狗都不一样的,有白的,黑的,公的,母的
ayb_ice 发表于 2012-5-7 14:16

请问,这两只狗难道还是不一样的吗?

使用特权

评论回复
13
ayb_ice| | 2012-5-8 14:54 | 只看该作者
是否一样,具体怎么用,我不知道,就没有什么难度,看手册就行了
一个狗,给他吃饱就行了
有些狗,在喂的时候必须关中断(形象的说的必须栓起来),好的狗必须这样

使用特权

评论回复
14
Devil松|  楼主 | 2012-5-11 12:22 | 只看该作者
13# ayb_ice
谢谢,有些明白了,只是这个问题,我还得自己研究下。

使用特权

评论回复
15
delin17| | 2012-5-11 12:48 | 只看该作者
楼主比较一下两个头文件就可以明白是咋回事了

使用特权

评论回复
16
Devil松|  楼主 | 2012-5-12 13:20 | 只看该作者
15# delin17
谢谢了,我去看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

30

帖子

0

粉丝