找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 436|回复: 5
打印 上一主题 下一主题
收起左侧

单片机S2CON&=~S2TI; 请教大神

[复制链接]
跳转到指定楼层
楼主
ID:299910 发表于 2023-10-13 16:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口通讯里有这样一个语句看不懂:S2CON&=~S2TI;  这条语句的目的是对寄存器  S2CON 的 S2TI位进行软件清零;  
它是不是等价于:    S2CON&(~S2TI);  ?
S2CON 不支持位寻址,那这个语句怎么还可以这么写?这样的操作得出来的结果会是什么 ?
求教大神,谢谢!      



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65956 发表于 2023-10-14 08:43 | 只看该作者
S2TI定议时0x02,那对应的bit.1是1,那~S2TI就是把这个对应位取反即是0,值就等于0xFD,那么把S2CON这个0xFD相与,那么S2CON的bit.1也就是0,即是清发送标志,那样写没毛病
回复

使用道具 举报

板凳
ID:1064915 发表于 2023-10-14 09:01 | 只看该作者
S2RI 定义为 0000 0001 即0x01
或者 sbit S2RI =S2CON^0//说明S2RI是寄存器 S2CON中的第几位
S2TI 定义为 0000 0010 即0x02
或者 sbit S2TI =S2CON^1
这样 当S2RI=1时 S2CON&S2RI 即为非0
当S2RI=0时 S2CON&S2RI 即为0
回复

使用道具 举报

地板
ID:299910 发表于 2023-10-14 13:40 | 只看该作者
谢谢各位大神
大神就是大神 不用看就知道定义过了
S2RI是SCON里的一个位
但是在头文件里把S2RI定义成了0X02,我没看头文件,所以怎么看也看不明白
谢谢各位大神

回复

使用道具 举报

5#
ID:108361 发表于 2023-10-26 18:35 | 只看该作者
教你一个套路,可以用在不能位寻址的寄存器上,
比如MSP430的GPIO输出寄存器

  1. #define BIT0 0x01
  2. #define BIT1 0x02
  3. #define BIT2 0x04
  4. #define BIT3 0x08
  5. P0 |= BIT0;//P0.0置1,P0.0口输出1
  6. P1 &=~BIT3;//P1.3清0,P1.3口输出0
复制代码

回复

使用道具 举报

6#
ID:1097455 发表于 2023-10-27 09:55 | 只看该作者
那样写的语法是没问题的。对于支不支持位寻址应该还是支持位寻址吧,要不然会报错的或者你看一下程序里有没有宏定义
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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