- #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; // 翻转小灯状态(调试用)
- }
- }
|