Вот мой кусочек кода передачи приема
в PROTEUS посылки летят на ура
в железе хрень какая-то
пропадают биты ....
такое впечатление что в SPDR попадает какая-то фигня вместо нужного значения
ХЕЛП МИ ПЛИЗ!!!
volatile unsigned long int add_value@0x01D5;
volatile unsigned int res_volt@0x01D9;
volatile unsigned char resive[4]@0x01DD, transfer[4]@0x01E1;
void SPI_MasterTransmit(long int cData)
{
char a,i;
#asm
clr r26
sts 0x01E1, r26
sts 0x01E2, r26 ;очищаем регистр
sts 0x01E3, r26 ;пустое значение во все байты переменной transfer
sts 0x01E4, r26 ;
sts 0x01DD, r26 ;пустое значение во все байты переменной resive
sts 0x01DE, r26 ;
sts 0x01DF, r26 ;
sts 0x01E0, r26 ;
#endasm
if (cData==add_value)
{
i=4;
#asm
lds r26,0x01D8 ; //add_value
sts 0x1E1, r26 ; //transfer
lds r26,0x01D7 ;//затасовываем перемм int Add_value в массив char transfer[]
sts 0x01E2, r26 ;
lds r26,0x01D6 ;
sts 0x01E3, r26 ;
lds r26,0x01D5 ;
sts 0x01E4, r26 ;
#endasm
PORTB &= ~(1<<1);
}
if (cData==volt_step)
{
i=2;
#asm
lds r26,0x01E6 ; //volt
sts 0x1E1, r26 ; //transfer
lds r26,0x01E5 ;// таж самое только с volt
sts 0x1E2, r26 ;
#endasm
PORTB &= ~(1<<2);
}
for (a = 0; a < i;)
{
delay_us(10);
SPDR = transfer[a]; // даные для записи
while(!(SPSR & (1<<SPIF))) // ждем подтверждения прохода байта - байт принят
;
resive[a]=SPDR;
a++;
};
if (cData==add_value)
{
PORTB |= (1<<1);
};
if (cData==volt_step)
{
PORTB |= (1<<2);
#asm
lds r24,0x01DD ;загружаем байт переменной resive в переменную res_volt
sts 0x01DA, r24
lds r24,0x01DE
sts 0x01D9, r24
#endasm
};
идейный борец за ден. знаки всего мира