Цитата
unsigned char SSP_write (unsigned char data)
{
volatile unsigned char result;
result = SSPDR;
SSPDR = data; // send next SPI channel 0 data
while ((SSPSR & 0x10)) ; // wait for transfer completed
return result;
}
1. Писать в данном случае volatile нет смысла.
2. Почему чтение перед записью и ожиданием? Может надо после паузы? Или так, но ожидание в самом начале процедуры.
3. После установки SSPCR1=2 уже нельзя менять параметры SPI'я. Система не позволяет. Эта команда должна быть последней. Ну а для 100% надёжности первую команду инициализации лучше сделать: SSPCR1 = 0x00