This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

初学者关于寄存器加法运算的疑问



有几个例子:

1. BCSCTL2 = SELM_3 + DIVM_2 + SELS; 这个说明SELM选10,DIVM选01(/2),SELS选0

这样的解释正确吗?

2. P1DIR = ZERO_CROSSING_OUT + SEGMENT_OUT; (设置ZERO_CROSSING_OUT为Bit6, 设置SEGMENT_OUT为Bit0)

那这个该怎么解释呢?

3. DCOCLK =  0x60 + 0x00;

是否就等于0x60?

若能解答真的很谢谢,卡了很久了

  • 这些个加法,并不是你说的寄存器的加法运算,而是普通的无符号数加法运算后对特殊功能寄存器进行赋值。

    1. SELM_3 、 DIVM_2 、 SELS是宏定义,你找找它代表什么(应该是在头文件里面), 加在一起赋值给寄存器后看看对应的寄存器各个位处于什么状态;

    2. ZERO_CROSSING_OUT 、 SEGMENT_OUT也是宏定义,同上解释;

    3.是的,不需怀疑。

  • 我具体说一下过程,你看看我说得对不对:

    1,BCSCTL2 = SELM_3 + DIVM_2 + SELS

    SELMx位取10(XT2CLK when XT2 oscillator present on-chip. LFXT1CLK or VLOCLK when XT2 oscillator not present on-chip)

    DIVMx位取01(/2)

    SELS位0(DCOCLK)

    所以最后BCSCTL2就是:10010000

     

    2,ZERO_CROSSING_OUT和SEGMENT_OUT都是在头文件里自己定义的,分别是Bit6和Bit5

    所以最后P1DIR就是:00(Z_C_O)(S_O)00000

     

    你看看我这样做是不是就对了

    很感谢啊!

  • 我具体说一下过程,你看看我说得对不对:

    1,BCSCTL2 = SELM_3 + DIVM_2 + SELS

    SELMx位取10(XT2CLK when XT2 oscillator present on-chip. LFXT1CLK or VLOCLK when XT2 oscillator not present on-chip)

    DIVMx位取01(/2)

    SELS位0(DCOCLK)

    所以最后BCSCTL2就是:10010000

     

    2,ZERO_CROSSING_OUT和SEGMENT_OUT都是在头文件里自己定义的,分别是Bit6和Bit5

    所以最后P1DIR就是:00(Z_C_O)(S_O)00000

     

    你看看我这样做是不是就对了

    很感谢啊!

  • 第一个问题详细告诉你:

    BCSCTL2基本时钟系统控制寄存器2,各位定义:

     

    7

     

    6

     

    5

     

    4

     

    3

     

    2

     

    1

     

    0

    SELM.1

     

    SELM.0

     

    DIVM.1

     

    DIVM.0

     

    SELS

     

    DIVS.1

     

    DIVS.0

     

    DOCR

    SELM.1,SELM.0   选择 MCLK 时钟源。

    0            0          时钟源为 DCOLCK(默认时钟源);

    0           1        时钟源为DCOCLK ;

    1            0        时钟源为LFXTlCLK(对于MSP430Fll/l2X),时钟源为XT2CLK(对于MSP430F13/14/15/16X);

    1              1      时钟源为 LFXT1CLK 。此处SELM_3=0xc0即1100 0000,时钟源选择为LFXT1CLK

    DIVM.1,DlVM.0   选择 MCLK 分频。

    0              0             1 分频(默认MCLK=DCOCLK);

    0              1             2分频;

    1             0             4分频;此处DIVM-2即0x20, 0010 0000,四分频

    1              1            8分频。

    其他不再写了,编辑这个累死人

    即0b1100 0000+0b0010 0000+0b0000 1000=0b1110 1000,对照上表即可看出如何对寄存器配置

     

    第二个问题一样的回答

  • 啊呀,明白了!十分感谢!十分感谢!