Вот сам код:
unsigned char r_register(unsigned char a)//чтение байта из озу. a-адрес байта
{
ClearBit(PORTB,CSN);//Прижимаем вывод CSN(SS) МК к земле, тем самым сообщаем о начале обмена данных.
SPDR=a;
while(BitIsClear(SPSR,SPIF));//ожидаем когда освободится SPI для последующей записи байта
SPDR=NOP;
while(BitIsClear(SPSR,SPIF));
SetBit(PORTB,CSN);//Вывод CSN(SS) МК к питанию, обмен данных завершен.
return SPDR;
}//uint8_t a=r_register(CONFIG);
void w_register(unsigned char a,unsigned char b)//а-адрес регистра, b-что пишем в регистр.
{
a=a | W_REGISTER;//накладываем маску
ClearBit(PORTB,CSN);
SPDR=a;
while(BitIsClear(SPSR,SPIF));
SPDR=b;
while(BitIsClear(SPSR,SPIF));
a=SPDR;//это для сброса флага SPIF
SetBit(PORTB,CSN);
}//W_REGISTER (CONFIG,0b00000110);
int main(void)
{
lcd_init();
DDRB=0b101101;
SPCR = (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0);
SPSR = (0<<SPIF)|(0<<WCOL);
w_register(0x11,0b11);
lcd_dat(r_register(0x11));
while(1);
}
Здесь я записываю 0b11 в регистр по адресу 0x11, потом читаю его, но значение все равно 0.