SFR

#ifdef __IAR_SYSTEMS_ICC__
#pragma language=extended   //允许使用扩展关键字

#define SFR(name,addr)   __sfr   __no_init  volatile  unsigned char  name @ addr;
#define SFRBIT(name, addr, bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0) \
__sfr __no_init volatile union \
{                              \
  unsigned char name;          \
  struct {                     \
    unsigned char bit0 : 1;    \
    unsigned char bit1 : 1;    \
    unsigned char bit2 : 1;    \
    unsigned char bit3 : 1;    \
    unsigned char bit4 : 1;    \
    unsigned char bit5 : 1;    \
    unsigned char bit6 : 1;    \
    unsigned char bit7 : 1;    \
  };                           \
} @ addr;


 #define DEFC(name, address)      __no_init volatile unsigned char name @ address


比如: __no_init volatile unsigned char   fuck @ 0x5000;
可以写作:   DEFC(fuck,   0x5000  )


__no_init 不初始化,@ address  指定具体存储位置,volatile 非易失性的。



一般用SFRBIT的话可以用自己自定义的名称,来分别代表一个byte中的某个位
比如
 
SFRBIT( P1, 0x90, P1_7, P1_6, P1_5, P1_4, P1_3, P1_2, P1_1, P1_0 );
 
SBIT(P1_7 ,  0x97); 
 
但一般编译器的相关chip的头文件中都定义了,开发人员无须再定义。

sfr就是给功能寄存器一个名字,以后可以用名字访问功能寄存器,因为对功能寄存器的访问是通过地址来访问的。
sbit也是这样。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值