#contents;
//-------------------------------------------------------------- // シリアル通信用関数 for H8 // Ver.1.0 //-------------------------------------------------------------- //関数のプロトタイプ宣言 void init_h8sci(char arg_cBaudrate); void h8sci_out_data(char arg_c); void h8sci_out_string(char *arg_sStr); unsigned char h8sci_in_data(void); char h8sci_buf[150]; #define BR4800 103 #define BR9600 51 #define BR19200 25 #define BR38400 12 #define BR57600 8 //-------------------------------------------------------------- //シリアル処理関連 //-------------------------------------------------------------- //初期化 void init_h8sci(char arg_cBaudrate) { #ifndef DISABLE_SCI int i; SCI1.SCR.BYTE = SCI1.SMR.BYTE = 0; SCI1.BRR = arg_cBaudrate; // ボーレート for (i = 0; i < 1000; i++); // とりあえず待つ SCI1.SCR.BYTE = 0x30; // 送受信許可 SCI1.SSR.BYTE; // ダミーリード SCI1.SSR.BYTE = 0x80; // エラーフラグクリア #endif } //1文字送信 void h8sci_out_data(char arg_c) { #ifndef DISABLE_SCI while(SCI1.SSR.BIT.TDRE == 0); SCI1.TDR = arg_c; SCI1.SSR.BIT.TDRE = 0; #endif } //文字列送信 void h8sci_out_string(char *arg_sStr) { #ifndef DISABLE_SCI while(*arg_sStr) h8sci_out_data(*arg_sStr++); #endif } //1文字受信 //注意:この関数を呼んだ時点で停止します。何か入力があれば次へ移行します。 unsigned char h8sci_in_data(void) { #ifndef DISABLE_SCI char data; while((SCI1.SSR.BYTE & 0x78) == 0); //受信とエラーのフラグが立つまで待つ if(SCI1.SSR.BIT.RDRF == 1){ //データ受信が正常 data = SCI1.RDR; //データを受け取りdataに保存 SCI1.SSR.BIT.RDRF = 0; //受信フラグのクリア return(data); } else{ //データ受信にエラー発生 SCI1.SSR.BYTE &= 0xc7; //エラーフラグをクリア return(0xff); //エラー時はFFを返す } #endif }