Que tal estoy haciendo un proyecto de comunicacion serie RS-232 entre 2 pics 18f4550 pero resulta que no funciona supongo que es una parte del programa, ya que este mismo proyecto lo hice con pics 16f877a y al simularlo en proteus funcionó correctamente, yahe intentado varios cambios al prgrama y no funciona, quisiera ver si me podrian ayudar a verificar que los programas del pic transmisor y del receptor sean correctos,gracias.
Programa del trasnmisor:
Programa del receptor:
Programa del trasnmisor:
Código:
//Programa para el transmisor
#include <18F4550.h>
#include <stdio.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#USE STANDARD_IO(A)
#USE STANDARD_IO(b)
#USE STANDARD_IO(C)
char a=0xd;
int8 c=0;
#int_TIMER1
void TIMER1_isr(void)
{
c++;
if(c==3){
output_toggle(pin_a1);
c=0;}
set_timer1(0);
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
While(1){
//RB0,RB1,RB2,RB3 Y RB4 botones
if(input(pin_b0)==1){ //BOTON1
putc('E'); //Enciende Pin B1 en el Receptor
putc('P');
putc('B');
putc('1');
putc(a);}
if(input(pin_b1)==1){ //BOTON2
putc('E'); //Enciende Pin B2 en el Receptor
putc('P');
putc('B');
putc('2');
putc(a);}
if(input(pin_b2)==1){ //BOTON3
putc('E'); //Enciende Pin B3 en el Receptor
putc('P');
putc('B');
putc('3');
putc(a);}
if(input(pin_b3)==1){ //BOTON4
putc('E'); //Enciende Pin B4 en el Receptor
putc('P');
putc('B');
putc('4');
putc(a);}
if(input(pin_b4)==1){ //BOTON5
putc('E'); //Enciende Pin B1 en el Receptor
putc('P');
putc('B');
putc('5');
putc(a);}
}
}
Programa del receptor:
Código:
//Programa Receptor
#include <18F4550.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#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=20000000) //---------------------------------------------
#use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,bits=8)
#include <stdio.h>
#USE STANDARD_IO(A)
#USE STANDARD_IO(B)
#USE STANDARD_IO(C)
#USE STANDARD_IO(E)
int1 llave[5]={0,0,0,0,0};
int16 cont[5]={0,0,0,0,0};
const int16 ciclo=800;
char cant[5];
//signed int16 pwm1=511,pwm2=1023;
void main()
{
//setup_adc_ports(NO_ANALOGS|VSS_VDD);
//setup_adc(ADC_OFF);
//setup_spi(SPI_SS_DISABLED);
//setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,249,1);
//setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
// setup_ccp1(CCP_PWM);
//setup_ccp2(CCP_PWM);
//set_pwm1_duty(pwm1);
// set_pwm2_duty(pwm2);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!;
while(1){
if(kbhit()){
gets(cant);
}
else {
cant[0]='0';
cant[1]='0';
cant[2]='0';
cant[3]='0';
cant[4]='0';}
if(cant[0]=='E'&&cant[1]=='P'&&cant[2]=='B'&& cant[3]=='1'){
output_high(pin_b1); //Activa B1
llave[0]=1;
cont[0]=0;}
if(cant[0]=='E'&&cant[1]=='P'&&cant[2]=='B'&& cant[3]=='2'){
output_high(pin_b2); //Activa RB2
llave[1]=1;
cont[1]=0;}
if(cant[0]=='E'&&cant[1]=='P'&&cant[2]=='B'&& cant[3]=='3'){
output_high(pin_b3); //Activa RB3
llave[2]=1;
cont[2]=0;}
if(cant[0]=='E'&&cant[1]=='P'&&cant[2]=='B'&& cant[3]=='4'){
output_high(pin_b4); //Activa RB4
llave[3]=1;
cont[3]=0;}
if(cant[0]=='E'&&cant[1]=='P'&&cant[2]=='B'&& cant[3]=='5'){
output_high(pin_b5); //Activa RB5
llave[4]=1;
cont[4]=0;}
if(llave[0]==1){
cont[0]=cont[0]+1;
if(cont[0]==ciclo){
output_low(pin_B1);
llave[0]=0;} }
if(llave[1]==1){
cont[1]=cont[1]+1;
if(cont[1]==ciclo){
output_low(pin_b2);
llave[1]=0;} }
if(llave[2]==1){
cont[2]=cont[2]+1;
if(cont[2]==ciclo){
output_low(pin_b3);
llave[2]=0;} }
if(llave[3]==1){
cont[3]=cont[3]+1;
if(cont[3]==ciclo){
output_low(pin_b4);
llave[3]=0;} }
if(llave[4]==1){
cont[4]=cont[4]+1;
if(cont[4]==ciclo){
output_low(pin_b5);
llave[4]=0;} }
}
}
Última edición: