Pic16f1828 1829串列埠收發
#include<PIC.h>
// 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){}
}