- /***************************************************
- **
- ** MCU:PIC18f8772
- ** 功能:串口接收
- ** 说明:中断方式
- ** 时间:2012-5-29 Lzy
- **
- *****************************************************/
- #include
-
- /*
- 串口初始化
- 设置异步接收操作的步骤如下:
- 1. 初始化SPBRGHx:SPBRGx寄存器,设置合适的
- 波特率。按需要将BRGH 和BRG16 位置1 或清
- 零,以获得目标波特率。
- 2. 通过将SYNC 位清零并将SPEN 位置1 使能异步串口。
- 3. 如果需要中断,将允许位RCxIE 置1。
- 4. 若需要接收9 位数据,将RX9 位置1。
- 5. 通过将CREN 位置1,使能接收。
- 6. 当接收完成时标志位RCxIF 将被置1,此时如果
- 允许位RCxIE 已置1,还会产生一个中断。
- 7. 读RCSTAx 寄存器以获取第9 位数据(如果已
- 使能),并判断是否在接收过程中发生了错误。
- 8. 通过读RCREGx 寄存器来读取接收到的8 位数据。
- 9. 如果发生错误,通过将使能位CREN 清零来清除错误。
- 10. 若想使用中断,请确保将INTCON 寄存器中
- GIE 和PEIE 位(INTCON<7:6>)置1。
- */
- void UartInit(void)
- {
- RCSTA1bits.SPEN = 1; // 串口使能
-
- TRISCbits.TRISC7 = 1; // 异步串行接收数据输入
- TRISCbits.TRISC6 = 0;// 异步和同步主模式,TRISC<6> 零(= 0)
-
- // TXSTA1:发送状态和控制寄存器
- TXSTA1bits.SYNC = 0; // 异步模式
- TXSTA1bits.TX9 = 0; // 选择8 位发送
- TXSTA1bits.TXEN = 1; // 禁止发送
- TXSTA1bits.BRGH = 1; // 高速
- TXSTA1bits.TXEN = 1; // 使能发送
-
- // RCSTA1:接收状态和控制寄存器
- RCSTA1bits.RX9 = 0; // 选择8 位接收
- RCSTA1bits.CREN = 1; // 使能接收器
-
- // BAUDCON1:波特率控制寄存器
- BAUDCON1bits.BRG16 = 0; // 8位波特率发生器——SPBRGHx 和SPBRGx
- SPBRG1 = 25;
-
- // 外设中断允许寄存器1
- PIE1bits.RC1IE = 1; // 允许EUSART 接收中断
-
- INTCONbits.GIE = INTCONbits.PEIE = 1; // 中断控制寄存器
- TRISF = 0;
- }
-
- void InterruptHandlerHigh(void);
- //高优先级中断向量
- #pragma code InterruptVectorHigh=0x08
-
- void InterruptVectorHigh (void)
- {
- _asm
- goto InterruptHandlerHigh //跳到中断程
- _endasm
- }
-
- //高优先级中断服务程序
- #pragma code
- #pragma interrupt InterruptHandlerHigh
-
- void InterruptHandlerHigh ()
- {
- if(PIR1bits.RC1IF) // 已接收数据
- {
- PIR1bits.RC1IF = 0;
- PORTF = RCREG1; // 读取接收到的数据
- }
- }
-
- void main()
- {
- UartInit();
- while(1);
-
- }
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』