Final

 avatar
unknown
plain_text
2 years ago
3.2 kB
7
Indexable
#include <xc.h>
    //setting TX/RX

char mystring[20];
int lenStr = 0;
extern int mode;

void UART_Initialize() {
           
//          TODObasic   
//           Serial Setting      
//        1.   Setting Baud rate
//        2.   choose sync/async mode 
//        3.   enable Serial port (configures RX/DT and TX/CK pins as serial port pins)
//        3.5  enable Tx, Rx Interrupt(optional)
//        4.   Enable Tx & RX
           
    TRISCbits.TRISC6 = 1;            
    TRISCbits.TRISC7 = 1;
    //  Setting baud rate
    TXSTAbits.SYNC = 0;           
    BAUDCONbits.BRG16 = 0;          
    TXSTAbits.BRGH = 0;
    SPBRG = 51;      
   //   Serial enable
    RCSTAbits.SPEN = 1;              
    PIR1bits.TXIF = 1;
    PIR1bits.RCIF = 0;
    TXSTAbits.TXEN = 1;           
    RCSTAbits.CREN = 1;             
//    PIE1bits.TXIE = 1;       
//    IPR1bits.TXIP = ;             
    PIE1bits.RCIE = 1;              
    IPR1bits.RCIP = 1;    
    }

void UART_Write(unsigned char data)  // Output on Terminal
{
    while(!TXSTAbits.TRMT);
    TXREG = data;              //write to TXREG will send data 
}


void UART_Write_Text(char* text) { // Output on Terminal, limit:10 chars
    for(int i=0;text[i]!='\0';i++)
        UART_Write(text[i]);
}

void ClearBuffer(){
    for(int i = 0; i < 10 ; i++)
        mystring[i] = '\0';
    lenStr = 0;
}
void print_mode(unsigned char c) {
    char message[] = "Enter your choice:";
    char high[] = "High mode";
    char medium[] = "Medium mode";
    char low[] = "Low mode";
    int i = 0;
    if(c == 'a'){
        while (high[i] != '\0') {
        UART_Write(high[i]);
        i++;
        }
    }
    else if(c == 'b'){
        while (medium[i] != '\0') {
        UART_Write(medium[i]);
        i++;
        }
    }
    else if(c == 'c'){
        while (low[i] != '\0') {
        UART_Write(low[i]);
        i++;
        }
    }
    i = 0;
    UART_Write('\n');
    UART_Write('\r');
    while (message[i] != '\0') {
        UART_Write(message[i]);
        i++;
    }
}


unsigned char record = '\0';
void MyusartRead()
{
//    while(!PIR1bits.RCIF);
    if(RCREG == 'a')
        record = 'a';
    else if(RCREG == 'b')
        record = 'b';
    else if(RCREG == 'c')
        record = 'c';
    if(RCREG == '\r'){
        UART_Write('\n');
        UART_Write('\r');
        if(record == 'a'){
            mode = 2;
            print_mode('a');
        }
        else if(record == 'b'){
            mode = 1;
            print_mode('b');
        }
        else if(record == 'c'){
            mode = 0;
            print_mode('c');
        }
        else
            record = '\0';
    }
    else 
        UART_Write(RCREG);
    return ;
}

char *GetString(){
    return mystring;
}

void __interrupt(high_priority) Hi_ISR(void)
{
    if(RCIF)
    {
        if(RCSTAbits.OERR)
        {
            CREN = 0;
            Nop();
            CREN = 1;
            
        }
        
        MyusartRead();
    }
   // process other interrupt sources here, if required
    return;
}
Editor is loading...
Leave a Comment