Вот весь код:
Код
#include <mega16.h>
void SPI_MasterTransmit(unsigned char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & 0x80));
}
void main(void)
{
unsigned char i=0;
unsigned char mass_data [7] = { 0x0A, 0xff, 0x3A, 0xAf, 0xdd, 0xA0, 0xcf };
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0xB0;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 500,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0xD1;
SPSR=0x00;
#asm
in r30,spsr
in r30,spdr
#endasm
#asm("sei")
while (1)
{
while(i<7)
{
PORTB=0x10;
SPI_MasterTransmit( mass_data [i] );
i++;
}
PORTB=0;
}
С функциями не стал пока заморачиваться - сразу в инициализации портов все прописал.
При обращении к микросхеме - сначала идет адрес чипа (восемь бит), затем гонятся данные, SS активируется только когда идут данные. На рисунке захватываются не восемь, а девять бит (мне кажется что это скорее всего опеачтка).
В протеусе все передается - единственное что смущает так это то что данные гонятся только побайтно через небольшие промежутки. И даже не знаю как будет реагировать на это микросхема.
Эскизы прикрепленных изображений