Цитата(Pretorianec @ Dec 4 2006, 13:00)

Если быть точным, то надо сначала записать 1 байт, потом проверить RDY/BUSY == 1, потом RDY/BUSY == 0, а затем RDY/BUSY = 1, и только после этого что-то делать.
У жука 8253 почему-то медленно сбрасывается флаг RDY/BUSY.
Поэтому, после начала записи надо дождаться RDY=0, потом дождаться RDY=1.
Это будет означать, что байт записан и можно начинать следующую
операцию записи.
Например, приблизительно так (IAR C):
Код
/*-------------------------------------*/
void eeprom_rdy (void)
{
for (;;) {if ((EECON & (1 << EERDY)) != 0) break;}
}
/*-------------------------------------*/
void eeprom_rdy0 (void)
{
for (;;) {if ((EECON & (1 << EERDY)) == 0) break;}
}
/*-------------------------------------*/
write_byte (word ad, byte dat)
{
data byte *pxdata;
pxdata = (byte *) (0x010000 | ad);
DI
EECON |= (1 << EEMEN) | (1 << EEMWE);
EI
*pxdata = dat;
eeprom_rdy0 ();
eeprom_rdy ();
DI
EECON &= ~((1 << EEMEN) | (1 << EEMWE));
EI
}
/*-------------------------------------*/