![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
H8のマイコンを用いて、7セグメントLEDを
1秒間隔で表示を切り替えるプログラムを作りたい
のですが、いまいち上手くいきません。。。
タイマー割り込みは用いずに行いたいのですが、以下のプログラムでどこが間違っているのでしょうか??
MOV.L #FFFFD1,ER0//PADDR
MOV.L #FFFFD4,ER1//PBDDR
MOV.B #FF,R2L//FF=11111111
MOV.B R2L,@ER0//PADDR = FF
MOV.B R2L,@ER1//PBDDR = FF
MOV.L #FFFFD6,ER0//PBDR
MOV.L #FFFFD3,ER1//PADR
MOV.B #5B,R2L//5B = "2"
MOV.B R2L,@ER0//PBDR = 5B
MOV.B #01,R2L//01 = 0KETA
MOV.B R2L,@ER1//PADR = 0KETA
*** MOV.L #FFFF64,ER3//TCR0
MOV.B #83,R2H//83 = 1/8
MOV.B R2H,@ER3//TCR0 = 1/8
MOV.L #FFFF6A,ER3//GRA0
MOV.L #61A8,ER4//61A8 = 25000
MOV.L ER4,@ER3//GRA0 = 25000
MOV.W #3E8,E3//3E8 = 1000
MOV.W #0,R3// 0
MOV.B #F9,R4L// F9
MOV.L #FFFF67,ER5//TSR0
MOV.L #FFFF60,ER3//TSTR
MOV.B #1,R2H//TSTR = 1
** MOV.B @ER5,R4H//TSR0の値
CMP.B R4L,R4H//比較
BNE FFF**//ループ
MOB.B #F8,R4H//初期値に戻す
MOV.B R4H,@ER5//
INC.W #1,R3//ループ数
CMP.W R3,E3//比較
BNE FFF**//ループ
MOV.B #0,R2H//タイマーのストップ
MOV.B R2H,@ER3//
ADD.B R2L,R2L//表示桁の更新
MOV.B R2L,@ER1//
BRA FFF***
No.4ベストアンサー
- 回答日時:
#3です。
なんだかきつい口調になってしまいました。急いでいると、ついこんな口調になるようです。どうか、気にしないで下さい。2つ見つけました。
1.TCR0 = 0x83 としているのは、0xa3のほうが良いと思います。TCNT0==GRA0 の一致でTCNT0をクリアしないと、結局 一周期が 65536 カウントになります。
2.TSR0 == 0xf9 になるまで待っていますが、TCNT0==GRB0のほうが先に生じるので、TSR0=0xfb になり、いつまで待っても一致しないと思います。
while ((*TSR0 & 0x01) != 0x01);
のように、1ビットだけ監視したほうが確実だと思います。
(C言語風に説明しましたが、もし分かりにくければ質問して下さい)
No.3
- 回答日時:
「上手くいかない」と言っても、何がどのようにうまくいかないのかわかりません。
あるいはどこまでうまくいっているかもです。詳しい説明をお願いします。アセンブラが数値を10進数と16進数のどちらで解釈するかは、アセンブラの仕様やスイッチによって異なります。私が知っているアセンブラの場合、16進数は
MOV.L #H'FFFF34FB,ER0
のように表記します。10進数の場合は
MOV.L #12345,ER1
のようになります。ソースファイルとリストファイルを比べて、どのように変換されているか調べて下さい。
それから、H8の型式を教えて下さい。
No.2
- 回答日時:
気になった点があります。
1.GRA0に対して、ロングワードアクセスを行っていますが、ワードでアクセスするべきではないでしょうか。H8はビッグエンディアンなので、000061A8を書き込むと、GRA0には、0000が入ると思います。それにその次のアドレスに存在するレジスタも、設定がおかしくなります。
2.ループのカウント処理に、E3とR3を使用していますが、ループ内でER3を書き換えて、データを壊しているようです。
3.CPUの型式が分からないので、レジスタに入れた設定値の妥当性はわかりません。
アドバイスいただいたことを参考にして以下のように
書き換えてみましたが上手くいきません・・・。
MOV.L #FFFFD1,ER0 //PADDR
MOV.B #FF,R1L//FF=11111111
MOV.B R1L,@ER0//PADDR = FF
MOV.L #FFFFD4,ER0 //PBDDR
MOV.B #FF,R1L//FF=11111111
MOV.B R1L,@ER0//PBDDR = FF
MOV.L #FFFFD6,ER0 //PBDR
MOV.B #5B,R1L//5B = "2"
MOV.B R1L,@ER0//PBDR = 5B
MOV.L #FFFFD3,ER0 //PADR
MOV.B #01,R1L//01 = 0KETA
MOV.B R1L,@ER0//PADR = 0KETA
**128 MOV.L #FFFF64,ER2//TCR0
MOV.B #83,R1H//83 = 1/8
MOV.B R1H,@ER2//TCR0 = 1/8
MOV.L #FFFF6A,ER3 //GRA0
MOV.W #61A8,E1//61A8 = 25000
MOV.W E1,@ER3//GRA0 = 25000
MOV.W #3E8,E4//3E8 = 1000
MOV.W #0,R4// 0
MOV.B #F9,R5L// F9
MOV.L #FFFF67,ER0 //TSR0
MOV.L #FFFF60,ER6 //TSTR
MOV.B #1,R5H
MOV.B R5H,@ER6//TSTR = 1
*158 MOV.B @ER0,R5H//TSR0の値
CMP.B R5L,R5H
BNE FFF*
MOV.B #F8,R5H//初期値に戻す
MOV.B R5H,@ER0
INC.W #1,R4
CMP.W R4,E4
BNE FFF*
MOV.B #0,R5H//ストップ
MOV.B R5H,@ER6
MOV.L #FFFFD3,ER0 //PADR
ADD.B R1L,R1L//表示桁の更新
MOV.B R1L,@ER0
BRA FFF**
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- 物理学 同軸ケーブル 伝送の仕組み TEMモード Maxwell方程式 円柱座標 ポアソン方程式 3 2022/08/16 20:40
- 中国語 (ピンインは書いてません。)中国語 3比較の言い方なんですが、 私の兄は私より2歳年上です。という3 1 2023/06/28 23:47
- 車検・修理・メンテナンス 車のエンジンの警告灯について。 普通に運転していたら、エンジンの警告灯(黄色いやつ)がついて、距離数 6 2022/10/17 06:41
- 車検・修理・メンテナンス 車のエンジンの警告灯について。 普通に運転していたら、エンジンの警告灯(黄色いやつ)がついて、距離数 1 2022/10/16 23:32
- 電子レンジ・オーブン・トースター 電子レンジについて 電子レンジの種類によって市販の弁当、パックご飯温める時間、少し変りますが、大体ど 2 2022/06/23 14:19
- 英語 unlucky の最上級 2 2022/12/23 20:10
- 冷蔵庫・炊飯器 冷蔵庫の買い替えのタイミングは 5 2023/05/11 21:18
- 心理学 ウクライナの二重国籍問題 1 2022/11/21 05:59
- メガネ・コンタクト・視力矯正 コンタクトレンズの乱視補正について 1 2023/05/17 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
画面を強制的に再描画させる方法
-
VBAでIE操作で IEが 固まっ...
-
DoEventsが必要な理由について
-
Escキーを押すと、中断する時と...
-
WinAPI「MsgWaitForMultipleObj...
-
プログラミングについて。 1つ...
-
テキストボックスの名前に変数...
-
アセンブラによるウェイト(WAIT...
-
【VBA】全て空白のセルの列の非...
-
Javaでゲーム
-
UWSCの終了の仕方
-
GIFアニメをループさせたくない
-
pythonでファイルのコメント行...
-
タイマーを用いたプログラム
-
VBAで3秒だけ時間を止めたい
-
アクティブセルから、A列最終行...
-
VBA横データを縦にしたいです
-
Java 南京錠
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
VBAで3秒だけ時間を止めたい
-
範囲指定したセルを1つずつ飛...
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
vbscriptでIE自動入力(途中で...
-
乱数の桁数指定、または範囲指定。
-
GIFアニメをループさせたくない
-
プログラミングについて。 1つ...
-
エクセルの当番表を作っていま...
-
テキストボックスの名前に変数...
-
ループフリー
-
vb.netからエクセル関数書き込み
-
CSVファイルの特定の行だけを読...
-
VBA for i=1 to lastrow
-
どなたかこのプログラミングを...
-
Do whileでExitせず、ループの...
おすすめ情報