代码如下#include<reg51.h>#include<stdio.h>void main(void){struct mybit{int a:3;int b:4;int c:1;}bit; SCON = 0x50; //串口方式1,允许接收TMOD = 0x20; //定时器1 定时方式2TCON = 0x40; //设定时器1 开始计数TH1 = 0xE8; //11.0592MHz 1200 波特率TL1 = 0xE8;TI = 1;TR1 = 1; //启动定时器bit.a=7; printf("a=%d\n",bit.a);提示是a没有定义.是不是要经行什么设置啊?我期望是在串行窗口中看到输出结果,这样的话要经行哪些设置?你们说的我都知道.上面的是在一本书上看到的位结构体,格式就是那样定义的.中午我像你们那样试过,报错了,但是现在再试了一遍,居然通过了,可能哪里错了.我定义struct student{....}stu;是通过了.但是struct student{......};student stu;报错说student没有定义,为什么
楼主没有搞清楚 51的 结构.楼上说的虽然大多是废话,,对你的项目可以没多少帮助但是至少有一点是对的..设置成xdata可以解决你的问题.虽然不是什么好办法.51的 ram 分外三种.内部直接寻址你的128byte 内部间接的128byte还有就是外部 ram你的51单片机有512byte那么肯定是 内部 直接 间接各128外加外部256字节你把那些大一点的数据全部改成 xdata 声明就可以了.当然如果你会控制ram大小的话..用idata 声明效率更好一点例如 unsigned char yy;写个成 unsigned char xdata yy;(你看你自己的编译结果显示 data=137, xdata=0, code=4856就应该猜测一下 xdata 干吗用的了 最后 建议楼主. 最好不用在keil c51里面使用printf函数(浪费啊)回去.仔细看一遍51的结构..然后看看keil c51的区别于ansi c的东西会对你有帮助 如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
回答你的的问题补充中studen没有定义的原因:你不能用student stu这样定义,因为student不是一个类型名,而要这样定义:struct student stu,这里struct student是你定义的一个结构类型,它是student类型,如果你非得想用student定义的话,需要用到类型转换,在你定义struct student{....}stu前面加typedef,这样就把struct student这种类型转化成student了,就可以像你那样定义了.
int a:3;int b:4;int c:1;这是什么意思?struct mybit{int a;int b;int c;}bit={3,4,1};这样初始化或bit.a=3;bit.b=4;bit.c=1;请注意bit是一个特殊字符,为安全起见请不要用bit结构体只是我们定义的一种数据结构,是不能再内部赋值的。