例程里这一句,是否多余?
在STC8H8K64U的例程包中,有《11-串口2中断模式与电脑收发测试》这个例程。其中在 UART2_config(2){} 函数中有如下语句:P_SW2 &= ~0x01;
P_SW2 |= 1; //UART2 switch to: 0: P1.0 P1.1,1: P4.6 P4.7
这里P_SW2最后一位是引脚选择位S2_S,设置为1,即实验箱使用的引脚P4.6和P4.7。我的疑问是,这两句只用最后一句就可以让最后一位为1,其他位保持不变,为何又加了第一句,让最后一位先清零?这一句是否有必要?谢谢。(顺便说一句,这个例程中SetTimer2Baudrate,错写成SetTimer2Baudraye,none错写成了nine了)
本帖最后由 电子DIY小家 于 2024-2-23 11:16 编辑
因为这个历程是这样用的:
正常情况下想要用P4.6 P4.7,是不是就按照如下的写法就可以了,
P_SW2 &= ~0x01;
P_SW2 |= 1; //UART2 switch to: 0: P1.0 P1.1,1: P4.6 P4.7
但是如果想要切换到 P1.0 P1.1,是不是就要像下面这样写了
P_SW2 &= ~0x01;
P_SW2 |= 0; //UART2 switch to: 0: P1.0 P1.1,1: P4.6 P4.7
可以看到上面的切换到 P1.0 P1.1引脚上的写法,因为是或等于的写法,如果这个位本身是1那将是无法写入的,所以为了程序的通用,直接先把这个位清0了在写入(这种写法也是为了方便多组引脚选择)。
那么问题来了其实本身,引脚切换也可以直接一行完成,比如:
选择 P4.6 P4.7就是: P_SW2 |= 1;
选择 P1.0 P1.1就是:P_SW2 &= ~0x01;
当然学得好的直接这样写就OK了,但是对于新手这样就不好理解了,尤其是两个位去从四组引脚里选择的这样写就更难了~
谢谢冲哥的解释,明白了!{:4_174:} 电子DIY小家 发表于 2024-2-23 10:04
因为这个历程是这样用的:
正常情况下想要用P4.6 P4.7,是不是就按照如下的写法就可以了,
选择 P4.6 P4.7就是: P_SW2 |= 0;
选择 P1.0 P1.1就是:P_SW2 &= ~0x01;
我认为C51中清零和置位最标准的写法还是需要掌握的,在汇编中也是对应CLR和SET两条指令,这都属于基本操作,没必要考虑新手不好理解的“问题”。 21cnsound 发表于 2024-2-23 11:00
选择 P4.6 P4.7就是: P_SW2 |= 0;
选择 P1.0 P1.1就是:P_SW2 &= ~0x01;
对于上述回复:
首先,选择 P4.6 P4.7就是: P_SW2 |= 0; 这里的0应该改成1.
其次,“清零和置位最标准的写法还是需要掌握的”这个话术本身没有问题,但是退一万步讲万一用户不会呢,示例代码就是回了让用户可以最快的办法上手的。
用这个例子来说,用户拿到这个代码要切换串口引脚只要把00改成40或者80或者c0就好,这不就方便多了,不需要再去想半天的与还是或,老鸟一不小心还容易搞错。
电子DIY小家 发表于 2024-2-23 11:15
对于上述回复:
首先,选择 P4.6 P4.7就是: P_SW2 |= 0; 这里的0应该改成1.
超过1bit的设置,确实用你说的这种写法好。 示例代码能够照顾到不同层次的开发人员,我认为这正是STC的暖心之处,应该给予肯定和表杨。
页:
[1]