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:”的部分,第一条指令 at.ORG $0是跳转到 main。这样,您可以将数据放在程序的顶部,例如 at.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 回答