Hola a todos,
bueno la primera parte simulo un lector de codigo de barra que se comunica por rs232 ASCII, no se que protocolo usa porque hasta el miercoles es que puedo empezar hacer pruebas.
De todas formas quiero ganarle tiempo al tiempo y decidí empezar a enviar informacion entre dos PIC uno simulando el lector de codigo (LR) y otro que me hace la interface entre LR y un Computador que llamo RS232. MI PROBLEMA es que solo puedo enviar 1 letra o un digito. que estoy haciendo mal? aca estan los codigos:
CODIGO DEL LECTOR:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
int c1;
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(true){
if(input(PIN_B0)){
c1=5;
puts("1");
while(input(pin_b0)){\\ANTIREBOTE
}
}
if(input(PIN_B1)){
c1=8;
puts("2");
while(input(pin_b1)){
}
}
if(input(PIN_B2)){
c1=7;
puts("3");
while(input(pin_b2)){
}
}
}
}
EL CODIGO DE LA INTERFASE:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#use rs232(stream=PC,baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use rs232(stream=LR,baud=9600,parity=N,xmit=PIN_C4,rcv=PIN_C5,bits=8)
#include "flex_lcd.c"
char c;
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
c=0;
lcd_init();
while(TRUE){
c=getc(LR);
if(c!=0){
fprintf(PC,"\fRecibe:%d",c);\\mostrar en el PC
printf(lcd_putc,"\fRecibe:%d",c);\\mostrar en lcd
}
}
}
No se que estoy haciendo mal, pero solo puedo enviar 1 solo digito, me gustaria enviar un numero tipo long o depronto mas largo, ya que no se a que me voy a enfrentar cuando tenga el lector de codigo.
en todo caso me gustaria enviar y recibir cualquier cosa tipo char, int, long, long long sin ningun problema y de principio a fin.
Desde ya gracias!!