Przerwania są wyłączone, bo ten program miał tylko zapisywać co kolwiek pod określoną komórkę, w celu poznania zapisu do eeprom. Program zawierał funkcję int w której znajduje się tylko obsługa eeprom, a zaraz za tym pusta pętla nieskończona. :/
Może problem leży w tym że wszystko jest jako symulacja w programie PROTEUS, ale raczej nie powinno mieć to znaczenia bo wykorzystując makro SBI problemu nie ma. A wykorzystując bibliotekę eeprom.h także wszystko działa picuś glancuś.
Tak działa:
Kod:
#define sbi(port, bit) __asm__ __volatile__ ("sbi %0, %1" :: "I" (_SFR_IO_ADDR(port)), "I" (bit))
#define cbi(port, bit) __asm__ __volatile__ ("cbi %0, %1" :: "I" (_SFR_IO_ADDR(port)), "I" (bit))
int main()
{
DDRB = 0xff;
PORTB = 0x00;
while(EECR & (1<<EEWE))
;
EEARH =0x00;
EEARL = 0x01;
EEDR = 0x22;
sbi(EECR,EEMWE);
sbi(EECR,EEWE);
while(EECR & (1<<EEWE))
;
PORTB = 0xff;
// Write your code here
while (1)
;
return 0;
}
A tak nie działa:
Kod:
int main()
{
DDRB = 0xff;
PORTB = 0x00;
while(EECR & (1<<EEWE))
;
EEARH =0x00;
EEARL = 0x01;
EEDR = 0x22;
EECR |= (1<<EEMWE);
EECR |=(1<<EEWE);
while(EECR & (1<<EEWE))
;
PORTB = 0xff;
// Write your code here
while (1)
;
return 0;
}