2016-12-02 4 views
0

私は8ビットの数値を取得し、7segmentで表示するためにATmega32用のプログラムを作成しますが、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 
+0

私はこの質問はこの質問はアルドゥイーノとは何の関係もありません – zx485

+1

をhttp://arduino.stackexchange.com/に属しているため、オフトピックとして、この質問を閉じるために投票しています。タグが言うように、AVR上のアセンブリです。 – UncleO

答えて

2

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

プログラムに何をしようとしているのかを記述するためにコードにコメントを追加した場合に役立ちます。私は、スタックポインタを設定し、ポートの方向を設定する部分を見ることができますが、私はループを分析しようとしたくないです。あなたがやるべきことを教えてください。

まず、.ORGの場所を変更しようとするとよいでしょう。多くの場合、プログラムには「main:」というラベルの付いた部分があり、最初の指示は.ORG $0でメインにジャンプします。こうすることで、プログラムの先頭にデータを置くことができます。例えば、.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 
+0

ありがとうございました。これらのデータはLCDに数字を表示するためのものです。私はそれらをアクセスするために0から10までのプログラムメモリに保存したい –

関連する問題