do {
delay_ms(10000); \\ Retardo se ajustara según la necesidad
printf("\r\nBuffered data => ");\r\n \\ necesitare estos caracteres como parte de mi programa
while(bkbhit)\\ necesito prescindir de cualquier intervención de teclado
putc( bgetc() );\\ obtener la cadena pero en hexadecimal
} while (TRUE);
}
do {
delay_ms(1000); \\ Intervalo a un segundo
putc(0x45)putc(0x63)&putc(0x72); \\señal de sincronismo presente todo el tiempo
while(bkbhit) \\ sigue esta linea segun lo que me explico KILLERJC
if(( bgetc()==(0x26,0x47,0x45))){ \\ esquina superior pantalla táctil
putc(0x56)&(0x68)&(0x74); respuesta
}
} while (TRUE);
} #include <16f628A.h>
#fuses XT,nowdt,nolvp,noprotect,nomclr
#use delay(clock=4000000)
#include <string.h>
#use rs232(baud=9600,parity=E,xmit=pin_B2,rcv=pin_B1,bits=8,ERRORS)
#define OUT1 PIN_A2
#define OUT2 PIN_A3
#define BUFFER_SIZE 32
BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;
#int_rda
void serial_isr() {
int t;
buffer[next_in]=getc();
t=next_in;
next_in=(next_in+1) % BUFFER_SIZE;
if(next_in==next_out)
next_in=t; // Buffer full !!
}
#define bkbhit (next_in!=next_out)
BYTE bgetc() {
BYTE c;
while(!bkbhit) ;
c=buffer[next_out];
next_out=(next_out+1) % BUFFER_SIZE;
return(c);
}
void main() {
enable_interrupts(int_rda);
#if defined(__PCM__)
enable_interrupts(global);
#endif
do{
delay_ms(800);
putc(0x48); //sincronismo
putc(0x63); //sincronismo
putc(0X72); //sincronismo
while(bkbhit)
if (bgetc() == 0x26) //Trama Inicial
{
if (bgetc() == 0x47) //Punto de contacto Esquina Superior izquierda debe cambiar segun contacto
{
if (bgetc() == 0x45) //Trama Final
{
putc(0x56); //Respuesta a trama Inicial
putc(0x68); //Respuesta a punto de contacto
putc(0x74); //Respuesta a Trama Final
}
}
}
}
while(true);
}
cambie el pic temporalmente por un accidente con el 876 y esta algo duro de conseguir. para hacer la prueba física ademas se hace necesario agregar mas comandos de contacto, la trama inicial y final de la trama siempre sera la misma en la recepción. solo estoy usando un comando el 0x47 porque al estar dentro del do no me permite cambiarlo. Nuevamente mil gracias por la colaboración.do{
delay_ms(800);
putc(0x48); //sincronismo
putc(0x63); //sincronismo
putc(0X72); //sincronismo
while(bkbhit)
if (bgetc() == 0x26) //Trama Inicial
{
if (bgetc() == 0x47) //Punto de contacto Esquina Superior izquierda debe cambiar segun contacto
{
if (bgetc() == 0x45) //Trama Final
{
putc(0x56); //Respuesta a trama Inicial
putc(0x68); //Respuesta a punto de contacto
putc(0x74); //Respuesta a Trama Final
}
}
}
}
while(true);
}
talvez es confuso por lo que hay entre el do y el bkbhit los tres sincronismos para verificar la actividad. En la prueba al enviarlos como esta en el codigo la respuesta que tengo es la requerida, si hago el envio por aparte 0x26 o 0x27 o 0X45 no tengo respuesta en el terminal. Hice la prueba fisica y en proteus y en ambos casos se cumple. De nuevo mil gracias.