HELLO world!!!!!
He probado lo que me dices , rivale; y te cuento lo que pasa: visualizo 2 bytes en el puerto. Son distintos por lo que quizás pueda valerme.
Os cuento. Como he dicho en el primer mensaje del post recibo 4 bytes en hexadecimal y el "pic emisor" me dicen que comunica a 38400bps, 8bits de datos, 1 bit stop y sin paridad. Se trata de un driver conectado a una touch screen, resistiva 4 hilos... el fabricante me dice que envía esos 4 bytes correspondientes a las coordenadas x e y de la pulsación: en teoría X X Y Y. Tendré algo en el #use rs232(), mal configurado???. Voy a seguir, a ver si logro recibir los 4 bytes.
El código por ahora está asi:
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock=20000000)
//#use RS232 (baud=38400, bits=8, parity=N, xmit=PIN_C6, rcv=PIN_C7,INVERT,FORCE_SW)
//#use RS232 (baud=38400, xmit=PIN_C6, rcv=PIN_C7)
#use RS232 (baud=38400, bits=8, xmit=PIN_C6, rcv=PIN_C7)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#byte PORTA = 0X05
#byte PORTB = 0X06
#byte PORTC = 0X07
#byte PORTD = 0X08
#byte PORTE = 0X09
int lectura=0;
int valor[4];
int i=0;
int1 flag=0;
#int_rda
void RDA_isr()
{
if(kbhit())
{
lectura=getc();
valor[i]=lectura;
i++;
if(i==4)
{
flag=1;
i=0;
}
}
}
void main()
{
SET_TRIS_A (0xFF);
SET_TRIS_B (0x0F);
SET_TRIS_C (0x80);
SET_TRIS_D (0X00);
/*for(i=0;i<4;i++)
{
valor[i]=0;
}*/
//flag=0;
//lectura=0x00;
PORTD=0X00;
//int e=0;
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
delay_ms(300);
while(true)
{
delay_ms(100);
if(flag==1)
{
PORTD=valor[0];
delay_ms(2000);
PORTD=0;
delay_ms(2000);
PORTD=valor[1];
delay_ms(2000);
PORTD=0;
delay_ms(2000);
PORTD=valor[2];
delay_ms(2000);
PORTD=0;
delay_ms(2000);
PORTD=valor[3];
delay_ms(2000);
PORTD=0;
delay_ms(2000);
flag=0;
}
PORTD=0;
}
}
Saludos cordiales;