打印

不能编译的错误

[复制链接]
3505|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyf部长|  楼主 | 2013-1-2 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c编程都容易出现哪些错误使其不能编译
沙发
zyf部长|  楼主 | 2013-1-2 10:35 | 只看该作者
sbit h_bit=com_data^7;
    sbit l_bit=com_data^0;这段代码总提示出错不能编译,用kiel编译

使用特权

评论回复
板凳
houcs| | 2013-1-2 10:37 | 只看该作者
可能 com_data 需要定义在位变量区才能引用它的某个位吧.

使用特权

评论回复
地板
zyf部长|  楼主 | 2013-1-2 10:37 | 只看该作者
com_data我定义完了“bdata uchar com_deta;”

使用特权

评论回复
5
liuzaiy| | 2013-1-2 10:38 | 只看该作者
"bit是在20h~2fh空间分配的,sbit其实是给特殊功能位取别名" 书上的话。其实我也不太懂,
也许把sbit换成bit就没错了。没安装KEIL,试不了。

使用特权

评论回复
6
yinxiangh| | 2013-1-2 10:38 | 只看该作者
sfr     表示声明特殊功能寄存器,比如sfr    P0  =  0x80;表示P0端口的地址是0x80,这个sfr可以理解成特殊功能寄存取别名也好。

使用特权

评论回复
7
houcs| | 2013-1-2 10:40 | 只看该作者
这个时候,我们sbit     P01   =   P0^1;表示  P0口的8位中的第二位。
当然,我们不能bit     P01   =  P0^1;因为sbit表示声明位地址,而bit是定义位变量。

bdata   为RAM中0x20~0x30的空间,这个空间可以位寻址,一般来说,定义位变量就定义在这里。
bdata   uchar  com_deta;真不明白,为什么在位寻址区定义字节变量?RAM中0x30~0x80(data   uchar ----)是字节可寻址区,为什么不定义到这里呢?

使用特权

评论回复
8
liuzaiy| | 2013-1-2 10:40 | 只看该作者
建议你多看看单片机内部空间原理,为什么区分这些空间定义呢,空间定义的不同,寻址方式也不同,速度快或指令时间多少等问题,书上解释很多。

使用特权

评论回复
9
pangb| | 2013-1-2 10:42 | 只看该作者
com_deta是一个变量,而不是一个地址,所以不能声明位地址。

使用特权

评论回复
10
chenjunt| | 2013-1-2 10:42 | 只看该作者
我想编一个AT24C02驱动程序用到了位,那吧他定义为 data  uchar com_data呗!

使用特权

评论回复
11
ousj| | 2013-1-2 10:44 | 只看该作者
不行!

使用特权

评论回复
12
zyf部长|  楼主 | 2013-1-2 10:44 | 只看该作者


    #define K1 P2^6
    #define B P2^7
    #define CSL P3^5
    #define SDA P3^4
    #define uchar unsigned char
    #define uint unsigned int
    data uchar com_deta;   //将bdata改成了data
    sbit h_bit=com_data^7;
    sbit l_bit=com_data^0;
    uchar code key[4]={0xfe,0xfd,0xfb,0xf7};  //键盘扫描控制信号
    uchar data a[13],b[13];       //定义存储密码的数组a,b,c
    uchar suzu=0;
    uint time=0,relieve=0;
    bit biaozi1=0,biaozi2=0,biaozi3=0;我的程序代码!

使用特权

评论回复
13
morrisk| | 2013-1-2 12:30 | 只看该作者
“data uchar com_deta;   //将bdata改成了data
    sbit h_bit=com_data^7;
    sbit l_bit=com_data^0; ”
上面肯定是不对的,你原来的才是对的
#include<AT89X52> 少了点东西!这是关键

使用特权

评论回复
14
morrisk| | 2013-1-2 12:31 | 只看该作者
#define K1 P2^6
    #define B P2^7
    #define CSL P3^5
    #define SDA P3^4
上面这种方式从未见过
正确的是:sbit K1=P2^6

使用特权

评论回复
15
小小猫咪| | 2013-1-2 12:32 | 只看该作者
unsigned char bdata com_data;
sbit k1=com_data^0;

这个是可以的,不过要在函数外定义为全局变量,不能在将其在函数内定义为局部变量.

使用特权

评论回复
16
zyf部长|  楼主 | 2013-1-2 12:32 | 只看该作者
我查书了,有些人是unsigned char bdata com_data;
sbit k1=com_data^0;定义的,bdata是可按位寻址的储存区,应该没问题!

使用特权

评论回复
17
zyf部长|  楼主 | 2013-1-2 12:34 | 只看该作者
经过一番的修改现在KEIL提示C(132): warning C206: '_nop_': missing function-prototype
C(132): error C264: intrinsic '_nop_': declaration/activation error是什么情况?提示是 SDA=1;_nop_();_nop_();_nop_();_nop_();行我用bdata定义的com_data;

使用特权

评论回复
18
zyf部长|  楼主 | 2013-1-2 12:34 | 只看该作者
缺少一个头包含文件!
闪人

使用特权

评论回复
19
kangzj| | 2013-1-2 12:36 | 只看该作者
13L早给你指出来了

使用特权

评论回复
20
zyf部长|  楼主 | 2013-1-2 12:36 | 只看该作者
哦, 呵呵。。。结贴啦

使用特权

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

本版积分规则

694

主题

7102

帖子

8

粉丝