// 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
亲切的问候,Sonite
答案 0 :(得分:4)
1 << 2 = 100b
所以使用OR:
100b | 1 = 101b
100b | 2 = 110b
答案 1 :(得分: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
答案 2 :(得分:2)
上下文:
TCON2
是PIC MCU上的定时器寄存器,其中最后两位配置预分频器。
T2CKPS[1:0]
= 0b00
= 0 =&gt; / 1预分频器T2CKPS[1:0]
= 0b01
= 1 =&gt; / 4预分频器T2CKPS[1:0]
= 0b1x
= 2或3 =&gt; / 16预分频器第2位实际上打开了定时器,所以它总是需要设置为执行任何操作,因此1 << 2
(实际上应该写为1 << T2CON_TMR2ON_bit
并定义T2CON_TMR2ON_bit
一些CPU配置头)
所有的说法和完成,三个设置是0b100
,0b101
和0b110
,它们打开计时器,并调整预分频器以获取评论中提到的那些频率。
另外,使用带有一个元素的enum
几乎没有意义;使用#define
。