[H8] シリアルポートレジスタ

 H8/3052 マイコンで、

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 (2) | trackbacks (0)

Comments

よこぐぁ | 2005/07/20 00:33
直るも何もSSRのbit7をクリアは送信開始を意味するのですが…。
つか、ちゃんとH8のマニュアルのフローをよく読めよ。
読んでてSSRのbit7をクリアしてないのは、マニュアルが読めないといってるに等しいぞ。
くっきー | 2005/07/20 18:58
ほんとだ。TSR の説明に載っていた……。どうもです。
シリアル通信のデータフロー図をマニュアルの中から見つけられませんでした。(^_^;)

Comment Form

icons:

Trackbacks