Код
/*****************************************************************************
Обмен данными по SPI
записывает в SPI порт данные wr_data и возвращает прочитанные при обмене данные
******************************************************************************/
UCHAR ExSPI(UCHAR wr_data)
{
UCHAR rd_data;
for(UCHAR i = 0; i < 8; i++)
{
/* отправляем следующий старший бит отправляемого байта */
if(0 != (wr_data & 0x80))
ISP_PORT |= (1 << PIN_MOSI); // = 1
else
ISP_PORT &= ~(1 << PIN_MOSI); // = 0
/* подготавливаем следующий бит */
wr_data <<=1;
/* принимаем очередной (начиная со старшего) бит принимаемого байта */
rd_data <<= 1;
if(0 != (ISP_PIN & (1 << PIN_MISO)))
rd_data++; /* устанавливаем единичный бит, если высокий принимаемый уровень */
/* формируем импульс на выводе SCK МК */
ISP_PORT |= (1 << PIN_SCK); // высокий
__delay_cycles(LOW_SCK_DELEY); // задержка
ISP_PORT &= ~(1 << PIN_SCK); // низкий
__delay_cycles(LOW_SCK_DELEY); // задержка
}
return rd_data;
}