MF=0;
output_high(PIN_C2); // delay_us(10);//RW TRUE
spi_write(nu); PM();//numero total-de-objetivos int8
if(DT){//comunicaion detallada + Lenta (int8 + int16)
for(co=0;nu>co;co++){//for(co)//MANDAR--->
p0=psz[co];
spi_write(p0); PM();///posicion int8
d0=dis[p0];
v8=make8(d0,0);///distancia INT16
spi_write(v8); PM();
v8=make8(d0,1);
spi_write(v8); PM();
}//for(co) RW detallada
//output_low(PIN_C2);//RW FALSE
}
else {//DT=0//comunicaion Simple + rapida (int8 + int8)
for(co=0;nu>co;co++){//for(co)//MANDAR--->
p0=psz[co];
spi_write(p0); PM();///posicion int8
d0=dis[p0];//distancia es improbable que pueda llegar a + de 1000/10-->int8 100
//int16/10 555/10=55 recivira 55*10=550
if(d0>240){ d0=d0/10; }//NO COORDINA Si int16 es inferior a 240 Quiero que se la pase entera a int8
v8=make8(d0,0);
spi_write(v8); PM();
}//for(co) RW Simple
}//end if(DTalle)
void PM() {/// protocolo de envio vajo SPI MAESTRO
for(t=0;450>t;t++){
if(Input(PIN_C0)){ delay_ms(5);
lcd_gotoxy(37,2); printf(lcd_putc,"%lu",t); break;///////
}//recivido
}//for(t)
if(t>447){ delay_ms(5);
MF++; lcd_gotoxy(36,1); printf(lcd_putc,"MF %d ",MF); }///Este printf No debe aparecer MF supone numero de fallos en //comunicacion
}
nu=spi_read(); PS();
if(DT){//int8 + int16 (detalle alto)
for(co=0;nu>co;co++){//for(co)
k8=spi_read(); PS();///posicion int8
psz[co]=k8;//iden
v8=spi_read(); PS();//distancia INT16
v16=spi_read(); PS();
dis[k8]=v16*256+v8;//distancia int16
}//for(co) rs completa
} else {//int8 + int8 (detalle vajo)
for(co=0;nu>co;co++){//for(co)
k8=spi_read(); PS();///posicion int8
psz[co]=k8;//iden
v8=spi_read(); //PS();//distancia INT16/10 1555/10 serian INT8 155 ....259 serian 25
k16=v8;//155 ---> 1550 (se pierde detalle deberia ser 1555 pero micro-master sabe siempre el verdadero valor a la hora de //operarlo)
//k16*10;
if(k16>24){ dis[k8]=k16*10; }//micro-master if(distancia>240) { RW int16/10 } else { RW int16 entera cabe en int8 }
else { dis[k8]=k16; }//la int16 pasada era inferior a 240 (+ rapido y no se pierde detalle)
PS();
}//for(co) RS Simple
}//end if(DTalle)
void PS(){///protocolo de recivo vajo SPI pic2SLAVE
output_high(PIN_a0);//S.recivido=true -----> pin_c0_MASTER/E.recivido
delay_us(4950);//delay_ms(4);
output_low(PIN_a0);
delay_us(50);
}
Lo que pasa es que me gustaria aprovechar lo siguiente.
Si la int16 es menor a 240. No la dividas/10. Mandala entera cabe en int8 Y el Slave a su vec no debe multiplicarla X10
Otra cosa porque no puedo hacer directamente int16 = int8 y tengo que armar este cacao
k16=v8;
k16=k16*10;
dis[k8]=k16;
unsigned int16 k16,dis[200]
unsigned int8 v8,k8;
k16=v8*10;//mal
dis[k8] =v8;//lo curioso es que esto tambien me da un valor erroneo, las 2 son int16
Si esta funcionando DT=0 Mejora el tiempo de transmision perder tiempo en una pregunta IF no es significativo segun el.