44b0头文件位声明如何理解?

hamsun2008   2010-5-19 23:21 楼主
#define BIT_ADC                        (0x1)
#define BIT_RTC                        (0x1<<1)
#define BIT_UTXD1                (0x1<<2)
#define BIT_UTXD0                (0x1<<3)
#define BIT_SIO                        (0x1<<4)
#define BIT_IIC                        (0x1<<5)
#define BIT_URXD1                (0x1<<6)
#define BIT_URXD0                (0x1<<7)
#define BIT_TIMER5                (0x1<<8)
#define BIT_TIMER4                (0x1<<9)
#define BIT_TIMER3                (0x1<<10)
#define BIT_TIMER2                (0x1<<11)
按正常解释这段宏定义如BIT_ADC 展开后是(0x1) 不是一个地址,而不同寄存器的第一位都定义为(0x1)
这该怎么解释,对位操作BIT_ADC=1 具体是怎么实现位的变换?

回复评论 (3)

这个的意思是ADC在相关寄存器的第0位
            RTC在相关寄存器的第1位
           UTXD1在相关寄存器的第2位
依此类推。。。

好处如下:
设寄存器为REG,
如果相把ADC置位为1,则REG|=BIT_ADC;
如果想把ADC清零,则REG&=BIT_ADC;
如果想把ADC和RTC置位,则REG|=(BIT_ADC|BIT_RTC);更多位需置1时依此类推即可;
如果想把ADC和RTC清零,则REG&=~(BIT_ADC|BIT_RTC);更多位需清零,依此类推即可;
是不是很方便,最重要的是它很直观,让读程序的人一眼就能看出你的程序做了什么工作。。。
这的这段宏定义我猜是针对中断相关的寄存器的。。。
点赞  2010-5-20 08:35
1楼说的对,现在的程序都是这么写的。
点赞  2010-5-20 09:06
豁然开朗了啊 谢谢两位
点赞  2010-5-20 15:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复