在keil C51中使用结构体的问题
代码如下#include<reg51.h>#include<stdio.h>voidmain(void){structmybit{inta:3;intb:4;intc:1...
代码如下#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没有定义,为什么 展开
#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没有定义,为什么 展开
4个回答
展开全部
楼主没有搞清楚 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的东西
会对你有帮助
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
楼上说的虽然大多是废话,,对你的项目可以没多少帮助
但是至少有一点是对的..设置成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
结构体只是我们定义的一种数据结构,是不能再内部赋值的。
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
结构体只是我们定义的一种数据结构,是不能再内部赋值的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂。。。
a:3是什么意思
定义就是这样: int a;
char b:
这样的
a:3是什么意思
定义就是这样: int a;
char b:
这样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询