[求助] c51程序调用不了头文件啊

jiaolvming   2014-6-3 21:00 楼主
写了一个很简单的程序,不知道为什么调用不了头文件啊程序贴上

#include
#include

#define uchar unsigned char

main()
{
        uchar cont;
        uchar i;
        bit wrong=0;
        P1^7=0;
        P1^6=0;
        cont=0x8000;
        i=20;
        while(i--)
        {
                xbyte[cont]=0x88;
                cont++;
  }
        cont=0x8000;
        i=20;
        while(i--)
        {
                if(xbyte[cont]!=0x88)
                {
                        wrong=1;
    }
                cont++;
  }
        while(1)
        {
                if(wrong)
                        P1^7=0;
                else
                        P1^6=0;
  }
}


错误也写上,见图
捕获.PNG

回复评论 (23)

有这种写法吗?P1^7=0;
本人不怎么懂51,只是好奇的问问。
点赞  2014-6-3 21:05
引用: lcofjp 发表于 2014-6-3 21:05
有这种写法吗?P1^7=0;
本人不怎么懂51,只是好奇的问问。

这个是写错了,但是改成sbit定义也是调用不了头文件调用成功了不是c文件下面可以展开Reg51.h的吗?
  • scs
点赞  2014-6-3 21:11
不要沉了啊,求助啊
点赞  2014-6-3 21:12
引用: jiaolvming 发表于 2014-6-3 21:11
这个是写错了,但是改成sbit定义也是调用不了头文件调用成功了不是c文件下面可以展开Reg51.h的吗?

能不能展开或者是设置的问题,或许就没有展开这个功能。
至于你所说的调用不成功,我认为只要编译器没报错,就是成功了。
点赞  2014-6-3 21:14
引用: lcofjp 发表于 2014-6-3 21:14
能不能展开或者是设置的问题,或许就没有展开这个功能。
至于你所说的调用不成功,我认为只要编译器没报 ...

不是吧?我记着build后能正常调用的都是可以展开头文件的
点赞  2014-6-3 21:15
引用: jiaolvming 发表于 2014-6-3 21:15
不是吧?我记着build后能正常调用的都是可以展开头文件的

我只用过ARM版本的MDK,对51的环境不熟,所以我也帮不了太多。
你看看有没有设置的地方,或者你改改错误,是不是最终可以编译成功。
点赞  2014-6-3 21:18
引用: lcofjp 发表于 2014-6-3 21:18
我只用过ARM版本的MDK,对51的环境不熟,所以我也帮不了太多。
你看看有没有设置的地方,或者你改改错误 ...

现在就是那个扩展ram的xbyte用不了,这个东西本来是写在absacc.h里面的,现在调用不了,就报错显示没有定义xbyte
点赞  2014-6-3 21:26
你得开发环境里有这个头文件吗????换个#include试试,还有I/O口用sibt定义之后再用,如LED=P1^6;然后LED=1;xbyte这个数组没有定义
点赞  2014-6-3 21:29
引用: jiaolvming 发表于 2014-6-3 21:26
现在就是那个扩展ram的xbyte用不了,这个东西本来是写在absacc.h里面的,现在调用不了,就报错显示没有定 ...

好像是你的用法不对吧,xbyte是用来做修饰变量类型的吧,例如:xbyte unsigned char *p = (unsigned char *)0x8000;
p[0] = 0x01;
你那样用明显就是语法错误,你确实没声明那样一个数组。
点赞  2014-6-3 21:30
引用: MrKingMCU 发表于 2014-6-3 21:29
你得开发环境里有这个头文件吗????换个#include试试,还有I/O口用sibt定义之后再用,如LED=P1^6;然后LE ...

sbit现在已经加了,现在就剩xbyte报错,说没有定义
点赞  2014-6-3 21:30
引用: lcofjp 发表于 2014-6-3 21:30
好像是你的用法不对吧,xbyte是用来做修饰变量类型的吧,例如:xbyte unsigned char *p = (unsigned char ...

我好像说的不对,因为我不懂51,就是说这么个意思,你可以找找别人的例子参考一下,或者看看编译器手册的说明。
点赞  2014-6-3 21:33
引用: lcofjp 发表于 2014-6-3 21:33
我好像说的不对,因为我不懂51,就是说这么个意思,你可以找找别人的例子参考一下,或者看看编译器手册的 ...

不好意思,是我说错了,你把xbyte改成大写试试呢?
点赞  2014-6-3 21:36
引用: lcofjp 发表于 2014-6-3 21:33
我好像说的不对,因为我不懂51,就是说这么个意思,你可以找找别人的例子参考一下,或者看看编译器手册的 ...

XBYTE定义的是外部地址,可以用在扩展ram,我这个程序就是原封不动写书上的,不知道哪里错了
点赞  2014-6-3 21:37
引用: jiaolvming 发表于 2014-6-3 21:30
sbit现在已经加了,现在就剩xbyte报错,说没有定义

你build all编译之后看看什么问题,还有你说xbyte是用来操作扩展ram的,这个ram是片外ram吗?我记得片内只有EEPROM你xbyte是不是在另一个头文件里面声明的?如果是的话,在main所在的文件里用extern再次声明一下,但是不要初始化,只声明一个数组名就行了。
点赞  2014-6-3 21:42
引用: lcofjp 发表于 2014-6-3 21:36
不好意思,是我说错了,你把xbyte改成大写试试呢?

你简直太棒了,真的要大写
点赞  2014-6-3 21:43
引用: jiaolvming 发表于 2014-6-3 21:30
sbit现在已经加了,现在就剩xbyte报错,说没有定义

你是不是少加载了一个.c文件?
点赞  2014-6-3 21:43
引用: MrKingMCU 发表于 2014-6-3 21:42
你build all编译之后看看什么问题,还有你说xbyte是用来操作扩展ram的,这个ram是片外ram吗?我记得片内 ...

没有,就只是一个c文件,问题是XBYTE没有大写,所以报错
点赞  2014-6-3 21:44
引用: MrKingMCU 发表于 2014-6-3 21:43
你是不是少加载了一个.c文件?

现在已经解决了,谢谢
点赞  2014-6-3 21:46
引用: jiaolvming 发表于 2014-6-3 21:46
现在已经解决了,谢谢

不客气,反正我也没帮上什么忙
点赞  2014-6-3 21:48
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复