Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <xc.h>
- #include <stdint.h>
- #include <stdbool.h>
- #define _XTAL_FREQ 48000000UL
- #define RS485_READ 1
- #define RS485_WRITE 0
- #define IOF_8MHz 0b111
- #pragma config XINST = OFF
- void clockInit(void);
- uint8_t high8(uint16_t x);
- uint8_t low8(uint16_t x);
- void main(void) {
- clockInit();
- // disables analog-to-digital conversion
- // (enables digital IO on all AD pins)
- ANCON0 = 0x1F;
- ANCON1 = 0x1F;
- // enables rs485 write (output)
- TRISAbits.TRISA2 = 0;
- TXSTA1bits.SYNC = 0;
- TXSTA1bits.BRGH = 1; // set BRGH bit
- TXSTA1bits.TXEN = 1; // enable TX
- RCSTA1bits.SPEN = 1;
- RCSTA1bits.CREN = 1;
- TRISCbits.TRISC6 = 0;
- TRISCbits.TRISC7 = 1; // Rx1 set input
- BAUDCON1bits.BRG16 = 1; // set 16 bits SPBRG
- BAUDCON1bits.RCIDL = 1; // set receive active
- SPBRGH1 = high8(104); // set UART speed SPBRGH
- SPBRG1 = low8(104); // set UART speed SPBRGL
- CM1CONbits.CON = 0; // disables comparator
- /* Loop forever */
- while (1) {
- LATAbits.LATA2 = RS485_WRITE;
- TXREG1 = 0x55; // yes, send char
- while (!TXSTA1bits.TRMT); // Ready ?
- LATAbits.LATA2 = RS485_READ;
- __delay_us(100);
- }
- }
- /*----------------------------------------------------------------------------*/
- void clockInit(void) {
- // disables reference oscillator output
- REFOCONbits.ROON = 0;
- // device enters IDLE mode on SLEEP instruction
- OSCCONbits.IDLEN = 1;
- // system clock is from primary oscillator
- OSCCONbits.SCS = 0;
- // selects base frequency as 8MHz
- OSCCONbits.IRCF = IOF_8MHz;
- // wait until oscillator is running
- while (!OSCCONbits.OSTS);
- // low speed USB (6MHz clock)
- UCFGbits.FSEN = 0;
- // enable PLL
- OSCTUNEbits.PLLEN = 1;
- }
- uint8_t high8(uint16_t x) {
- return (uint8_t) (x >> 8);
- }
- uint8_t low8(uint16_t x) {
- return (uint8_t) (x & 0xFF);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement