#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){}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』