Hola buenos dias,soy nuevo en este foro y en la programacion de pic en lenguaje c,tengo un problema con un programa y que no puedo hacer que se comunique pic con pc, ya que quiero que mediante la pc mandar un numero de 1 a 3 y segun el numero , encender una salida del pic un led...pero al simularlo no envia nada..al precionar la tecla...este programa me lo pasaron en el trabajo ya hecho pero no funciona...lo hizo otra persona y no funcona y estoy tratando de hecharlo a funcionar...pero tengo dudas de como cacha los valores que le envio de pc...se que con getc se la asigno a una variable pero como los recibe o loas cacho del pc?...envio copia de programa...
#if defined( __PCM__ )
#include <16f877A.h>
#fuses HS, NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000,RESTART_WDT)
#endif
#include <string.h>
#define SALIDA1 PIN_D0
#define SALIDA2 PIN_D1
#define SALIDA3 PIN_D2
#define SALIDA4 PIN_D3
#define SALIDA5 PIN_D4
//====================PINES DE COMUNICACION==================
//----- PINES PARA COMUNICACION CON EL CONTROL |
#define RX_EXT PIN_C7 // |
#define TX_EXT PIN_C6 // |
//===========================================================
// COMANDO A MODULOS
//=================== DECLARACION DE LOS PUERTOS DE COMUNICACION ==================================
#use rs232(baud=4800, xmit=TX_EXT, rcv=RX_EXT, ERRORS, RESTART_WDT)
char buffer[64];
char salida;
int1 datoRS232;
void apagaSalidas()
{
output_low(SALIDA1);
output_low(SALIDA2);
output_low(SALIDA3);
output_low(SALIDA4);
output_low(SALIDA5);
}
#INT_RDA
void serial()
{
int i;
i=0;
do
{
buffer = getc();
i++;
}while(buffer[i-1] != 0x0C);
buffer = '\0';
disable_interrupts(INT_RDA);
apagaSalidas();
//printf("%s",buffer);
datoRS232 = TRUE;
}
//===============================================================================
// FUNCION main() ***************************************************************
void main() {
int16 tiempo;
char salida;
int i;
for(i=1;i<=2;i++)
{
output_high(SALIDA1);
delay_ms(160);
output_low(SALIDA1);
output_high(SALIDA2);
delay_ms(160);
output_low(SALIDA2);
output_high(SALIDA3);
delay_ms(160);
output_low(SALIDA3);
output_high(SALIDA4);
delay_ms(160);
output_low(SALIDA4);
output_high(SALIDA3);
delay_ms(160);
output_low(SALIDA3);
output_high(SALIDA2);
delay_ms(160);
output_low(SALIDA2);
}
output_high(SALIDA1);
delay_ms(160);
output_low(SALIDA1);
datoRS232 = FALSE;
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
printf("Empaque V1.0 \n\r Listo!");
while(1)
{
if(datoRS232 == TRUE)
{
salida = 0;
for(i=0;i<strlen(buffer);i++)
{
if(isdigit(buffer)) salida = buffer;
}
if(salida >= 0x31 && salida <= 0x35)
{
printf("\r\nSalida: %c", salida);
if(salida == '1' ) output_high(SALIDA1);
else if(salida == '2' ) output_high(SALIDA2);
else if(salida == '3' ) output_high(SALIDA3);
else if(salida == '4' ) output_high(SALIDA4);
else if(salida == '5' ) output_high(SALIDA5);
}
else
{
printf("\r\nValor no valido");
}
datoRS232 = FALSE;
tiempo = 0;
delay_ms(2000);
while(kbhit())
{
salida = getc();
}
for(i=0;i<64;i++)
{
buffer = '\0';
}
enable_interrupts(INT_RDA);
}
if(tiempo < 30000)
{
tiempo++;
}
else if(tiempo == 30000)
{
tiempo++;
apagaSalidas();
}
delay_ms(10);
}
}