/*H8マイコンテストプログラム //ポート5のLED点滅 //p_1.c*/ #include <3048f.h> /*I/Oアクセス用インクルード*/ #include /*I/Oアクセス用インクルード*/ #define DATA_SUU 200 extern void wait(long); extern void e_int(void); extern void d_int(void); union key_form{ unsigned char BYTE; 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; /* */ }; volatile unsigned int flag,i,data[DATA_SUU]; /************************************************************************* ; ; キー入力初期化ルーチン ; ;************************************************************************/ void key_init(void) { P4.DDR = 0x00; P4.PCR.BYTE = 0xf0; } /************************************************************************* ; ; キー入力ルーチン ; ;************************************************************************/ volatile unsigned char key_in(void) { volatile unsigned char c; while (1) { c = (P4.DR.BYTE & 0xf0); wait(80000); /*50mSWAIT*/ if (c==(P4.DR.BYTE & 0xf0)) return c; } } void INT_ITUA0(void) { ITU0.TSR.BIT.IMFA = 0; data[i] = ITU0.GRA; i++; if (i == DATA_SUU) { flag = 0; ITU0.TIER.BIT.IMIEA = 0; /*インプットキャプチャ割り込みディスエーブル*/ ITU0.TIER.BIT.OVIE = 0; /*オーバーフロー割り込みディスエーブル*/ ITU.TSTR.BIT.STR0 = 0; /*ITU0動作停止*/ sci1_out("*** Buffer Full ***\r\n"); } } void INT_OVI0(void) { char c[6]; ITU0.TSR.BIT.OVF = 0; flag = 0; ITU0.TIER.BIT.IMIEA = 0; /*インプットキャプチャ割り込みディスエーブル*/ ITU0.TIER.BIT.OVIE = 0; /*オーバーフロー割り込みディスエーブル*/ ITU.TSTR.BIT.STR0 = 0; /*ITU0動作停止*/ sprintf(c,"%u",i); sci1_out(c); sci1_out("*** Time Over ***\r\n"); } void signal_in() { while(key_in() ^ 0xf0); lcd4_out(0x40, "data rec start"); sci1_out("*** Signal Analysis start ***\r\n"); flag = 1; i = 0; while(PA.DR.BIT.B2); ITU.TSTR.BIT.STR0 = 0; /*ITU0停止*/ ITU0.TCNT = 0; /*TCNTクリア*/ ITU0.TSR.BIT.IMFA = 0; ITU0.TSR.BIT.OVF = 0; ITU0.TCR.BIT.CCLR = 0x01; /*GRAインプットキャプチャでTCNTクリア*/ ITU0.TCR.BIT.TPSC = 0x07; /*外部クロックD = 10uS */ ITU0.TIOR.BIT.IOA = 0x06; /*立ち上がり・立下りでGRAにインプットキャプチャ*/ ITU0.TIER.BIT.IMIEA = 1; /*インプットキャプチャ割り込みイネーブル*/ ITU0.TIER.BIT.OVIE = 1; /*オーバーフロー割り込みイネーブル*/ ITU.TSTR.BIT.STR0 = 1; /*ITU0動作開始*/ while(flag); sci1_out("*** Signal Analysis end ***\r\n"); } void data_out() { char c[8]; volatile unsigned int i_cnt; i_cnt = 0; while(i_cnt != i) { sprintf(c,"%u\r\n\0",data[i_cnt]); sci1_out(c); i_cnt++; } } int main(void) { volatile union key_form key_in_data; /* LCD初期化 */ lcd4_init(); lcd4_out(0x00, "Sekigai Kaiseki "); lcd4_out(0x40, "Stand by "); /* キー入力初期化 */ key_init(); /* SCI1初期化 */ sci1_init(); sci1_out("***** Infrared rays signal analysis *****\r\n"); /* ポート5を出力に */ P5.DDR = 0xff; ITU1.TCR.BIT.CCLR = 0x01; /*GRAコンペアマッチでTCNTクリア*/ ITU1.TCR.BIT.TPSC = 0x03; /*Φ/8でカウント (1/16MHZ)*8 = 0.5uS */ ITU1.GRA = 9; /*5uSでクリア 10us周期*/ ITU1.TIOR.BIT.IOA = 3; /*GRAのコンペアマッチでトグル出力*/ ITU.TSTR.BIT.STR1 = 1; /*ITU1動作開始*/ e_int(); /*割り込みイネーブル*/ while(1){ key_in_data.BYTE = key_in(); if (key_in_data.BYTE != 0xf0) { if (!key_in_data.BIT.B4) signal_in(); else if (!key_in_data.BIT.B5) data_out(); else if (!key_in_data.BIT.B6) ; else if (!key_in_data.BIT.B7) ; lcd4_out(0x40, "Stand by "); sci1_out("*** Stand By ***\r\n"); } } }