单片机ADC转换

单片机ADC转换启动ADC转换为什么要加个非号... 单片机ADC转换启动ADC转换为什么要加个非号 展开
 我来答
11kxmx
2016-11-07 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:70%
帮助的人:2513万
展开全部

ADC转换启动ADC转换不是加个非号,竖杠是"或'运算符

是将寄存器的控制位 置 1

ADC_CONTR|=0x08, 相当于ADC_CONTR=ADC_CONTR|0x08,

0x08二进制是 0000 1000

就 是将ADC_CONTR的第4位(D3)置1,其它位不变,如下图该位正是启动ADC的控制位

追问
这样不是一样把控制位置1了吗ADC_CONTR=0x08
追答
如果是可位寻址的寄存器就很好办,如定时器控制,直接TR0=1或TR0=0
但该寄存器不可位寻址,想单独操作其某一位,只能用这种方法
如果直接用ADC_CONTR=0x08是把启动控制位置1了,但你考虑其它位了吗?你凭什么都给它置0?你这一操作,以前的设置不就废了吗?用上述"或"操作就可以避免这个问题,只对你感兴趣或用得着的位进行单独操作,而其它位我们不随便去置1或清0,保持原样
常见的还有单独对某一位清0 如 P1&=~0X80,只清P1的最高位,其余位不变(只因P1是可位寻址的,所以我们可以直接写P1^7=0,而不必用这样的"与""反"操作)
还有单独对某一位取反用"异或"操作
还有TMOD寄存器,也不可位寻址,,也可以统一设置,如定时器1工作在16位计数模式,定时器0工作在16位定时模式,我们可以设TMOD=0X51
我们也可以单独对其设置,TMOD|=0X50 TMOD|=0X01,好象第二种方法还复杂一些
但寄存器位数很多时,单独操作的优越性显而易见,我们不必纠结其它位该怎么设置,只对感兴趣的位进行操作
百度网友84be164ada
2016-11-07 · TA获得超过574个赞
知道小有建树答主
回答量:652
采纳率:57%
帮助的人:243万
展开全部
那不是非是或等于!!!ADC_CONTR = ADC_CONTR | 0x08;就是把ADC_CONTR的bit3置1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式