请教STC15系列单片机中的AUXR寄存器使用,AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
这里面的AUXR明明是一个寄存器,为什么分开写? 为什么第二个是 AUXR “|”这里面的 |是什么意思?
我是不是可以直接写成:AUXR = 0x14; (既允许打开定时器2,定时器2是8051 12倍,不分频。又可以直接选择定时器2 位UART1的波特率发生器)?
两个问题。
,要合并就是 AUXR = 0x15; 第二句话是位操作,将0x01按位或到AUXR。,合并后为: AUXR = 0x15;
AUXR |= 0x01; 是按位或 0x01 到 AUXR 的意思
,这句写错了:
是:我是不是可以直接写成:AUXR = 0x15; (既允许打开定时器2,定时器2是8051 12倍,不分频。又可以直接选择定时器2 位UART1的波特率发生器)?,合并后为: AUXR = 0x15;
| 是按位或 的意思,写错了一句:我是不是可以直接写成:AUXR = 0x15; (既允许打开定时器2,定时器2是8051 12倍,不分频。又可以直接选择定时器2 位UART1的波特率发生器)?,
pcbboy 发表于 2019-10-7 09:11
合并后为: AUXR = 0x15;
AUXR |= 0x01; 是按位或 0x01 到 AUXR 的意思
往往是最基本的容易疏忽,谢谢。之前一直用“||”(对应一个字节),没用过单个“|”(对应字节中的某位)。
扩展了一个问题,如果我相对AUXR 第二位单独操作,应该怎么写? AUXR | = 0x02?;第三位单独操作,应该
写成: AUXR | = 0x04;。。。第8位“AUXR | = 0x80”.,我们人人学会单片机的课程,就是这样操作的,意思就是,你单独控制某一位,而其他位则是保持不变。郭傻瓜得课程,就是直接赋值了,是不安全的写法。,
人人学会单片机 发表于 2019-10-7 12:36
我们人人学会单片机的课程,就是这样操作的,意思就是,你单独控制某一位,而其他位则是保持不变。郭傻瓜得 …
1.他也是单独控制寄存器的某一位,假如控制 SCON寄存器中的 REN(第5位),人家直接写REN=1,不用就 REN=0,也挺好理解。
你的可以写成:SCON | = 0x10。
你们 是一样的 。
2.对于控制位还是控制字节,我感觉对于初学者不了解的,使用位控制,可以使他们充分理解寄存器功能。
对于比较熟练的,直接进行字节赋值,可以减少程序长度。,STC15系列单片机中的AUXR寄存器不支持位操作,这是一个特殊功能寄存器,并且各个位的功能甚至没有直接关联。因此对其中某一位或某几位操作时不能随意改变其它位的状态,所以用按位与“&”和按位或“|”的方式操作其中某一位或某几位就不会改变其它位的状态。这个方法同样适用于支持位操作的寄存器,可以使代码简洁高效。