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 の 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

環境:

TCON2PIC MCU のタイマー レジスタで、最後の 2 ビットでプリスケーラを設定します。

PIC の TCON2 構成レジスタ

  • T2CKPS[1:0]= 0b00= 0 => /1 プリスケーラ
  • T2CKPS[1:0]= 0b01= 1 => /4 プリスケーラ
  • T2CKPS[1:0]= 0b1x= 2 または 3 => /16 プリスケーラ

ビット 2 は実際にタイマーをオンにするため、常に何かを行うように設定する必要があり1 << 2ます。1 << T2CON_TMR2ON_bitT2CON_TMR2ON_bit

つまり、タイマーをオンにし、プリスケーラーを微調整して、コメントに記載されている周波数を取得します0b1000b1010b110

また、enum1 つの要素で を使用することはほとんど無意味です。使用して#defineください。

于 2010-08-23T16:18:04.547 に答える