0

ATmega32 で 8 ビットの数値を取得して 7 セグメントで表示するプログラムを作成しましたが、Proteus でシミュレートすると、プログラム メモリが不足していると表示されます。正確にはどうすればよいですか?

.INCLUDE "M32DEF.INC"
.ORG $00
//data to save in program memory
.DB $FC,$30,$6E,$7A,$B2,$DA,$DE,$70,$FE,$FA
.ORG $08
LDI R16,$01
//Statements
4

1 に答える 1

2

.ORGディレクティブが正しくないようです。プロセッサはアドレス 0 で命令の実行を開始しますが、そこにデータを配置しました。同様に、10 バイトのデータがありますが、それらを配置するのは 8 バイトだけです。ラベルを付けていないため、データの目的がわかりません。それは指示であるはずですか?液晶ディスプレイの数字ですか?

プログラムが何をしようとしているのかを説明するコメントをコードに追加していただけると助かります。スタック ポインタを設定し、ポートの方向を設定する部分はわかりますが、ループを分析しようとはしません。何をするつもりか教えてください。

まず、場所を変えてみることができ.ORGます。多くの場合、プログラムには「main:」というラベルの付いた部分があり、最初の命令は.ORG $0main へのジャンプになります。このようにして、データをプログラムの先頭に配置することができます。これにより.ORG $08、コード内で見つけやすくなりますが、誤って実行されることはありません。

.INCLUDE "M32DEF.INC"
.ORG $00
jmp main

.ORG $08
digits: .DB $FC,$30,$6E,$7A,$B2,$DA,$DE,$70,$FE,$FA

main:
LDI R16,$01 ; set stack pointer
OUT SPH,R16
LDI R16,$00
OUT SPL,R16

and so on
于 2016-12-03T02:00:13.087 に答える