No i kolejny problem tym razem z SPI, czy ktoś może sprawdzić mi mój listing?
komunikacja przez spi atmegi8 z atmega32, jak przesyłałem jeden znak wszystko grało jak chce przelać 8 to juz jakieś bzdury wyświetla.
Program przy wywołaniu ma zamienić się zawartością tablicy dane_spi, czyli atmega8 przesyła swoja do atmegi32 a ten z kolei ma zadeklarowana tablice która przesyła do atmegi8. ale coś im to nie idzie.
Slave ATmega8
Master ATmega32
komunikacja przez spi atmegi8 z atmega32, jak przesyłałem jeden znak wszystko grało jak chce przelać 8 to juz jakieś bzdury wyświetla.
Program przy wywołaniu ma zamienić się zawartością tablicy dane_spi, czyli atmega8 przesyła swoja do atmegi32 a ten z kolei ma zadeklarowana tablice która przesyła do atmegi8. ale coś im to nie idzie.
Slave ATmega8
unsigned char dana_i;
unsigned char dana_spi[8]={1,2,3,4,55,66,77,0};
bit flaga_spi_gotowe;
void read_spi(void)
{
for(dana_i=0;dana_i<8;dana_i++)
{
SPDR=dana_spi[dana_i];
flaga_spi_gotowe=1;
SPCR=0b11101000;
while(flaga_spi_gotowe==1)
#asm("nop")
}
}
//----------------------------------------------------------- SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
dana_spi[dana_i]=SPDR;
SPCR=0b01101000;
flaga_spi_gotowe=0;
}
Master ATmega32
unsigned char dana_spi[8]={4,4,4,3,3,3,99,8};
unsigned char dana_i;
bit flaga_spi;
// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
dana_spi[dana_i]=SPDR;
SPCR=0b01111000;
flaga_spi=0;
}
// Declare your global variables here
void send_spi(void)
{
for(dana_i=0;dana_i<8;dana_i++)
{
flaga_spi=1;
SPDR=dana_spi[dana_i];
SPCR=0b11111000;
while(flaga_spi==1)
#asm("nop")
}
}