どんとこい!PC情報

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を設定

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1202

サイト内検索

twitterTwitter

最新ブログ記事

2014年05月07日

BeagleBoardを使ってみる

BaegleBoardでLinuxをブートする

2011年10月12日

WindowsXPの見た目をWindows7風に変更

カレンダー表示をカスタマイズする

2011年09月14日

WindowsXPの見た目をWindows7風に変更

ウィンドウを半透明化する

2011年09月14日

WindowsXPの見た目をWindows7風に変更

Windows7風にカスタマイズ

2011年05月11日

WindowsXPの見た目をWindows7風に変更

使用ソフト概要説明

アクセスランキング

人気のコンテンツをご紹介!

1位

どんとこいPC情報

CD/DVDの仕組み CD編

3位

どんとこいPC情報

CD/DVDの仕組み DVD

4位

どんとこいPC情報

CD/DVDの仕組み DVD±R

ISL 情報戦略研究所

pagetopこのページの先頭へ戻る