typedef struct bit0 : 1

这句话定义了一个位域,bit0是该位域的域名,而且bit0只占用一个位。
位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。

 

#define Uint unsigned int
typedef struct
{
Uint bit0  : 1;
Uint bit1  : 1;
Uint bit2  : 1;
Uint bit3  : 1;
Uint bit4  : 1;
Uint bit5  : 1;
Uint bit6  : 1;
Uint bit7  : 1;
Uint bit8  : 1;
Uint bit9  : 1;
Uint bit10 : 1;
Uint bit11 : 1;
Uint bit12 : 1;
Uint bit13 : 1;
Uint bit14 : 1;
Uint bit15 : 1;
}Bit;



typedef struct
{
Uint bytel  : 8;
Uint byteh  : 8;
}Byte;

typedef union
{
Bit bit;
Byte byte;
Uint port;
}UNport;




#define PA      ((volatile UNport *)(0x7000))
#define PA_Buffer  ((volatile UNport *)(0x7001))
#define PA_Dir    ((volatile UNport *)(0x7002))
#define PA_Attrib    ((volatile UNport *)(0x7003))
#define PA_Latch    ((volatile UNport *)(0x7004))
#define PB      ((volatile UNport *)(0x7005))
#define PB_Buffer    ((volatile UNport *)(0x7006))
#define PB_Dir    ((volatile UNport *)(0x7007))
#define PB_Attrib    ((volatile UNport *)(0x7008))
#define Poscu      ((volatile UNport *)(0x7013))
#define Ptbu      ((volatile UNport *)(0x700e))
#define Ptbc      ((volatile UNport *)(0x700f))
#define Pt0    ((volatile UNport *)(0x700a))
#define Pt1      ((volatile UNport *)(0x700c))
#define Pt0u      ((volatile UNport *)(0x700b))
#define Pt1u      ((volatile UNport *)(0x700d))
#define Pintu    ((volatile UNport *)(0x7010))
#define Pintc    ((volatile UNport *)(0x7011))
#define Padm      ((volatile UNport *)(0x7014))
#define Padl    ((volatile UNport *)(0x702c))
#define Padu      ((volatile UNport *)(0x7015))
#define Padmuxu  ((volatile UNport *)(0x702b))
#define Pda0      ((volatile UNport *)(0x7017))
#define Pda1      ((volatile UNport *)(0x7016))
#define Pdau      ((volatile UNport *)(0x702a))
#define Pwdogc    ((volatile UNport *)(0x7012))
#define Pflashu  ((volatile UNport *)(0x7555))



//-------------------------------------------------------------------------------------------------------



//以下部分在编程中直接调用使用;



#define Watchdog_Clear  Pwdogc->port



#define P0_0  PA->bit.bit0
#define P0_1  PA->bit.bit1
#define P0_2  PA->bit.bit2
#define P0_3  PA->bit.bit3
#define P0_4  PA->bit.bit4
#define P0_5  PA->bit.bit5
这种结构体定义方式书上没有解释?不明白什么意思?Uint bit: 1;
: 1?没见过?为什么这样可以将凌阳单片机的接口进行位定义?

回答:

一.

typedef struct 
{ 
Uint bit0 : 1; 
Uint bit1 : 1; 
Uint bit2 : 1; 
Uint bit3 : 1; 
Uint bit4 : 1; 
Uint bit5 : 1; 
Uint bit6 : 1; 
Uint bit7 : 1; 
Uint bit8 : 1; 
Uint bit9 : 1; 
Uint bit10 : 1; 
Uint bit11 : 1; 
Uint bit12 : 1; 
Uint bit13 : 1; 
Uint bit14 : 1; 
Uint bit15 : 1; 
}Bit; 
这个结构体有16个单元,每个单元一位,正好可以用于单片机中的数据保存和读取问题.应该是16位机吧

二.

 

typedef struct 
{ 
Uint bit0 : 1; 
Uint bit1 : 1; 
Uint bit2 : 1; 
Uint bit3 : 1; 
Uint bit4 : 1; 
Uint bit5 : 1; 
Uint bit6 : 1; 
Uint bit7 : 1; 
Uint bit8 : 1; 
Uint bit9 : 1; 
Uint bit10 : 1; 
Uint bit11 : 1; 
Uint bit12 : 1; 
Uint bit13 : 1; 
Uint bit14 : 1; 
Uint bit15 : 1; 
}Bit; 

每个成员各自占1个bit,这是按bit位来定义结构体的 

 

 
 

转载于:https://www.cnblogs.com/shirishiqi/p/5434163.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值