実際のプログラムは、以下のようになります。
// ポート2を出力に設定 P2.DDR = 0xFF; // プルアップなし P2.PCR.BYTE = 0x00; // ポート2に1を出力 = LED消灯 P2.DR.BYTE = 0xFF;
LEDを点灯する場合は、ポート2に0を出力(ポート2をクリア)します。例えば、LED8とLED4を点灯、そのほかのLEDを消灯する場合は、リスト3のプログラムを実行します。
P2.DR.BYTE = 0x77;
あるいは、もう少し洗練(?)されたプログラムでは、リスト4のようにも記述できます。
const char no_to_bit[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /*------------------------------------------------------*/ /* LedOn */ /*------------------------------------------------------*/ /* 指定されたLEDを点灯します */ /* led=0のときLED1,led=1のときLED2....が点灯します */ /* LEDはP2に0を出力すると点灯、1を出力すると消灯します */ /* [入力] */ /* led :点灯するLEDを指定します(0〜7) */ /* [出力] */ /* なし */ /* [戻り値] */ /* なし */ /*-----------------------------------------------------*/ void LedOn(int led) { /* 対応するビットをクリアする */ /* 0でLED点灯 */ P2.DR.BYTE &= ~no_to_bit[led]; } /*------------------------------------------------------*/ /* LedOff */ /*------------------------------------------------------*/ /* 指定されたLEDを消灯します */ /* led=0のときLED1,led=1のときLED2....が消灯します */ /* LEDはP2に0を出力すると点灯、1を出力すると消灯します */ /* [入力] */ /* led :消灯するLEDを指定します(0〜7) */ /* [出力] */ /* なし */ /* [戻り値] */ /* なし */ /*-----------------------------------------------------*/ void LedOff(int led) { /* 対応するビットをセットする */ /* 1でLED消灯 */ P2.DR.BYTE |= no_to_bit[led]; }
なお、上記プログラムで使用しているポート2レジスタは、ヘッダファイル中でリスト5のように定義しています。
struct st_p2 { /* struct P2 */ unsigned char DDR; /* P2DDR */ char wk1; /* */ union { /* P2DR */ unsigned char BYTE; /* Byte Access */ struct { /* Bit Access */ unsigned char B7:1; /* Bit 7 */ unsigned char B6:1; /* Bit 6 */ unsigned char B5:1; /* Bit 5 */ unsigned char B4:1; /* Bit 4 */ unsigned char B3:1; /* Bit 3 */ unsigned char B2:1; /* Bit 2 */ unsigned char B1:1; /* Bit 1 */ unsigned char B0:1; /* Bit 0 */ } BIT; /* */ } DR; /* */ char wk2[20]; /* */ union { /* P2PCR */ unsigned char BYTE; /* Byte Access */ struct { /* Bit Access */ unsigned char B7:1; /* Bit 7 */ unsigned char B6:1; /* Bit 6 */ unsigned char B5:1; /* Bit 5 */ unsigned char B4:1; /* Bit 4 */ unsigned char B3:1; /* Bit 3 */ unsigned char B2:1; /* Bit 2 */ unsigned char B1:1; /* Bit 1 */ unsigned char B0:1; /* Bit 0 */ } BIT; /* */ } PCR; /* */ }; /* */ #define P2 (*(volatile struct st_p2 *)0xFFFFC1) /* P2 Address */
今回はターゲットボードでLEDを点灯させるプログラミングを紹介しました。次回はLCD制御について解説します。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.