P-ROBO(ピーロボ)
初期化
始めに各レジスタの詳細について説明します。各レジスタを理解したところで、目的にあった設定を行います。
I/OポートA
P−ROBOでは右モータ、左モータ、ユーザLEDが接続されています。
※ビット情報
bit7-5 PORTAは5ビット幅のため使用されない
bit4 ユーザLED
1 = ユーザLEDオフ
0 = ユーザLEDオン
bit3-2 左モータ
00 = フリー
01 = 逆転
10 = 正転
11 = 電磁ブレーキ
bit1-0 右モータ
00 = フリー
01 = 逆転
10 = 正転
11 = 電磁ブレーキ
I/OポートB
P−ROBOでは赤外LEDセンサ、ロータリスイッチが接続されています。
※ビット情報
bit7-4 ロータリスイッチ
xxxx = ロータリスイッチデータが入力される
bit3 赤外LEDセンサ
1 = 赤外LEDセンサオン
0 = 赤外LEDセンサオフ
bit2 シフトレジスタ(74HC166)のOutputピン
x = シフトレジスタから赤外LEDセンサのデータを1ビット受信する
bit1 シフトレジスタ(74HC166)のShift/Loadピン
1 = Shiftモードに設定する
0 = Loadモードに設定する
bit0 シフトレジスタ(74HC166)のClockピン
1 = Clock信号をHighにする
0 = Clock信号をLowにする
割り込み制御レジスタ
全ての割り込みソースのイネーブルビットを含む、リード/ライト可能なレジスタである。
※ビット情報
bit7 GIE:グローバル割り込みイネーブルビット
1 = すべてのマスクされていない割り込みを発生許可する
0 = すべての割り込み発生を禁止する
bit6 EEIE:EEライト完了割り込みイネーブルビット
1 = EEライト完了割り込み発生を許可する
0 = EEライト完了割り込み発生を禁止する
bit5 T0IE:TMR0オーバーフロー割り込みイネーブルビット
1 = TMR0割り込み発生を許可する
0 = TMR0割り込み発生を禁止する
bit4 INTE:RB0/INT割り込みイネーブルビット
1 = RB0/INT割り込み発生を許可する
0 = RB0/INT割り込み発生を禁止する
bit3 RBIE:RBポート変化割り込みイネーブルビット
1 = RBポート変化割り込みを許可する
0 = RBポート変化割り込みを禁止する
bit2 T0IF:TMR0オーバーフロー割り込みフラグビット
1 = TMR0がオーバーフローした
(ソフトウェアによるクリアが必要)
0 = TMR0がオーバーフローしていない
bit1 INTF:RB0/INT割り込みフラグビット
1 = RB0/INT割り込みが発生した
(ソフトウェアによるクリアが必要)
0 = RB0/INT割り込みが発生していない
bit0 RBIF:RBポート変化割り込みフラグビット
1 = 少なくとも1つ以上のRB7:RB4ピンが変化した
(ソフトウェアによるクリアが必要)
0 = 状態が変化したRB7:RB4ピンはない
オプションレジスタ
PORTBにTMR0/WDTプリスケーラ、外部INT割り込み、TMR0、プルアップを設定するための各種コントロールビットを含む、リード/ライト可能なレジスタである。
※ビット情報
bit7 RBPU:プルアップイネーブルビット
1 = PORTBプルアップを使用しない
0 = PORTBプルアップを使用する
bit6 INTEDG:割り込みエッジ選択ビット
1 = RB0/INTピンの立ち上がりエッジにより割り込み
0 = RB0/INTピンの立ち下がりエッジにより割り込み
bit5 TOCS:TMR0クロックソース選択ビット
1 = RA4/TOCKIピンの入力
0 = 内部命令サイクルクロック(CLKOUT)
bit4 TOSE:TMR0ソースエッジ選択ビット
1 = RA4/TOCKIピンの入力が High から Low でインクリメント
0 = RA4/TOCKIピンの入力が Low から High でインクリメント
bit3 PSA:プリスケーラ割り当てビット
1 = プリスケーラはWDTへ割り当て
0 = プリスケーラはTMR0へ割り当て
bit2-0 PS2:PS1:PS0:プリスケーラレート選択ビット
ビット値 | TMR0レート | WDTレート |
---|---|---|
000 | 1:2 | 1:1 |
001 | 1:4 | 1:2 |
010 | 1:8 | 1:4 |
011 | 1:16 | 1:8 |
100 | 1:32 | 1:16 |
101 | 1:64 | 1:32 |
110 | 1:128 | 1:64 |
111 | 1:256 | 1:128 |
トライステートレジスタA
ポートAの入出力設定レジスタです。
TRISAビットをセット(=1)すると、そのビットに対応するPORTAピンが入力になります。
TRISAビットをクリア(=0)すると、そのビットに対応するPORTAピンが出力になります。
※ビット情報
bit7-5 PORTAは5ビット幅のため使用されない
bit4 ユーザLED
0 = 接続先がユーザLEDなので出力で固定される
bit3-2 左モータ
00 =接続先がモータなので出力で固定される
bit1-0 右モータ
00 =接続先がモータなので出力で固定される
トライステートレジスタB
ポートBの入出力設定レジスタです。
TRISBビットをセット(=1)すると、そのビットに対応するPORTBピンが入力になります。
TRISBビットをクリア(=0)すると、そのビットに対応するPORTBピンが出力になります。
※ビット情報
bit7-4 ロータリスイッチ
1111 = 接続先がロータリスイッチなので入力で固定される
bit3 赤外LEDセンサ
0 = 接続先が赤外LEDセンサなので出力で固定される
bit2 シフトレジスタ(74HC166)のOutputピン
1 = シフトレジスタから赤外LEDセンサのデータを受信するので
入力に固定される
bit1 シフトレジスタ(74HC166)のShift/Loadピン
0 = シフトレジスタへShift/Load信号を出力するので
出力に固定される
bit0 シフトレジスタ(74HC166)のClockピン
0 = シフトレジスタへClock信号を出力するので、出力に固定される
初期化処理
各レジスタを初期化します。初期化処理ではレジスタ以外にも必要なものについて初期化を行います。
※初期化情報
iOPTION = 0x87;
ビット | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
// | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ||
// | | | | | | | | | | | + | + | + | - | プリスケーラ分周比 1:256 |
// | | | | | | | | | + | - | - | - | - | プリスケーラを TMR0 に設定 |
// | | | | | | | | | | + | - | - | - | - | - | MTR0ソースエッジをRA4/TOCKIピンの入力が Low から High でインクリメントに設定 |
// | | | | | | | + | - | - | - | - | - | - | TMR0クロックソースを内部命令サイクルクロック(CLKOUT)に設定 |
// | | | | + | - | - | - | - | - | - | - | 割り込みエッジをRB0/INTピンの立ち下がりエッジにより割り込みに設定 |
// | + | - | - | - | - | - | - | - | - | PORTBプルアップを使用しないに設定 |
iINTCON = 0x20;
ビット | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
// | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | ||
// | | | | | | | | | | | | | | | + | - | RBポート割り込みフラグをクリア |
// | | | | | | | | | | | | | + | - | - | RB0/INT割り込みフラグをクリア |
// | | | | | | | | | | | + | - | - | - | TMR0オーバーフロー割り込みフラグをクリア |
// | | | | | | | | | + | - | - | - | - | RBポート変化割り込み発生を禁止に設定 |
// | | | | | | | + | - | - | - | - | - | RB0/INT割り込み発生を禁止に設定 |
// | | | | | + | - | - | - | - | - | - | TMR0オーバーフロー割り込み発生を許可に設定 |
// | | | + | - | - | - | - | - | - | - | EEライト完了割り込み発生を禁止に設定 |
// | + | - | - | - | - | - | - | - | - | 全ての割り込み発生を禁止に設定 |
iTRISA = 0x00;
ビット | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
// | * | * | * | 0 | 0 | 0 | 0 | 0 | ||
// | | | | | | | | | | | | | + | + | - | 右モータを出力に設定 |
// | | | | | | | | | + | + | - | - | - | 左モータを出力に設定 |
// | | | | | | | + | - | - | - | - | - | ユーザLEDを出力に設定 |
// | + | + | + | - | - | - | - | - | - | PORTAは5ビット幅のため使用されない。常に0としてリードされる |
iTRISB = 0xf4;
ビット | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
// | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | ||
// | | | | | | | | | | | | | | | | | | | | | | + | - | シフトレジスタ(74HC166)へPICからのクロックを送るため出力に設定 |
// | | | | | | | | | | | | | | | | | | | + | - | - | シフトレジスタ(74HC166)へロード信号を送るため出力に設定 |
// | | | | | | | | | | | | | | | | + | - | - | - | シフトレジスタ(74HC166)からデータを受信するため入力に設定 |
// | | | | | | | | | + | - | - | - | - | 赤外線センサを出力に設定 |
// | + | + | + | + | - | - | - | - | - | ロータリースイッチを入力に設定 |
iPORTA = 0x1f;
ビット | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
// | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | ||
// | | | | | | | | | | | | | + | + | - | 右モータをブレーキに設定 |
// | | | | | | | | | + | + | - | - | - | 左モータをブレーキに設定 |
// | | | | | | | + | - | - | - | - | - | ユーザLEDを消灯に設定 |
// | + | + | + | - | - | - | - | - | - | PORTAは5ビット幅のため使用されない。 |
iPORTB = 0x00;
ビット | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
// | | | | | | | | | | | | | | | + | - | クロック出力をオフに設定 |
// | | | | | | | | | | | | | + | - | - | ロード信号出力をオフに設定 |
// | | | | | | | | | | | + | - | - | - | データを初期化するために0を設定 |
// | | | | | | | | | + | - | - | - | - | 赤外LEDセンサをオフに設定 |
// | + | + | + | + | - | - | - | - | - | ロータリスイッチを初期化するために0を設定 |