Цитата
ISR(SPI_STC_vect) // вектор прерывания для окончания посылки байта
{
while(revers==0) // что-то типа реверса за одно прохождение
{ // опрашавается одна часть 12 бит
dat0 = SPDR; //
revers=1; //
} //
//
while(revers==1) //
{ //
dat1 = SPDR;
revers=0;
}
bitset(SREG,7);
SPDR = 0x00;
}
Не правильно описано работа с прерыванием. Код dat0 = SPDR; и dat1 = SPDR; выполняются за каждый проход (т.е dat0==dat1). Соответственно появляются ошибки при отображении данных.
Должно быть что-то вроде этого.
Код
ISR(SPI_STC_vect) // вектор прерывания для окончания посылки байта
{
bitclr(SPCR,7);
if(SPSR & 0x80){//SPIF
bitclr(SPSR ,7);
if(revers==0) // что-то типа реверса за одно прохождение
{ // опрашавается одна часть 12 бит
dat0 = SPDR; //
revers=1; //
}
else
{ //
dat1 = SPDR;
revers=0;
}
}
else{
bitclr(SPSR ,6);//WCOL=0;
}
SPDR = 0x00;
bitset(SPCR,7);
}
Сообщение отредактировал Kolia - Apr 2 2007, 13:58