在keil C51中使用结构体的问题

代码如下#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 定时方式2
TCON = 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没有定义,为什么
最新回答
っ半醉巴黎°

2024-12-01 14:10:04

楼主没有搞清楚 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的东西
会对你有帮助

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
你与北诗

2024-12-01 17:06:55

回答你的的问题补充中studen没有定义的原因:你不能用student stu这样定义,因为student不是一个类型名,而要这样定义:struct student stu,这里struct student是你定义的一个结构类型,它是student类型,如果你非得想用student定义的话,需要用到类型转换,在你定义struct student{....}stu前面加typedef,这样就把struct student这种类型转化成student了,就可以像你那样定义了.
咱想幵了

2024-12-01 15:07:03

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

结构体只是我们定义的一种数据结构,是不能再内部赋值的。
一枕庭前雪

2024-12-01 17:19:08

不懂。。。
a:3是什么意思

定义就是这样: int a;
char b:
这样的