[H8] シリアルポートレジスタ
H8/3052 マイコンで、
と書いて、シリアルポートでaという文字を何度も転送するプログラムを書いてみました。ところが、全く送信できなかったのです。そこで、いろいろな人の書いたプログラムを見てみると、
とステータスレジスタを手動でリセットすると直るとのことでした。Σ(゜O゜;
状態を表すレジスタに書き込むなんて、なんて汚いソースだろう……。
while(1){//無限ループ
//SCI0は送信可能か?
if(SCI0.SSR.BIT.B7){
//何文字目を送るか?
switch(i){
case 1:
SCI0.TDR='a';break;
case 2:
SCI0.TDR='\r';break;
case 3:
SCI0.TDR='\n';break;
//送信終了
default:
i=0;
}
i++;
}
}と書いて、シリアルポートでaという文字を何度も転送するプログラムを書いてみました。ところが、全く送信できなかったのです。そこで、いろいろな人の書いたプログラムを見てみると、
while(1){//無限ループ
//SCI0は送信可能か?
if(SCI0.SSR.BIT.B7){
//何文字目を送るか?
switch(i){
case 1:
SCI0.TDR='a';break;
case 2:
SCI0.TDR='\r';break;
case 3:
SCI0.TDR='\n';break;
//送信終了
default:
i=0;
}
i++;
SCI0.SSR.BIT.B7=0;
}
}とステータスレジスタを手動でリセットすると直るとのことでした。Σ(゜O゜;
状態を表すレジスタに書き込むなんて、なんて汚いソースだろう……。
Comments
つか、ちゃんとH8のマニュアルのフローをよく読めよ。
読んでてSSRのbit7をクリアしてないのは、マニュアルが読めないといってるに等しいぞ。
シリアル通信のデータフロー図をマニュアルの中から見つけられませんでした。(^_^;)