[an error occurred while processing this directive]
|
Есть программа на слэйве
void interrupt isr(void)
{
if(SSPIF && SSPIE)
{
temp = SSPBUF;
SSPOV =0;
SSPIF = 0;
RD1 = 1;
i++;
}
}
main()
{
CLRWDT();
PORTB = 0;
TRISB = 0b11111111; // all inputs
RBPU = 0; //RB to high
PORTC = 0;
TRISC = 0b10011000; // sda, scl - inputs
PORTA = 0;
TRISA = 0b00000000;
PORTD = 0;
TRISD = 0b00000000;
PORTE = 0;
TRISE = 0b00000000;
SSPEN = 1;
SSPCON2 = 0;
SSPM3 = 1; /* slave 7-bit address */
SSPM2 = 1;
SSPM1 = 1;
SSPM0 = 0;
SSPADD = 3; // ADDR_SLAVE;
CKP = 1;
// RW = 1;
SMP = 1;
CKE = 0;
SSPOV = 0;
SSPIE = 1;
PEIE = 1; /* enable interrupt periferii */
GIE = 1;
i = 0;
cycle: RD7 = 1;
CLRWDT();
if(i == 2)RD3 = 1;
if(i == 4)RD5 = 1;
RD7 = 0;
goto cycle;
}
Установил, что программа реагирует только на старт и на стоп, а на адрес и данные не реагирует. Адрес проверял осцилографом - все совпадает.Н этой же шине висит i2c расширитель порта - в него все прекрасно пишется. Сигнал на шине как в учебнике. Может, что-то не так в инициализации слэйва?
E-mail: info@telesys.ru