Обычный. Просто изначально все делалось для 8252 и не заработало. Потом ткнул в 8253-пошло. Странно, что я не так делаю?
Код
void init_SPI(void); //Инициализация SPI
void init_ADS(void); //Инициализация АЦП
void spi_out(unsigned char); //Отправка байта по SPI
unsigned char spi_in(void); //Прием байта по SPI
char code init_ADS_word[5]={0x64,0x42,0x20,0x98,0x6A};//Инструкция+4байта параметров АЦП
void init_SPI()
{
SPCR=0x50; //01010000
/* SPR0=0 Частота SCK
SPR1=0
CPHA=0 SCK___/```
CPOL=0 SCK___
MSTR=1 Master
DORD=0 Старшим битом вперед
SPE=1 SPI разрешен
SPIE=0 Прерывание от SPI запрещено*/
}
//-------------------------------------------------------------------------
void init_ADS()
{
char j;
IE1=0;
while(!IE1);//Ждем DRDY от АЦП
for(j=0;j<5;j++)
{
spi_out(init_ADS_word[j]);
}
}
//-------------------------------------------------------------------------
void spi_out(unsigned char byte)
{
unsigned char k;
SPDR=byte;
do { //Ожидаем отправки
k=SPSR;
k&=SPIF_;
}
while(!k);
}
//-------------------------------------------------------------------------
unsigned char spi_in()
{
unsigned char k;
SPDR=0xFF; //Фиктивная отправка
do { //Ожидаем приема
k=SPSR;
k&=SPIF_;
}
while(!k);
return SPDR;
}
//-------------------------------------------------------------------------
Спасибо.