Deshavilitar la interrupcion no fue bueno. Tambien utilice un pin para impedir que el otro interrumpiese nada en momento innapropiado. NO esto congela toda la accion . De todas creo que esto ya esta casi resuelto.
Podriais ayudarme en lo siguiente.
Al cabo de un tiempo todo se me traba por el spiwrite() o spiread() de SPI Aveces se recupera a base de mandar una y otra vec la imformacion ocurre:
variable1--->dato1 variable2--->dato2 variable2--->dato2 variable3--->dato3 ....lo que deberia ser
variable1--->dato2 variable2--->dato3 variable3--->dato4 variable4--->dato1 ....desconcierto
(los datos se falsean durante un momento pero vuelven a recuperarse)* otras no. Se queda totalmente noqueado dentro de esta funcion
Si se como anotar el fallo
¿pero como se desavilita el spi, y que pase de las cualquiera de las dos funciones?
Aunque exista el #in_spp y #in_spa me gusta el #int_ext porque mediante puertas con pocos pins emulo a las llamadas SS de MISO y MOSI
Esto es lo principal
micro-sensor
void re2(){///transcurso de juego aleatorio
//re2 Se encarga de datos como enviarlos -numero posicion[distancia]-
unsigned int8 i,p;//,aa;
unsigned int16 d;
//CONVER(1);
MF=0;
output_high(PIN_C2);//RW TRUE
spi_write(nu);//numero total-de-objetivos int8
PM();
for(i=0;nu>i;i++){//for(cx)//MANDAR--->
p=psz[i];
spi_write(p); PM();///posicion int8
d=dis[p];
v8=make8(d,0);///distancia INT16
spi_write(v8); PM();
v8=make8(d,1);
spi_write(v8); PM();
}//for(i)
output_low(PIN_C2);//RW FALSE
}
int1 PM() {/// protocolo de envio vajo SPI MAESTRO
delay_ms(4);//4
if(Input(PIN_C0)){ delay_ms(4); return 0; }//recivido
int8 t=0;
for(t=0;20>t;t++); { delay_ms(1); //Impide + envios asta SLAVE lo diga con su S.pin_a0_(S.recivido) -----> E.pin_c0_MASTER(E.recivido)
if(Input(PIN_C0)){ delay_ms(2); return 1; }//recivido
}
MF++; lcd_gotoxy(33,2); printf(lcd_putc,"MF %d ",MF); return 1;///FALLO MF++
}
Torret
nu=spi_read(); x2=1; PS();
for(co=0;nu>co;co++){//VJ
//psz[co]=spi_read(); PS();///posicion int8
k8=spi_read(); PS();///posicion int8
v8=spi_read(); PS();//distancia INT16
v16=spi_read();
k16=v16*256+v8;//distancia int16
if(co>con){ PS(); } else {//protocolo PS(); alterado se exige mucho-tiempo-d-ejecuciones tras la ultima lectura.....
output_high(PIN_a0); delay_ms(4); output_low(PIN_a0);//6 valido
lcd_gotoxy(x2,2); printf(lcd_putc,"%u[%lu] ",k8,k16); x2+=5;
delay_ms(1);//protocolo PS(); alterado se exige mucho-tiempo-d-ejecuciones tras la ultima lectura......2 valido
if(k8>99) { x2+=2; } else { x2++; }//if(k8>9){ x2++; } }
if(k16>99) { x2+=2; } else { if(k16>9){ x2++; } else { if(k16<5){ lex++; } } }//distancia-(k16<5) objetivo alcanzo la torreta y la esta dañando lexion++;
}
psz[co]=k8; dis[k8]=k16;///..............................................
}//for(co)
lcd_gotoxy(x2,2); lcd_putc(" ");
void PS(){///protocolo de recivo vajo SPI pic2SLAVE
output_high(PIN_a0);//S.recivido=true -----> pin_c0_MASTER/E.recivido
delay_ms(5);
//int8 tra=0;
//do{ delay_ms(1); //Espera a k pin_c6_MASTER/S.envio=true -----> b7=true
//if (tra>15) { SF++; lcd_gotoxy(33,2); printf(lcd_putc,"s_f %d",SF); break; } tra++; }while(Input(!PIN_C1));
output_low(PIN_a0);
delay_ms(1);
}