【问题标题】:bitwise operations按位运算
【发布时间】:2010-08-23 10:46:09
【问题描述】:
// PWM frequency:
// 0 - 48 kHz
// 1 - 12 kHz
// 2 -  3 kHz
enum { MOTOR_FREQUENCY = 1 };

// Configure Timer 2 w. 250x period.
T2CON = 1 << 2 | MOTOR_FREQUENCY /* << 0 */;

我理解对了吗?

11111111 0 或 1 或 2 的算术左移两位

意思是:

T2CON = 1 << 2 | 0 = 1111 1100    
T2CON = 1 << 2 | 1 = 1111 1000    
T2CON = 1 << 2 | 2 = 1111 0000

亲切的问候,索尼特

【问题讨论】:

  • -我建议您阅读这篇关于位操作的短文avrfreaks.net/… -如果您在微控制器特定论坛中提问,您也会得到更好的答案。
  • 你的意思是我应该把这个问题扔到微芯片论坛上吗?
  • 我喜欢在这里看到偶尔嵌入的问题,但更多的上下文总是好的(你正在使用什么核心)以及你想要做什么。
  • 我想你会在 PIC 或 AVR 论坛上得到更具体的答案,所以是的,我的意思是。

标签: c embedded bit-manipulation pic


【解决方案1】:
1 << 2 = 100b

所以对于 OR:

100b | 1 = 101b
100b | 2 = 110b

【讨论】:

    【解决方案2】:

    假设您正在使用具有 8 位寄存器的微控制器。

    0000 0001 << 2 = 0000 0100
    then 
    0000 0100 OR 0000 0000 = 0000 0100
    -----
    0000 0001 << 2 = 0000 0100
    then 
    0000 0100 OR 0000 0001 = 0000 0101
    -----
    0000 0001 << 2 = 0000 0100
    then 
    0000 0100 OR 0000 0010 = 0000 0110
    

    【讨论】:

      【解决方案3】:

      上下文:

      TCON2 是 PIC MCU 上的定时器寄存器,其中最后两位配置预分频器。

      • T2CKPS[1:0] = 0b00 = 0 => /1 个预分频器
      • T2CKPS[1:0] = 0b01 = 1 => /4 预分频器
      • T2CKPS[1:0] = 0b1x = 2 或 3 => /16 预分频器

      位 2 实际上打开了定时器,所以它总是需要设置为做任何事情,因此1 &lt;&lt; 2(它真的应该写为1 &lt;&lt; T2CON_TMR2ON_bitT2CON_TMR2ON_bit 在一些 CPU 配置头中定义)

      总而言之,这三个设置是0b1000b1010b110,它们会打开定时器,并调整预分频器以获得 cmets 中提到的频率。

      此外,将enum 与一个元素一起使用几乎毫无意义;使用#define

      【讨论】:

        猜你喜欢
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        相关资源
        最近更新 更多