/********************************************************/ /* 情報工学総合実験U */ /* マイコン基礎実習例題1 */ /* プロジェクト名: add8bits */ /* ファイル名: add8bits.c */ /* 内容: 加算例題プログラム */ /* @SW9(port8のbit2)を押下した時、トグルS */ /* W(port3)で設定した数値を変数に保存する。 */ /*  変数の初期値は0Hとする。 */ /* A@で保存したデータをLED1〜LED8 */ /* (port7)に表示する。 */ /* BSW10(port8のbit3)押下した時、トグルS */ /*  W(port3)で設定した数値を読み込む。 */ /* C@で保存した数値と、Bで読み込んだ数値を */ /*  使って8ビット同士の加算を行う。 */ /* DCの演算結果をLED1〜LED8(port7) */ /*  に表示する。 */ /* ※@で保存した値を被加数、 */ /*  Bで読み込んだ値を加数とする。 */ /* 日付: 2005.9.12 */ /* 作成者: Kazuhiko Araki */ /* コンパイラ: NC30WA (Ver.5.10 Release 1) */ /* note: OAKS16対応(OAKS16LCDボード) */ /********************************************************/ /* インクルードファイル */ #include "sfr62a.h" /* プロトタイプ宣言 */ void _main(void); /* メインプログラム*/ /* マクロ定義 */ #define PORTIN 0x00 /* ポート方向レジスタを入力に設定する為のデータ */ #define PORTOUT 0xff /* ポート方向レジスタを出力に設定する為のデータ */ #define LEDOFF 0xff /* LED1からLED8までを消灯するデータ */ #define SW9_MASK 0x04 /* SW9のビット位置を示すマスクデータ */ #define SW10_MASK 0x08 /* SW10のビット位置を示すマスクデータ */ void main( void ){ unsigned char val = 0; p7 = LEDOFF; /* 全てのLEDをOFF */ pd7 = PORTOUT; /* ポート7を出力に設定 */ pd3 = PORTIN; /* ポート3を入力に設定 */ pd8 = PORTIN; /* ポート8を入力に設定 */ for( ; ; ) { while( p8 & SW9_MASK ) /* SW9(port82)が押下されるのを待つ */ { } val = ~p3; /* ポート3の状態を読み込み変数に保存 */ p7 = ~val; /* 読み込んだ値をLED(port7)に表示 */ while( p8 & SW10_MASK ) /* SW10(port83)が押下されるのを待つ */ { } val += ~p3; /* ポート3の状態を読み込み変数の保持値と加算 */ p7 = ~val; /* 演算結果をLED(port7)に表示 */ } }