|
前回作成したウォッチドッグのプロジェクトに、デジタル入出力の処理を追加します。
・ボタン1が押されている間は、LED1が点灯
・ボタン2が押されている間は、LED2の点滅が止まる
という処理にします。
@ 入力の設定
マイコンのPD2、P46端子を入力として使用するために以下の設定をします。
ハードウェアマニュアル(R01UH0033JJ0140)の 「17. I/O ポート」、「17.3 [100 ピンLQFP] I/O ポート」が今回使用するマイコンの該当部分です。
「17.3.2.1 データディレクションレジスタ(DDR)」で端子を「入力として使用するのか、出力として使用するのか」を指定します。マイコンの初期設定では「0:入力ポート」となっているため、この設定は省略します。
端子を入力として使用する場合、「17.3.2.4 入力バッファコントロールレジスタ(ICR)」の設定が必要です。
説明に、
|
ICR レジスタは、ポートの入力バッファを制御するレジスタです。
PORTn.ICR レジスタ(n=0 〜 5、A 〜 E)の各ビットは、それぞれポートn の端子1 本ずつに対応してお
り、1 ビット単位で指定できます。
周辺モジュールの入力端子および入力ポート端子として使用する場合は、予め、対応する端子の入力バッ
ファを有効にするためにPORTn.ICR を1 に設定する必要があります。PORTn.ICR を“0” にした状態のまま周
辺モジュールの入力端子として使用した場合は、周辺モジュールへの入力信号はHigh に固定されます。
|
と書かれているため、必須の設定項目となります。
ソースコードでは以下のように記載します。
PORT4.ICR.BIT.B6 = 1; // P46 を入力ポートに設定
PORTD.ICR.BIT.B2 = 1; // PD2 を入力ポートに設定
PORT4は、P4xを指します。ICRは、今回のレジスタを指します。BIT.B6は、レジスタのビット位置を指します。
RXマイコンでは日常的に使う表現ですので、覚えておくと便利です。
以下のようにバイト単位で設定することもできます。
PORT4.ICR.BYTE |= 0x40; // P46 を入力ポートに設定
A 出力の設定
出力は、マイコンのPA0、PA2端子を使用します。
「17.3.2.1 データディレクションレジスタ(DDR)」の設定をします。
端子の該当するビットを1にすると出力、0にすると入力です。
ソースコードでは以下のように記載します。
PORTA.DDR.BIT.B0 = 1; // PA0 を出力ポートに設定
PORTA.DDR.BIT.B2 = 1; // PA2 を出力ポートに設定
以下のようにバイト単位で設定することもできます。
PORTA.DDR.BYTE |= 0x05; // PA0、PA2 を出力ポートに設定
B 入力の読み込み
34行目、47行目で、端子入力状態の判定を行っています。
入力端子の Hi:1、Lo:0 を確認するために使うのが「17.3.2.3 ポートレジスタ(PORT)」です。
今回の回路では、ボタンが押されたときに0V:Lo、ボタンが離されているときに3.3V:Hiとなるため、
Lo:0 でボタンが押されていると判断できます。
ソースコードでは以下のように記載します。設定と同じように、バイト単位で一度に読み込むことも可能です。
if( PORTD.PORT.BIT.B2 == 0 ){ // ボタンが押されたとき
C 出力のON/OFF
36行目、38行目、49行目で、端子出力の ON/OFF を行っています。
出力端子の Hi:1、Lo:0 を設定するために使うのが「17.3.2.2 データレジスタ(DR)」です。
今回の回路では、0V:Lo でLED消灯、3.3V:HiでLED点灯となります。
ソースコードでは以下のように記載します。設定と同じように、バイト単位で一度に書き込むことも可能です。
PORTA.DR.BIT.B0 = 1; // LED点灯
回路が正しく配線されていて、ソースコードに間違いがなければ、ビルド&ダウンロードして各ボタンとLEDが正常に反応します。配線ミスで動かないことは、よくあります。
|