单片机 > 单片机程序设计 > 详情

Pic16f1828 1829串口收发

发布时间:2023-08-10 发布时间:
|

#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){}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STC89C52RC单片机的NRF24L01无线通信程序.收发一体