P-ROBO(ピーロボ)
レジスタの設定
P-ROBOを制御するにあたって、以下のレジスタを定義します。
- 8ビットリアルタイム・クロック/カウンタ
- I/OポートA
- I/OポートB
- 割り込み制御レジスタ
- オプションレジスタ
- トライステートレジスタA
- トライステートレジスタB
レジスタファイル配置図
PIC16F84では下記のようにレジスタファイルが配置されています。
| Address | Name | Comment |
|---|---|---|
| Bank 0 | ||
| 00h | INDF | FSRの内容のアドレスのデータメモリ(物理的には存在しない) |
| 01h | TMR0 | 8ビットリアルタイム・クロック/カウンタ |
| 02h | PCL | プログラムカウンタの下位8ビット |
| 03h | STATUS | ALUの演算フラグ、リセット状態、およびデータメモリのバンク選択ビットを含む |
| 04h | FSR | 間接データメモリアドレスポインタ |
| 05h | PORTA | I/OポートA |
| 06h | PORTB | I/OポートB |
| 07h | 使用しない | |
| 08h | EEDATA | EEPROMデータレジスタ |
| 09h | EEADR | EEPROMアドレスレジスタ |
| 0Ah | PCLATH | PCの上位5ビットへの書き込みバッファ |
| 0Bh | INTCON | 全ての割り込みソースのイネーブルビットを含む |
| Bank 1 | ||
| 80h | INDF | FSRの内容のアドレスのデータメモリ(物理的には存在しない) |
| 81h | OPTION_REG | PORTBにTMR0/WDTプリスケーラ、外部INT割り込み、TMR0、プルアップを設定するための各種コントロールビットを含む |
| 82h | PCL | プログラムカウンタの下位8ビット |
| 83h | STATUS | ALUの演算フラグ、リセット状態、およびデータメモリのバンク選択ビットを含む |
| 84h | FSR | 間接データメモリアドレスポインタ |
| 85h | TRISA | PORTAデータ入出力設定レジスタ |
| 86h | TRISB | PORTBデータ入出力設定レジスタ |
| 87h | 使用しない | |
| 88h | EECON1 | EEPROM制御レジスタ |
| 89h | EECON2 | EEPROM制御レジスタ(物理的には存在しない) |
| 0Ah | PCLATH | PCの上位5ビットへの書き込みバッファ |
| 0Bh | INTCON | 全ての割り込みソースのイネーブルビットを含む |
レジスタ設定内容
piccでは変数に特定のアドレスを割り当てるには【 @ 】を使用します。下記のアドレスはPIC16F84特有のアドレスなので、変更することは出来ません。詳細についてはハードウェアマニュアルやPIC16F84のデータシートを参照してください。ここではライントレースを行う上で必要になるレジスタのみを設定しています。
unsigned int uiTMR0 @ 0x01; // 0x01 8ビットリアルタイム・クロック/カウンタ
int iPORTA @ 0x05; // 0x05 I/Oポート A
int iPORTB @ 0x06; // 0x06 I/Oポート B
int iINTCON @ 0x0B; // 0x0B 割り込み制御レジスタ
int iOPTION @ 0x81; // 0x81 オプションレジスタ
int iTRISA @ 0x85; // 0x85 I/Oポート Aの入出力設定レジスタ
int iTRISB @ 0x86; // 0x86 I/Oポート Bの入出力設定レジスタ