#include <p18cxxx.h>
void Uart_Init(void)
{
// 串口初始化
RCSTAbits.SPEN = 1; // 使能串口
// 配置 TRISC
TRISCbits.TRISC6 = 0; // TX 设为输出
TRISCbits.TRISC7 = 1; // RX 设为输入 !!修正!!
// TXSTA:发送状态和控制寄存器
TXSTAbits.SYNC = 0; // 异步模式
TXSTAbits.TX9 = 0; // 8 位发送
TXSTAbits.BRGH = 1; // 高速
TXSTAbits.TXEN = 1; // 使能发送 !!修正!!
// RCSTA:接收状态和控制寄存器
RCSTAbits.RX9 = 0; // 8 位接收
RCSTAbits.CREN = 1; // 使能连续接收
// 波特率设定(Fosc = 4MHz,目标波特率 = 9600)
SPBRG = 25; // 对应 9600bps
// 清除接收中断标志位
PIR1bits.RCIF = 0;
// 使能中断
INTCONbits.GIE = 1; // 总中断
INTCONbits.PEIE = 1; // 允许外设中断
PIE1bits.RCIE = 1; // 允许 EUSART 接收中断
}
// 高优先级中断向量
void InterruptHandlerHigh(void);
#pragma code InterruptVectorHigh=0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh // 跳到中断程序
_endasm
}
#pragma code
#pragma interrupt InterruptHandlerHigh
// 串口接收中断函数
void InterruptHandlerHigh()
{
if (PIR1bits.RCIF) // 串口接收中断
{
char receivedData = RCREG; // 读取数据,同时清除 RCIF 标志
PORTCbits.RC0 = ~PORTCbits.RC0; // 翻转小灯状态(调试用)
}
}
|