请教ATmega16使用EEPROM存储数据时遇到的现象???
[复制链接]
以下是我做实验的一段小程序:
#include
#include
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
main()
{
char a,b,c;
a=b=c=0;
init_devices();
while(c==0)
{ EEARH=0X00;
if((EECR&0X02)==0)
{ if((SPMCR&0X00)==0)
{ EEARL=0X02;
EEDR=0X08; //往EEPROM中0x02写入值
//EECR|=(1<
EECR|=0X04;
//EECR|=(1<
EECR|=0X02;
a=1;
}
}
if(a==1)
{ if((EECR&0X02)==0)
{ EEARL=0X02;
//EECR|=(1<
EECR|=0X02; //读EEPROM中0x02的值
b=EEDR;
}
}
c=3;
break;
}
while(b==0x08)
{ PORTA = 0x00;
}
}
当执行PORTA=0x00时,PA0引脚会变为低电平,外围电路指示灯会亮。、
现在的问题是:用仿真器单步执行的时候,程式没有问题,PA0最后变为低电平,但当用仿真器直接RUN时,PA0一直不拉低,但此时可监控到EEPROM中0X02值已变为08。然后不用仿真器,直接跑单片机,效果还是一样,PA0不拉低。
请问各位,这到底是什么原因引起的呢????