我有ATMEGA128的代码。它应该是一个从0到9的计数器程序。
#include "iom128v.h" #include "macros.h" void delay(int ms) { int c1, c2; for(c1=0;c1<ms;c1++) for(c2=0;c2<970;c2++) NOP(); } void main() { char seg[10]={0b01110111, 0b01100000, 0b00111110, 0b01111010, 0b01101001, 0b01011011, 0b01011111, 0b01110000,0b01111111, 0b01111011}; char i; DDRC=0b10000111; DDRA=0xFF; DDRG=0x01; PORTG=0; PORTA=0; PORTC=0; PORTC=5; PORTC=7; PORTA=0xFF; PORTC=1; PORTC=2; PORTC=6; while(1) { for(i=0;i<10;i++) { PORTA=~seg[i]; delay(300); } } }
我在proteus中运行此代码,并循环发生以下错误
PC = 0x00FC。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21E1] = AA。 [U1]
PC = 0x0132。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21FF] = 99。 [U1]
PC = 0x0132。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21FE] = 00。 [U1]
PC = 0x0168。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21D6] = 21。 [U1]
PC = 0x016A。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21D5] = D7。 [U1]
PC = 0x016C。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21D4] = 02。 [U1]
PC = 0x016E。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21D3] = 00。 [U1]
PC = 0x0174。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21FD] = BA。 [U1]
PC = 0x0174。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21FC] = 00。 [U1]
PC = 0x01E0。 [AVR MEMORY]未启用接口时(SRE = 0)外部存储器写入:[0x21D2] = 0A。 [U1]
PC = 0x01E2。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21D1] = 02。 [U1]
PC = 0x01E4。 [AVR MEMORY]未启用接口时(SRE = 0)的外部存储器写入:[0x21D0] = D7。 [U1]
PC = 0x01E6。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21CF] = 21。 [U1]
PC = 0x01E8。 [AVR MEMORY]未启用接口时(SRE = 0)进行外部存储器写入:[0x21CE] = 7B。 [U1]
PC = 0x01EA。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D5]。 [U1]
PC = 0x01EC。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D6]。 [U1]
PC = 0x01EE。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D3]。 [U1]
PC = 0x01F0。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D4]。 [U1]
PC = 0x0202。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21CE]。 [U1]
PC = 0x0204。 [AVR MEMORY]未启用接口(SRE = 0)时读取外部存储器:[0x21CF]。 [U1]
PC = 0x0206。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D0]。 [U1]
PC = 0x0208。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D1]。 [U1]
PC = 0x020A。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21D2]。 [U1]
PC = 0x000E。 [AVR MEMORY]未启用接口(SRE = 0)时读取外部存储器:[0x21FC]。 [U1]
PC = 0x0174。 [AVR MEMORY]未启用接口时(SRE = 0)读取外部存储器:[0x21FD]。 [U1]
PC = 0x0000。 [AVR CPU] RET地址= 0x0000 [U1]
我有ATMEGA128的代码。它应该是一个从0到9的计数器程序。 for(c1 = 0; c1
您的代码似乎没有使用外部存储器。此访问必须是堆栈访问。检查堆栈地址。当然,Proteus在模拟中有很多奇怪的行为。
[对于外部内存访问:您必须将MCUCR寄存器上的SRE位置1以使能外部存储器接口。还要检查MCUCR.SRW10,XMCRA和XMCRB的配置。在ATmega103兼容模式(已编程M103C熔断器)下,无法访问XMCRA和XMCRB。当SRE位置1时,A,C和G [2:0]将专用于XMEM接口(而不是普通的GPIO端口)。(另请参见在F_CPU宏的基础上自动获得更好的繁忙等待延迟。)