中易网

STC公司单片机为什么宏定义的地址,比喻#define ADC_POWER 0x80 ;为什么不可以直接拿来用呢?

答案:1  悬赏:60  
解决时间 2021-01-13 17:03
  • 提问者网友:嗝是迷路的屁
  • 2021-01-13 13:31
STC公司单片机为什么宏定义的地址,比喻#define ADC_POWER 0x80 ;为什么不可以直接拿来用呢?
最佳答案
  • 二级知识专家网友:平生事
  • 2021-01-13 13:53
估计 ADC_POWER 所在的寄存器不可位寻址,所以不能直接对其置1或清0
该寄存器地址不是8的整倍数
一般#define ADC_POWER 7 ;
然后 置1 清0可以这样操作
ADC_CONTR|=1#define ADC_POWER 0x80 ;
ADC_CONTR|= ADC_POWER
ADC_CONTR&= ~ADC_POWER
本人也犯过类似错误
#define ADC_POWER 0x80 ; 宏定义ADC_POWER的数值是 0x80,正确的
ADC_POWER=1 让一个数值等于另一个数值,所以是错误的
ADC_POWER 并不是特殊功能寄存器 它只是殊功能寄存器ADC_CONTR中的一位
声明特殊功能寄存器的方法是sfr ADC_CONTR=0xBC追问是的,就是sfr ADC_CONTR其中的一位,不可以直接拿下来用,可以用: 与,或,非,它也没有写不可寻址啊,就是直接用不了!

追答51单片机的特殊功能寄存器地址不能被8整除的都不可位寻址
低位必须是0或8才能位寻址,如0x80 0x88 0x90等
而ADC_CONTR的寄存器地址是 0xBC追问噢,原来这样啊,做个AD都伤脑筋啊!!谢谢大师哈
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息