PIC18f 串口中断
时间:11-11
来源:互联网
点击:
- /***************************************************
- **
- ** 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。
- */
- voidUartInit(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;
- }
- voidInterruptHandlerHigh(void);
- //高优先级中断向量
- #pragma code InterruptVectorHigh=0x08
- voidInterruptVectorHigh(void)
- {
- _asm
- gotoInterruptHandlerHigh //跳到中断程
- _endasm
- }
- //高优先级中断服务程序
- #pragma code
- #pragmainterruptInterruptHandlerHigh
- voidInterruptHandlerHigh()
- {
- if(PIR1bits.RC1IF)// 已接收数据
- {
- PIR1bits.RC1IF=0;
- PORTF=RCREG1;// 读取接收到的数据
- }
- }
- voidmain()
- {
- UartInit();
- while(1);
- }
PIC18f串口中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)