Mucho gusto, mi última consulta fue en Septiembre del 2017.
Quedo muy agradecido por todo el apoyo recibido.
Hasta hace un mes me funciono perfecto el código que indico a continuación. logre enviar 0001 al 2551 y 0002 al 2552 sin problemas por el puerto serie en diferentes equipos, empleo MAX232 y igual envié datos Wifi con el modulo ESP8266. Todo funciono sin novedad.
En este momento envió datos y el PIC no responde, he cambiado de PIC y MAX232 y no funciona, no recibe datos, igual tengo una aplicación que envía datos TxD a un computador y funciona, pero cuando empleo la aplicación para que reciba Byte.
En simulador PROTEUS funciona de todas las formas. Pero no se que error estoy cometiendo en la programación del PIC18F4550
Para alimentar el circuito, empleo una fuente de 20 de un portátil y un regulador de voltaje LM7805
Código:
#include "D:\Rcrss_Acdmcos\MAESTRIA_INF_IND\SEAS\13_T_INFINDU\003_DTesis\003_lzonas\z_activar_iluminacion\main.h"
#fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,PUT
//#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL5,CPUDIV1,VREGEN,PUT,MCLR
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,parity=N,bits=8)
// xmit=pin_c6 RC6 TxD; rcv=pin_c7 RC7 RxD
#include <string.h>
#include <stdlib.h>
#define usart.h
#BYTE PORTA = 0XF80
#BYTE PORTB = 0XF81
#BYTE PORTC = 0XF82
#BYTE PORTD = 0XF83
#BYTE TRISB = 0XF93
#BYTE TRISC = 0XF94
#BYTE TRISD = 0XF95
#Bit RC5 = PORTC.5
char cdna[4]; //Almacena Cuatro Bytes 0011
int indice=0;
int num;
int1 datolisto;
#int_rda
void rda_isr(void)
{
cdna[indice]=getch() - 0x30;
if(cdna[indice] <= 9)
{
// Solo aumento si lo que llego es un dato valido
indice++;
}
if(indice == 4 )
{
indice = 0;
datolisto = true;
}
}
void main()
{
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// port_b_pullups(FAlSE);
PORTB=0X00;
TRISB=0B00000000;
PORTC=0X00;
TRISC=0B10000000;
PORTD=0X00;
TRISD=0B00000000;
enable_interrupts(int_rda);
enable_interrupts(global);
while(TRUE)
{ //PORTB=cdna;
//delay_ms(200);
if ( datolisto == true )
{ datolisto = false;
RC5=1;
if ( cdna[0] == 0 )
{
if ( cdna[1] == 0 ){ num = cdna[2]; }
if ( cdna[1] > 0 ) { num = cdna[1] * 10 + cdna[2]; }
}
if ( cdna[0] > 0 ){num = cdna[0] * 100 + cdna[1] * 10 + cdna[2];}
if ( cdna[0] == 0 )
{
if ( cdna[1] == 0 )
{
if ( cdna[2] == 0 )
{num = cdna[0] + cdna[1] + cdna[2];}
}
}
//0011 El ultimo digito define el puerto
//Seleccona el puerto 1: PortB 2:PortD e imprime un valor de 0 a 255
if ( cdna[3] == 1 ){ PORTB=num; cdna[0]="";cdna[1]="";cdna[2]="";cdna[3]="";}
if ( cdna[3] == 2 ){ PORTD=num; cdna[0]="";cdna[1]="";cdna[2]="";cdna[3]="";}
}
}
}