Top / Elec / App / h8 / シリアル通信

#contents;

使い方

  • init_h8sci(char arg_cBaudrate)
    初期化します。引数は通信速度です。(動作クロック 16MHz で調整しています)
  • h8sci_out_string(char *arg_sStr)
    引数に与えられた文字列を送信します。
  • unsigned char h8sci_in_data(void)
    文字を受信し、受信した文字を返します。この関数が実行された時点ではプログラムは停止しますので、他の主要な処理はタイマ割り込み等を併用してください。

ソース

//--------------------------------------------------------------
//	シリアル通信用関数 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
}
2005-09-13 (火) 02:01:43

エレクトロニクス


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-12-26 (月) 00:53:43 (4172d)