AKI-H8/3052で遊ぶ ~ シリアルポート
H8はシリアルポートを持っています.というか,H8にプログラムを書き込んでいるなら,すでに使ってるかと思いますが….
AKI-H8/3052には,最初からRS-232C用のレベル変換ICが載っているので,そのまま書き込み用のケーブルを使って通信可能です.
プログラム
とりあえず,最低限動くものです.フラグの意味等,細かい部分は各自で調べてください.
//////////////////////////////////////////////////////////////////////////// // シリアルポート // ビットレート設定リスト(25MHz時) typedef enum { BR2400 = 80, //n=1,SMRの設定 BR4800 = 162, //n=0,SMRの設定,以下すべて0 BR9600 = 80, BR19200 = 40, BR38400 = 19, BR57600 = 13, BR115200 = 5, } BaudRate; //SCI初期化 void sci_init(BaudRate b) { int i; SCI1.SCR.BYTE = SCI1.SMR.BYTE = 0;// 初期値は0 SCI1.BRR = b; // ビットレート for (i = 0; i <4000; i++) ; // 待つ SCI1.SCR.BYTE = 0x70; // 受信割り込み許可,送受信許可 SCI1.SSR.BYTE; // ダミーリード SCI1.SSR.BYTE = 0x80; // エラーフラグクリア } // char送信 void sci_putchar(char c) { if (c=='\n') sci_putchar('\r'); // 改行はCRLF while (!SCI1.SSR.BIT.TDRE); // 送信を待つ SCI1.TDR = c; SCI1.SSR.BIT.TDRE = 0; // TDREクリア } // 受信割り込み void int_rxi1(void) { // とりあえず,エコーバック char rd; rd = SCI1.RDR; // 受信データ SCI1.SSR.BIT.RDRF = 0; // RDRFクリア sci_putchar(rd); // エコーバック } // エラー割り込み void int_eri1(void) { SCI1.SSR.BYTE &= 0x80; //エラーなら エラーフラグクリア } // 文字列出力 void sci_puts(char *s) { while (*s) sci_putchar(*s++); }
使い方
int main() { sci_init(BR38400); // SCI初期化(デバッグモニタと同じ速度で) EI; // enable interrupt(無くても良い?) sci_puts("Hello world.\n"); for(;;); }
終わりに
実は,H8が無い環境でプログラムを微妙に修正してから載せているので,もしかしたら実機で動かないかも….
この文書の履歴
- 2006-03-26 公開
Copyright © binzume all rights reserved.