Eso es Interrupciones. ahora puedo pasar una gran cantidad de variables casi al instante.
Como siempre hay un problema spi_write(mony); mony=spi_read(); no sirven para embiar variables "long" que es lo que es mony
//Estas variables deben ser globales para los dos
//int peti,cliente,salir;
//int1 tarje;
//long mony;//////Hay un problema con "long" no se puede enviar con spi_write(mony);
//int1 fclee[5];
//int1 fcpos[5];
////////////////////MASTER
main(){
while(true){//whil
refresco();//Es importante que sea funcion porque mi proyecto debe embiar las variables actualizadas
//para que "slave" las trabaje bastantes veces
}//whil
}
void refresco(){
int co,cu;
output_low(PIN_c6);//S.envio incial 0
lcd_putc("\f"); cu=1;
for (co=0;5>co;co++){ //for int1
valor=rand();
if (valor>20000) { fclee[co]=1; } else { fclee[co]=0; }
lcd_gotoxy(cu,1); lcd_gotoxy(cu,1); printf(lcd_putc,"fl[%d]=%d ",co,fclee[co]); cu+=8; //printf(lcd_putc,"fl[%d]=%d ",co,valor);
spi_write(fclee[co]);
protMaster(); /// protocolo de envio vajo SPI MAESTRO.........*
} //for int1
cu=1;
for (co=0;5>co;co++){ // for int1_2
valor=rand();
if (valor>20000) { fcpos[co]=1; } else { fcpos[co]=0; }
lcd_gotoxy(cu,2); printf(lcd_putc,"ps[%d]=%d ",co,fcpos[co]); cu+=8; //printf(lcd_putc,"fl[%d]=%d ",co,valor);
spi_write(fcpos[co]);
protMaster(); /// protocolo de envio vajo SPI MAESTRO.........*
} // for int1_2
delay_ms(4000);//para mostrar principales boolean master & savle
peti=rand();
spi_write(peti); /// int peti
protMaster();
cliente=rand();
spi_write(cliente); /// int cliente
protMaster();
salir=rand();
spi_write(salir); /// int salir
protMaster();
valor=rand();
if (valor>20000) { tarje=1; } else { tarje=0; }
spi_write(tarje); /// int1 tarje
protMaster();
mony=rand();
spi_write(mony); /// long mony
protMaster();/// protocolo de envio vajo SPI MAESTRO.........*
lcd_putc("\f");
lcd_gotoxy(1,1); printf(lcd_putc,"INT...peti=%d cliente=%d salir=%d",peti,cliente,salir);
lcd_gotoxy(1,2); printf(lcd_putc,"int1 tarje=%d LONG mony=%lu",tarje,mony);
delay_ms(4000);
lcd_putc("\f envio completo"); delay_ms(500);
}
void protMaster(){/// protocolo de envio vajo SPI MAESTRO
output_high(PIN_c6); // s.envio=true afecta PIN_B7_SLAVE/E.envio
delay_ms(5);
while (Input(PIN_c0)==0) { delay_ms(5); } //Impide + envios asta SLAVE lo diga con su S.pin_a1_(S.recivido) -----> E.pin_c0_MASTER(E.recivido)
output_low(PIN_c6); // s.envio=false afecta PIN_B7_SLAVE/E.envio
delay_ms(5);
}
//////////////////////////sclavo/SLAVE//////////////////////
main(){
while(true){//whil
if(Input(PIN_b7)) { //pin_b7=E.envio=true afectado por pin_c6_MASTER/S.envio=true
lcd_putc("\f"); cu=1;
for (co=0;5>co;co++) {//for nt1_1
fclee[co]=spi_read();
lcd_gotoxy(cu,1); printf(lcd_putc,"fl[%d]=%d ",co,fclee[co]); cu+=8;
protSlave();///protocolo de recivo vajo SPI SLAVE...........*
}//for nt1_1
cu=1;
for (co=0;5>co;co++){//for int1_2
fcpos[co]=spi_read();
lcd_gotoxy(cu,2); printf(lcd_putc,"fp[%d]=%d ",co,fcpos[co]); cu+=8;
protSlave();///protocolo de recivo vajo SPI SLAVE...........*
}//for it1_2*/
peti=spi_read();// int* peti
protSlave();///protocolo de recivo vajo SPI SLAVE
cliente=spi_read();// *cliente
protSlave();
salir=spi_read();// *salir
protSlave();
tarje=spi_read();// int1 targe
protSlave();
mony=spi_read();// long mony lectura erronea******
protSlave();///protocolo de recivo vajo SPI SLAVE...........*
lcd_putc("\f");
lcd_gotoxy(1,1); printf(lcd_putc,"int...peti=%d cliente=%d salir=%d",peti,cliente,salir);
lcd_gotoxy(1,2); printf(lcd_putc,"int1 tarje=%d long mony=%lu",tarje,mony);///long mony siempre falla******
delay_ms(1000);
lcd_putc("\f nuevo recivo");
}//whil
}
void protSlave(){///protocolo de recivo vajo SPI SLAVE
output_high(PIN_a1);//S.recivido=true -----> pin_c0_MASTER/E.recivido
delay_ms(2);
output_low(PIN_a1); //S.recivido=false-----> pin_c0_MASTER/E.recivido
while (Input(PIN_b7)==0) { delay_ms(2); } //Se queda esperando asta qu b7=true (E.envio) afectado por pin_c6_MASTER/S.envio=true
delay_ms(2);
}
Otra cosa que no me gusta es que "slave" se atrasa mas con los delay. No se como sera en la practica pero eso es lo que me hace en proteus.
output_high(PIN_a1);//S.recivido=true -----> pin_c0_MASTER/E.recivido
delay_ms(2);
output_low(PIN_a1); //S.recivido=false-----> pin_c0
Me estraña que funcione porque cuando pin_c0_MASTER es true. Master podria estar sumergido en un delay(5) y luego nunca saldria de
while (Input(PIN_c0)==0) { delay_ms(5); } //Impide + envios asta SLAVE lo diga con su S.pin_a1_(S.recivido) -----> E.pin_c0_MASTER(E.recivido)