鱼C论坛

 找回密码
 立即注册
查看: 1455|回复: 9

不懂C语言中的符号在单片机中的作用

[复制链接]
发表于 2021-12-1 18:19:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
“|=”是什么意思
“&&”按位与是啥意思
“~”是啥,球球大佬来个详细的解释 屏幕截图 2021-12-01 181835.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-1 18:26:52 | 显示全部楼层
这东西难道不是百度一下就出来了么,显然,这是某种运算符,下面是我找的过程和找到的结果,我觉得楼主最需要学习的是自己找资料的能力,因为很多问题是没人知道的,但是可能你自己百度一下就会有答案~
百度,c语言|=单片机 ,然后搜到了一个条目叫做   单片机c语言教程
然后在里面找运算符关键字
找到这个
+=

加法赋值

>>=

右移位赋值

-=

减法赋值

&=

逻辑与赋值

*=

乘法赋值

|=

逻辑或赋值

/=

除法赋值

^=

逻辑异或赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 18:28:02 | 显示全部楼层
不晓得你的单片机编程代码方法,但是一般这些符在电子学上就是逻辑门(Logic Gates),以 1 为高电位,0 为低电位,和数学逻辑符 或者 程序语言位元符 类似。
| 符表示 OR
& 符表示 AND
^ 符表示 XOR
~ 符表示 Inverter

这四种逻辑可以延伸更多逻辑,如图:

逻辑门.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-1 20:13:44 | 显示全部楼层
lightninng 发表于 2021-12-1 18:26
这东西难道不是百度一下就出来了么,显然,这是某种运算符,下面是我找的过程和找到的结果,我觉得楼主最需 ...

不是我不知道那个叫啥,是因为我百度之后,发现感觉百度说的都说得很空洞,我看了是逻辑是赋值,可是没有结合例子说,我看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-1 20:19:54 | 显示全部楼层
lightninng 发表于 2021-12-1 18:26
这东西难道不是百度一下就出来了么,显然,这是某种运算符,下面是我找的过程和找到的结果,我觉得楼主最需 ...

file:///C:/Users/86166/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202021-12-01%20201829.png你确定能理解?所以我才问问能不能讲一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 20:57:32 | 显示全部楼层
smandjd 发表于 2021-12-1 20:19
你确定能理解?所以我才问问能不能讲一下


感觉你可能需要系统找个课先学一遍~~~
另外,对我的草率表示抱歉,因为最近自己啥也不研究就直接上来提问的人太多了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 09:54:14 | 显示全部楼层
这东西要对应单片机的寄存器来看,很明显这是在配置寄存器对ADC进行初始化或者是其他什么功能进行配置,慢慢把对应的寄存器看过了,你就知道在干什么了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-17 10:50:42 | 显示全部楼层
改寄存器用的比较多吧。另外&才是按位与。你可以把寄存器看做是一种开关。只不过这个开关都是八个开关放一起的,(八位单片机吗)正好一个char型变量就是8位,所以你往这个寄存器里写东西,就是开关这8个开关。
比如TMCON=0x00;//(0000 0000)就是8位全写0,关闭所有开关,停止所有使能。
TMCON=0x88;//(1000 1000)就是最高位写1,第四位写1。打开这两个开关。

那么就有问题了,你家8个灯。你不能每次用都把8个开关一起改吧?比如你爸刚刚上厕所,开了厕所灯。TMCON=0x01;你妈然后说她要给你们做饭了,再开厨房TMCON=0x11;然后你进了卧室TMCON=0x19;....太费劲了,如果一不小心,你忘记了你爸在上厕所,进了卧室以后来一句TMCON=0x08;
厨房厕所灯都给关了....你肯定想说不能把灯开关分开吗?

那咋办?来一句TMCON |=0x08;按位或,指定位置写1。TMCON &=0xF7;按位与,指定位置写0。那就只会改卧室灯的状态。别的不改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-8 00:17:05 | 显示全部楼层
以此为例解释:if(adc ==ADC_1 && ( (ch&0xF00) == 0xF00 ) )
                       adc_index[adc]->ADCFG |= ADC_CFGR_VEN;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
问题1 “|=”是什么意思?
首先把“|”和“=”分开看“|”是“按位或”的意思,“=”是赋值的意思,
举个例子a=1010,b=0001,那么a|b的结果是1011
那a|=b的意思就是a=a|b,举一反三你猜猜a+=b是什么意思?
回到代码中  
adc_index[adc]->ADCFG  =  adc_index[adc]->ADCFG  |  ADC_CFGR_VEN;
这样会不会算呢?
//////////////////////////////////////////////////////////////////////////////////////////////////////////
问题2 “&&”按位与是啥意思?
首先&&是什么?
&& (逻辑与):(三种),下面的真假就是1和0
a. 当&&左边为false(假),则不再进行逻辑与右边的判断,结果为false(假)
b. 当&&左边为true(真)则进行右边判断,右边为false(假),结果为false(假)
c. 当&&左边为true(真)则进行右边判断,右边也为true(真),则结果为true(真)
那么回到代码中
①看 && 右侧,计算(ch&0xF00)的结果,得出结果后判断是否等于0xF00 ,
   即((ch&0xF00) == 0xF00 ),如果相等结果为真也就是1,如果不相等结果为假也就是0;
②看 && 左侧,adc ==ADC_1 判断adc是否和ADC_1相等,
   即如果相等结果为真也就是1,如果不相等结果为假也就是0;
③此时&&的左侧可能是0或者1,&&的右侧也可能是0或者1;假如&&两侧都是1的话,
   那么1&&1的结果你会不会算呢?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
问题3 “~”是啥?
“~”是按位取反的意思,举个栗子,a=1010,~a=0101;
回到代码中去看
① “~”第一次登场在这句代码 RCC->APB2RSTR &= ~(RC_APB2RSTR_ADC1 << adc);
②先计算括号内RC_APB2RSTR_ADC1 << adc,意思是将RC_APB2RSTR_ADC1左移“adc”位
③将结果按位取反~(RC_APB2RSTR_ADC1 << adc),括号内的结果是0000的话,那按位取反后就是1111
接下来是“&=”这次你应该会算了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-23 15:07:53 | 显示全部楼层
建议你可以买一个msp430的单片机学一下,这个单片机是用寄存器写的,里面好多操作都需要用到这些运算符,比如配置IO口啥的你看看就明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 22:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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