找回密码
 立即注册
查看: 261|回复: 8

例程里这一句,是否多余?

[复制链接]
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 116 天

    [LV.6]常住居民II

    11

    主题

    87

    回帖

    256

    积分

    中级会员

    积分
    256
    发表于 2024-2-23 09:38:49 | 显示全部楼层 |阅读模式
    在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了)


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6771

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6771
    QQ
    发表于 2024-2-23 10:04:56 | 显示全部楼层
    本帖最后由 电子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了,但是对于新手这样就不好理解了,尤其是两个位去从四组引脚里选择的这样写就更难了~

    点评

    这就是新手的照葫芦画瓢么0.0 P_SW2 |= 0; 哈哈哈  发表于 2024-2-23 10:59
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 116 天

    [LV.6]常住居民II

    11

    主题

    87

    回帖

    256

    积分

    中级会员

    积分
    256
     楼主| 发表于 2024-2-23 10:51:58 | 显示全部楼层
    谢谢冲哥的解释,明白了!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 96 天

    [LV.6]常住居民II

    9

    主题

    554

    回帖

    809

    积分

    高级会员

    积分
    809
    发表于 2024-2-23 11:00:36 | 显示全部楼层
    电子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两条指令,这都属于基本操作,没必要考虑新手不好理解的“问题”。

    点评

    对于上述回复: 首先,选择 P4.6 P4.7就是: P_SW2 |= 0; 这里的0应该改成1. 其次,“清零和置位最标准的写法还是需要掌握的”这个话术本身没有问题,但是退一万步讲万一用户不会呢,示例代码就是回了让用户可以最  详情 回复 发表于 2024-2-23 11:15
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6771

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6771
    QQ
    发表于 2024-2-23 11:15:42 | 显示全部楼层
    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.
    其次,“清零和置位最标准的写法还是需要掌握的”这个话术本身没有问题,但是退一万步讲万一用户不会呢,示例代码就是回了让用户可以最快的办法上手的。
    截图202402231114145002.jpg

    用这个例子来说,用户拿到这个代码要切换串口引脚只要把00改成40或者80或者c0就好,这不就方便多了,不需要再去想半天的与还是或,老鸟一不小心还容易搞错。

    点评

    让用户最快的办法上手,,并不是这样无意义的写法,,而且封装好相应功能的API,用 中文 详细的描述API的使用方法和注意事项。  发表于 2024-2-23 14:04
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 96 天

    [LV.6]常住居民II

    9

    主题

    554

    回帖

    809

    积分

    高级会员

    积分
    809
    发表于 2024-2-23 11:53:27 | 显示全部楼层
    电子DIY小家 发表于 2024-2-23 11:15
    对于上述回复:

    首先,选择 P4.6 P4.7就是: P_SW2 |= 0; 这里的0应该改成1.

    超过1bit的设置,确实用你说的这种写法好。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 110 天

    [LV.6]常住居民II

    34

    主题

    164

    回帖

    401

    积分

    中级会员

    积分
    401
    发表于 2024-2-26 16:36:42 | 显示全部楼层
    示例代码能够照顾到不同层次的开发人员,我认为这正是STC的暖心之处,应该给予肯定和表杨。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 15:11 , Processed in 0.071370 second(s), 57 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表