#include<16f1933.h>
//Directivas al compilador
#fuses HS,NOWDT,MCLR,NODEBUG,PUT,NOBROWNOUT,NOLVP,NOPROTECT //Bits de configuracion
#use delay(clock=20000000) //Velocidad del cristal
#use RS232(UART1,baud=9600,xmit=pin_c6,rcv=pin_c7,stop=1,parity=n,bits=8) //Configuracion para el RS232
#byte porta=0x00C
void main(void)
{
setup_adc(ADC_OFF); //Apagamos convertidor AD
setup_adc_ports(NO_ANALOGS); //Desactivamos el convertidor analogico-digital
setup_comparator(NC_NC_NC_NC); //Desactivamos comparadores de manera general
setup_ccp1(CCP_OFF); //Desactivamos el comprador 1
setup_ccp2(CCP_OFF); //Desactivamos el comprador 2
setup_ccp3(CCP_OFF); //Desactivamos el comprador 3
//Configuramos los pines de los puertos atraves de los registros TRIS
set_tris_a(0b00000000);
while(true) //Iniciamos ciclo infinito
{
if(kbhit())
{
bit_set(PORTA,5);
}
}
}
//Libreria principal
#include<htc.h>
//Prototipos de funciones
void configuracion_rs232(void);
//Variables
unsigned char errores=0x00;
unsigned char dato_recibido=0x00;
unsigned char recibido=0;
void main(void)
{
configuracion_rs232();
while(1)
{
if(recibido==1)
{
//Leemos el bit de error FERR
if(FERR==1)
RA5=1;
else
RA5=0;
dato_recibido=RCREG;
if(dato_recibido!=0x00)
RA4=1;
}
recibido=0;
}
}
void configuracion_rs232(void)
{
//Configuramos tris
TRISA4=0; //para un led indicador
TRISA5=0; //Para un led indicador
TRISC7=1; //Recepcion RS232
TRISC6=0; //Transmision RS232
//Configuramos el baud rate
SPBRG=520;
BRGH=1;
BRG16=1;
//Habilitamos el puerto serie y el modo asincrono
SPEN=1;
SYNC=0;
//Habilitamos la interrupcion
RCIE=1;
PEIE=1;
GIE=1;
//Habilitamos la recepcion
RCIE=1;
}
void interrupt recepcion(void)
{
if(RCIF==1)
{
recibido=1;
}
RCIF=0;
}
ok despues de mucho batallar mejor rediseñe y recontrui el pcb,mañana hare pruebas,gracias por la ayuda y aqui publicare los resultados
que hare??? a seguir buscando la solucion.... :?
buena idea fantaxmax...lo hare...no seria lo mismo si pusiera un programa en la PC que me capture todo lo que salga y entre del COM1 en el momento de conectar el lector???
pues ni hablar,llevo 3 dias trabajando en esto y nada,una ultima pregunta,saben que voltaje minimo debe haber en MCLR para que opere el microcontrolador???
#include<16f628a.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT,MCLR
#use rs232(BAUD=9600,XMIT=PIN_B2,RCV=PIN_B1,BITS=8,STOP=1,PARITY=N)
char recibio=0;
#INT_RDA
void recepcion(void)
{
recibio=1;
output_low(PIN_B3);
}
void config_interrupcion(void)
{
clear_interrupt(INT_RDA);
enable_interrupts(INT_RDA);
enable_interrupts(PERIPH);
enable_interrupts(GLOBAL);
}
void main(void)
{
config_interrupcion();
while(TRUE)
{
if(recibio==1)
{
output_low(PIN_B4);
}
}
}#include<16f628a.h>
#use delay(clock=20000000)
#fuses MCLR,HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP,NOCPD
#use rs232(BAUD=9600,XMIT=PIN_B2,RCV=PIN_B1,BITS=8,STOP=1,PARITY=N)
char c;
void config_interrupcion(void)
{
clear_interrupt(INT_EXT);
enable_interrupts(INT_EXT);
enable_interrupts(PERIPH);
enable_interrupts(GLOBAL);
}
void main(void)
{
//config_interrupcion();
printf("start");
while(TRUE)
{
if(kbhit())
{
c=getc();
if(c=='c')
{
output_toggle(PIN_B3);
}
}
}
}#include<16f628a.h>
#use delay(clock=20000000)
#fuses MCLR,HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP,NOCPD
#use rs232(BAUD=9600,XMIT=PIN_B2,RCV=PIN_B1,BITS=8,STOP=1,PARITY=N)
char c[1]={'0'};
char clave[1]={'8'};
char count=0;
void main(void)
{
output_low(PIN_B5);
while(TRUE)
{
if(kbhit())
{
c[0]=getc();
}
if(c[0]==clave[0])
count++;
if(count==1)
{
output_toggle(PIN_B5);
count=0;
c[0]='0';
}
}
}#include <16f887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=10000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#define LED_AZUL PIN_B0
#define LED_VERDE PIN_B1
#define LED_ROJO PIN_B2
#define LED_AMARILLO PIN_B3
#define ENTRADA1 PIN_B4
#define ENTRADA2 PIN_B5
#define ENTRADA3 PIN_B6
#define ENTRADA4 PIN_B7
int opcion;
void mostrar_menu(){
puts("\fComando Control\r");
puts(" 0 Estado ENTRADAS");
puts(" 1 Control LED-AZUL");
puts(" 2 Control LED-VERDE");
puts(" 3 Control LED-ROJO");
puts(" 4 Control LED-AMARILLO");
puts(" Espacio Menu");
}
void funcion_led_azul(){
output_toggle(LED_AZUL);
if (input_state(LED_AZUL))
puts("\fLed azul encendido");
else
puts("\fLed azul apagado");
}
void funcion_led_verde(){
output_toggle(LED_VERDE);
if (input_state(LED_VERDE))
puts("\fLed verde encendido");
else
puts("\fLed verde apagado");
}
void funcion_led_rojo(){
output_toggle(LED_ROJO);
if (input_state(LED_ROJO))
puts("\fLed rojo encendido");
else
puts("\fLed rojo apagado");
}
void funcion_led_amarillo(){
output_toggle(LED_AMARILLO);
if (input_state(LED_AMARILLO))
puts("\fLed amarillo encendido");
else
puts("\fLed amarillo apagado");
}
void funcion_lectura_entradas(){
printf("\fEstado de la entrada 1 = %u", input(ENTRADA1));
printf("\rEstado de la entrada 2 = %u", input(ENTRADA2));
printf("\rEstado de la entrada 3 = %u", input(ENTRADA3));
printf("\rEstado de la entrada 4 = %u\r", input(ENTRADA4));
}
void main() {
output_low(LED_AZUL),(LED_VERDE),(LED_ROJO),(LED_AMARILLO);
puts("\fConexion establecida");
puts("Pulsa barra espaciadora para abrir menu");
for(;;){
opcion = getc();
switch(opcion){
case ' ': mostrar_menu();
break;
case '0': funcion_lectura_entradas();
break;
case '1': funcion_led_azul();
break;
case '2': funcion_led_verde();
break;
case '3': funcion_led_rojo();
break;
case '4': funcion_led_amarillo();
break;
}
}
}(http://www.radikaldesig.com/blog/rs232ttl/esquema.jpg)Tal y como lo menciona migsantiago, primero verifica si tu puerto serial trabaja si problemas, esto lo haces realizando un "corto fisico" entre los pines 2 y 3 del puerto serial (Tx y Rx del db9) es decir haces un loopback. Si todo sale bien debes hacer luego un loopback en le max232 y si todo está bien definitivamente es u problema de l micro que está dañado o del programa del micro.hice lo del puerto y el cable esta bueno...recibi lo que mande...y con el max232 no me recibio nada...asi que creo que cambiare el max232 por uno nuevo porque se me daño este :( y lo feo es que aqui en honduras no se consigue mucho cosas de electronica :S...muchas gracias thegame