一个关于430单片机,程序语句的问题,请各位多多指教

UCSCTL4 | =SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CLK 和
UCSCTL4 =SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CL 到底有什么区别?
能不能帮解释一下, |= 和 =区别在哪?学了一段时间,发现自己对这个问题很迷惑了,求指教,谢谢

这个问题,我也曾经是很难理解,这里牵涉到两个概念
1,|= 和 = 的基本区别
2,UCSCTL4 在上面的两个方式下会发生什么不一样的变化

这样回答你把,可能比较好理解
1,对于 |= 和 = 的基本区别
直接等于的话,是会把原来的UCSCTL4 的值给抹掉,然后再赋给一个全新的值,就是说和原来的值没有任何关系了。
但是|= 呢,和原来的值有直接的关系,只是拉高了 等于 号后面对应位为1的值,而等于号后面位原来为0的值还是0,原来为1的值还是1,举个例子

UCSCTL4 = 0x1F; // (0b1000 1111)
UCSCTL4 = 0x11;

上面的那句话执行之后,就和开始的值为0x1F值没有任何关系了,最后得到的值就是 0x11;

UCSCTL4 = 0x8F;
UCSCTL4 = 0x11; //(0b0001 0001)
这个执行之后,就和原来的0x1F有关系,实际上就做了一个位运算
0b1000 1111
0b0001 0001 ,拉高最后一位,以及倒数第5位和倒数第8位
-----------------
0b1001 1111
最后的值是 0x1F,原来的倒数第8,3,2位,因为和0一起运算,所以本身是1,最后还是1;

2,UCSCTL4 在上面的两个方式下会发生什么不一样的变化,现在你大概能够明白了把,如果把(SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CL)看成我们上面例子的0x11 的话,那么最后的结果,对于两种运算方式来说,一种是和原来的值有关系,一种是和原来的值没有关系。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-26
首先你要知道 | 是或运算.
其次 a|=b , 这样的写法等同于 a=a|b;
最后 UCSCTL4 | =SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CLK
等同于 UCSCTL4 =UCSCTL4 |(SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CLK )
这样的运算也可以扩展为 a+=b,a-=b等等本回答被网友采纳
第2个回答  2012-06-26
|= 符号前后的值进行或运算后 将值赋给前面的变量
= 仅仅是把后面的值赋给前面的变量

一个关于430单片机,程序语句的问题,请各位多多指教
2,UCSCTL4 在上面的两个方式下会发生什么不一样的变化,现在你大概能够明白了把,如果把(SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CL)看成我们上面例子的0x11 的话,那么最后的结果,对于两种运算方式来说,一种是和原来的值有关系,一种是和原来的值没有关系。

msp430有点困惑啊,跪求高手指导,,,求救求救
所以如果要自学430单片机,可以从他的最小系统开始,也不需要开始就研究高端一点的型号,比如MSP430F149或者MSP430F413就可以,开始的时候重点研究时钟的配置、IO口资源、中断管理系统这些稍微常用的功能,如果吃透了,可以加上UART、AD、定时器包括PWM等等。学习的时候最好手头有一块开发板,功能也不用太复...

单片机汇编语言的几个疑问
我们平时写的比如LJMP MAIN语句,源程序中并未表示出这一点,假设MAIN标志的程序段是从0102H开始的,此句编译后的机器码是02 01 02,02代表LJMP跳转,后两个字节0102则为目标地址,由于使用了2个字节指明目标地址,所以其范围就是整个64K的空间,没有限制;AJMP在这一点上就要差些,只能在所在的2K页...

各位单片机高手,哪位帮我分析一下下面这个程序,问题出...
回答:首先给你解释一下“<<”位移符的作用: 因为你的P1=0xfe,二进制数据就是11111110,左移一位之后为11111100,0往左移了一位,但是最低位系统自动以0补齐,而0x7f的二进制数据位01111111,所以if语句是永远进入不了的。 当然,针对此问题,C51给出了一个解决方案: 使用_crol_()函数可解决此问题...

单片机程序菜鸟问题
最后那一句就是取出最高位的进位的,也即最高位第七位。再教你一个小知识,两个数相加,结果最多只比原来数字多一位,并且多出的这位数字不会超过1,比如9+9,最多只是18,即十位是1,不会是2到9的,在比如说99+99=198,嘿嘿。懂了吧 虽然我不用汇编写程序,但是看懂还是很容易的 ...

关于单片机C语言的问题
5:a(),b(),c()函数同主程序一样,不会影响中断服务程序的执行,除非里面包含有影响中断的语句,例如开关中断等;6:程序是按语句顺序一句一句连续执行的,所谓单步运行状态,是通过开发系统中的监控程序和硬件的帮助,让用户程序运行一条指令就停止,目的是便于调试。实际在用户系统中运行的程序是没有...

用C语言编写程序使MSP430单片机实现数字时钟(显示年月日,时分秒,最好...
我以前倒是做过,不过程序还有点问题,调时间的时候容易过界,但正常走时候就正常了。开发环境用的IAR,单片机用f149,显示用的1602的四线模式。你自己看着改程序吧,其实我也是51上移植过去的。悲剧了,帖不下了.我帖在我博客里了啊,自己去找吧.主程序___分隔线___#include <msp430x14x.h>#include "ds1302....

如何理解这段单片机程序. 各位大侠,请解释一下。我搞不明白,为什么会这 ...
++c的意思就是c先自加1然后再进行运算,你的程序中,刚开始程序是不执行if语句里面的这些语句的 但是c要先加一然后再判断是不是比300大,知道第三百次到了,c值就变成300了,if语句的条件就满足,这时候才执行{ LedNumVal++ ; \/\/每隔300个扫描周期加一次 C =0; \/\/每隔300个扫描清零 }...

关于单片机C程序的一个菜鸟级问题
首先,要搞清楚语句的含义 P2=0x40 是把0x40即二级制01000000B赋值给P2端口从高到低的八个引脚 同理,P2=0x80 即把八位二进制数 1000 0000B 赋值给P2端口 由此可以推知,同时满足P2.7=1、P2.6=1并且其余P2端口为0的赋值语句就是 P2=0xC0 最后,回答楼主的问题 (1)可以直接赋值 P2=0x...

单片机程序执行顺序问题
LJMP MAIN;转到主程序处 ORG 0003H LJMP INT0;转到中断0处 ORG 0013H LJMP INT1;转到中断1处 ORG 0030H MAIN: 主程序开始的地方 如果在程序运行中碰到有中断申请时,程序将自动转到中断处去执行,根据申请中断标志来判断转到那个中断处执行程序,ORG 003H 中的003H是51系列单片机生产厂家规定的...

相似回答