gwntd
Newbie level 5
Hi, I'm new to programming with the pic, so I've been having some trouble setting up a serial communication, EUSART1, from my pic to my computer. I am using the pic18f27j13 with a max232 to try and send signals at a baudrate of 115200 to the computer. I'm using realterm to read the signals. But, non-correct Hex values are being read. My attempt is to set the Fosc to be 48Mhz from the internal clock and a baudrate of 115200. Can anyone kindly help me by looking at my code and pointing out any mistakes that I may have made. Thank you.
Some funky things that I have noticed with realterm. Is that if I send 0x88 it comes out as 0xFA // 1000 1000 -> and get 1111 1010.
0x00 -> gets 0xF0
0xFF -> gets 0xFF
0x1F -> gets 0xF3
I really don't see any pattern.
Some funky things that I have noticed with realterm. Is that if I send 0x88 it comes out as 0xFA // 1000 1000 -> and get 1111 1010.
0x00 -> gets 0xF0
0xFF -> gets 0xFF
0x1F -> gets 0xF3
I really don't see any pattern.
Code:
#include <p18f27j13.h>
#include <stdio.h>
#pragma config WDTEN = OFF // Sets watchdog OFF
#pragma config PLLDIV = 2 // Sets divider to 2. Provides output 4Mhz for 96Mhz PLL
#pragma config OSC = INTOSCPLL // Sets OSC as INTOSC(8Mhz) Postscalled with a PLL
#pragma config CFGPLLEN = ON //enables PLL on startup
#pragma config PLLSEL = PLL96 // selects 96Mhz
#pragma config XINST = OFF
// setup functions
void delay();
void Wait_Buffer1();
void setupUSART();
//
void delay ()
{
unsigned long int count = 0;
for (count = 0; count < 0x0003FFFF; count ++)
{
}
}
void Wait_Buffer1(void)
{
while (!TXSTA1bits.TRMT)
{}
}
void setupUSART()
{
OSCCONbits.SCS = 0x00; // Selects Primary clock(FOSC) as the clock source
stdout = _H_USART;
TXSTA = 0b00100000; //Enable transmit and low baud rate
RCSTA = 0b10010000; //Enable serial port
BAUDCON = 0b00001000; //Enable 16 bit baud generator
SPBRGH = 0;
SPBRG = 25;
//target baudrate 115200,
}
void main ()
{
unsigned int loop_count = 0;
TRISCbits.TRISC7 = 1;
TRISCbits.TRISC6 = 0;
setupUSART();
while (1)
{
delay();
TXREG1 = 0x1F;
delay();
}
}