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.
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(); } }





Bookmarks