0
// 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

亲切的问候,索尼特

4

3 回答 3

4
1 << 2 = 100b

所以使用 OR:

100b | 1 = 101b
100b | 2 = 110b
于 2010-08-23T10:50:15.267 回答
3

假设您正在使用具有 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
于 2010-08-23T11:27:55.770 回答
2

语境:

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

PIC 上的 TCON2 配置寄存器

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

位 2 实际上打开了计时器,因此它总是需要设置为做任何事情,因此1 << 2(实际上应该按照在某些 CPU 配置头中定义的1 << T2CON_TMR2ON_bit方式编写)T2CON_TMR2ON_bit

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

此外,使用enum一个元素几乎毫无意义。使用#define.

于 2010-08-23T16:18:04.547 回答