MCR - Micom Car Rally
2015大会 マイコンカーラリーとは? 今から始めるマイコンカーラリー 技術情報 大会記録 MCRファン倶楽部 お問い合せ
マイコンカーラリートップへ マイコンカーラリートップへ
技術情報 >> R8C/M12A 技術情報
技術情報
アプリケーション
R8C/M12A 技術情報
上位入賞マイコンカー
参加者レポート
よくある質問(FAQ)
ダウンロード
R8C/M12A 技術情報
スイッチの入力(I/Oポートの入力)

内容
スイッチの状態を、LEDに出力します。

ワークスペース
開発環境を整える」ページからダウンロードしてください。

回路
回路を下図に示します。

回路図

ブレッドボード実装図
ブレッドボードの実装を下図に示します。
ブレッドボード実装図

実習中のブレッドボード
実習中のブレッドボード

プログラムを開く
ワークスペース「r8cm12a_breadboard」のプロジェクト「02sw_led」をアクティブ(有効)にします。「02sw_led」が太字になっていない場合は、右画面のように、「アクティブプロジェクトに設定」してください。

「ビルド→ビルド」して、MOTファイルを作成、「ツール→R8C Writer」でプログラムを書き込んで、実行してください。
  プロジェクトを切り替える
プロジェクト「02sw_led」を有効にする

実行中の動画


プログラムの説明
ポートの入出力設定

今回、ディップスイッチを、P3_7、P3_5、P3_4、P3_3の各端子に接続します。これらの端子を入力設定にします。その他のポート3の端子は無いので、出力にしておきます。
■ポートP3方向レジスタ(PD3)の設定
bit 7 6 5 4 3 2 1 0
端子 P3_7 - P3_5 P3_4 P3_3 - - -
内容 入力 出力 入力 入力 入力 出力 出力 出力
設定値 0 1 0 0 0 1 1 1

ポート1はLEDへ出力するので、全bit出力に設定します。今回の入出力設定を下記に示します。
  43 :  void init( void )
  44 :  {
  45 :      /* ポートの入出力設定 */
  46 :      pd1 = 0xff;       /* ポート1の入出力設定 */
  47 :      pd3 = 0x47;       /* ポート3の入出力設定 */
  48 :      pd4 = 0xff;       /* ポート4の入出力設定 */
  49 :      pda = 0xff;       /* ポートAの入出力設定 */

端子のプルアップ

右上図のように、ディップスイッチなどのスイッチは、プルアップ抵抗を付けないと、
・スイッチONのとき、マイコンには"0"が入力されます。
・スイッチがOFFのとき、マイコンにはハイインピーダンス(開放状態)が入力されます。
デジタルの入力端子には、必ず"0"(0V)か"1"(5V)を入力する必要があり、ハイインピーダンスにしてはいけません。
そのため、右下図のように、プルアップ抵抗を付けて、ディップスイッチがOFFのときも抵抗を通して"1"が入力されるようにします。
  プルアップ回路

R8C/M12Aマイコンは、右図のように、プルアップ抵抗を内蔵しており、プログラムでON/OFFすることができます。そのため、内蔵プルアップを有効にすれば外付けで抵抗を用意する必要はありません。抵抗値は25〜100kΩで標準値は50kΩです。今回は、内蔵プルアップ抵抗を使っています。   プルアップ回路

内蔵プルアップ抵抗の有効/無効は「プルアップ制御レジスタ」で行い、レジスタ名は「PUR○」となります。○にはポート番号である、1、3、4が入ります。PA_0端子には、内蔵プルアップはありません。レジスタの設定を、下記に示します。

■プルアップ制御レジスタ1(PUR1)の設定
bit 7 6 5 4 3 2 1 0
端子 P1_7 P1_6 P1_5 P1_4 P1_3 P1_2 P1_1 P1_0
設定
内容
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
1端子
で設定
するとき
の名称
pu1_7 pu1_6 pu1_5 pu1_4 pu1_3 pu1_2 pu1_1 pu1_0

■プルアップ制御レジスタ3(PUR3)の設定
bit 7 6 5 4 3 2 1 0
端子 P3_7 - P3_5 P3_4 P3_3 - - -
設定
内容
1:ON
0:OFF
必ず0
を設定
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
必ず0
を設定
必ず0
を設定
必ず0
を設定
1端子
で設定
するとき
の名称
pu3_7 - pu3_5 pu3_4 pu3_3 - - -

■プルアップ制御レジスタ4(PUR4)の設定
bit 7 6 5 4 3 2 1 0
端子 P4_7 P4_6 P4_5 - - P4_2 - -
設定
内容
1:ON
0:OFF
1:ON
0:OFF
1:ON
0:OFF
必ず0
を設定
必ず0
を設定
1:ON
0:OFF
必ず0
を設定
必ず0
を設定
1端子
で設定
するとき
の名称
pu4_7 pu4_6 pu4_5 - - pu4_2 - -

■プログラム
今回、ディップスイッチはポート3に接続されているので、接続されている端子のプルアップをONにします。今回のプログラムを下記に示します。
  52 :      pur3 = 0xb8;    /* ポート3のプルアップ設定 */

メインプログラム

sw_led.cのmain関数のプログラムを、下記に示します。
  31 :  void main( void )
  32 :  {
  33 :      init();         /* 初期化       */
  34 :
  35 :      while( 1 ) {
  36 :          p1 = p3;
  37 :      }
  38 :  }

ポート3に接続されているディップスイッチ(4bit)の状態を、ポート1に接続されているLED(8bit)へ出力します。ディップスイッチの各bitをON/OFFして、LEDの付き方を確認してください。また、ディップスイッチが接続されていないbitはどのような出力になるかも確かめてください。

課題
1.下表のように、ポート3のbit5とbit4の状態によりLEDが点灯するよう、プログラムを作りなさい。なお、ポート3のbit5とbit4の値以外は、"1"か"0"か分からないものとする。
ポート3 bit5の値 ポート3 bit4の値 このときのLEDの付き方
0 0 00000011
0 1 00001111
1 0 00111111
1 1 11111111

2.下表のようにポート3の特定のビットの状態を、ポート1の特定のビットに出力するプログラムを作りなさい。なお、書かれている端子以外の状態は分からないものとする。また、書かれている端子以外の状態は変えないものとする。
読み込む端子 出力する端子
ポート3のbit7 ポート1のbit7
ポート3のbit5 ポート1のbit5
ポート3のbit4 ポート1のbit3
ポート3のbit3 ポート1のbit1

課題の回答例
1.の回答例
sw_led_answer_1.c

2.の回答例
sw_led_answer_2.c

BACK