Pic16f1828 1829串口收发

2019-04-15 12:22发布

#include  // PIC16f1828 / PIC16f1828      8M   unsigned char error=0x00;  bit Q=0;  unsigned data; void interrupt isr(void) // 中断函数 {     unsigned char Temp;     if(RCIF&&RCIE)     {         Q = 1;         while(FERR)      {error=RCREG; Q=0;};            while(OERR)      { CREN=0 ;  CREN=1 ; error=RCREG; Q=0;}                  TXREG = RCREG;  //收到的数据立马进行回显     } } void Uart_init() //UART初始 {    // SCS FOSC; SPLLEN disabled; IRCF 8MHz_HF;      OSCCON = 0x70;     // LFIOFR disabled; HFIOFL not2percent_acc; OSTS intosc; PLLR disabled; HFIOFS not0.5percent_acc; HFIOFR disabled; MFIOFR disabled; T1OSCR disabled;      OSCSTAT = 0x00;     // TUN 0x0;      OSCTUNE = 0x00;     // Set the secondary oscillator      #ifndef USE_DEAFULT_TX     APFCON0bits.TXCKSEL = 1; //TX引脚使用1 = RC4  ------- 第二功能管脚     TRISCbits .TRISC4 =  0; #else     APFCON0bits.TXCKSEL = 0; //TX引脚使用1 = RB7  --------原来的LED-FULL     TRISBbits .TRISB7 =  0;     #endif      #ifdef USE_DEAFULT_RX         APFCON0bits.RXDTSEL = 0; //RX引脚使用0 = RB5          TRISBbits .TRISB5 =  1;     ANSELBbits.ANSB5 = 0;  ;  //关闭RB5的模拟输入功能 #else     APFCON0bits.RXDTSEL = 1;   //RX引脚使用0 = RC5       第二功能管脚     TRISCbits .TRISC5 =  1;     //ANSELCbits.ANSC5 = 0;  ;  //关闭RB5的模拟输入功能 #endif                     //8mhz晶体  波特率设置, datasheet里面有线程的参数表格     SPBRG=51;//?9600,8M??     BRGH=1; //          SYNC=0;     SPEN=1; //串口使能     TXEN=1; //USART 发送使能     TXIE=0; //关发送中断     RCIE=1; //开接收中断     CREN=1; //接收允许     PEIE = 1; //开外围设备中断     GIE = 1; }   void main()  { Uart_init();     while(1){} }