Hola , estoy haciendo el PFC y estoy utilizando un micro con dos EUSART , concretamente el PIC18F25K22 , el compilador que uso es CCS, he conseguido transmitir y recibir mediante interrupción en ambas EUSART por separado , pero cuando lo intento hacer con la directivas #use rs232 en el mismo programa la EUSART2 me envía caracteres extraños y la EUSART1 ninguno. Envío “ + “ y me tendría que responder “ OK “ , pero me responde :
Según el data sheet ( pag 27-45 y pag 357 ) los registros de control del oscilador son :
OSCON OSCON 2 y OSCTUNE
Yo los he configurado así :
IDLEN IRCF OSTS HFIOFS SCS
OSCON --> 0 1 0 1 1 0 0 0
PLLRDY SOSCRUN --- MFIOSEL SOSCG PRISD MFIGFS LFIOFS
OSCON2 --> 0 0 0 0 0 1 0 0
INTSRC PLLEN
OSCTUNE --> 0 0 0 0 0 0 0 0
Intuyo que debe tener que ver con la velocidad del oscilador , pero no lo sé . No sé qué hago mal . Algo hay que se me escapa .
Muchas gracias de antemano por la ayuda .
Este es el código:
Según el data sheet ( pag 27-45 y pag 357 ) los registros de control del oscilador son :
OSCON OSCON 2 y OSCTUNE
Yo los he configurado así :
IDLEN IRCF OSTS HFIOFS SCS
OSCON --> 0 1 0 1 1 0 0 0
PLLRDY SOSCRUN --- MFIOSEL SOSCG PRISD MFIGFS LFIOFS
OSCON2 --> 0 0 0 0 0 1 0 0
INTSRC PLLEN
OSCTUNE --> 0 0 0 0 0 0 0 0
Intuyo que debe tener que ver con la velocidad del oscilador , pero no lo sé . No sé qué hago mal . Algo hay que se me escapa .
Muchas gracias de antemano por la ayuda .
Este es el código:
Código:
#include <18F25K22.h>
#FUSES XT,NOWDT
#use delay(clock=40000)
#use rs232(baud=9600, xmit=pin_b6, rcv=pin_b7, bits=8, parity=N,stream=USART2,ERRORS)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N,stream=USART1,ERRORS)
#use standard_io(c)
char ch,B,C;
#BYTE TRISB= 0x0F93
#BYTE ANSELB= 0x0F39
#bit TRISB7 = 0x0F93.7
#bit TRISB6 = 0x0F93.6
#bit ANSELB7 = 0x0F39.7
#bit ANSELB6 = 0x0F39.6
#BYTE OSCON = 0x0FD3
#BYTE OSCON2 = 0x0FD2
#BYTE OSCTUNE = 0x0F9B
#int_rda2
void serial_isr()
{
ch=getchar();
if( ch == '+')
B=ch;
}
void main()
{
enable_interrupts(global);
enable_interrupts(int_rda2);
// Configuro el Puerto como digital ya que viene de fábrica como analógico
ANSELB7 = 0;
ANSELB6 = 0;
TRISB7 =1; // RB7 (RX) como entrada
TRISB6= 0; // RB6 ( TX ) como salida
// El pic viene configurado por defecto con un reloj interno de 1 Mhz
// Configuro el oscilador
OSCON = 0b01011000;
OSCON2 = 0b00000100;
OSCTUNE= 0b00000000;
while(1)
{
if( B == '+')
{
printf( USART2,"\ OK \r");
B=0;
}
}
}
Última edición por un moderador: