新聞中心

PIC18f 串口中斷

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
  1. /***************************************************
  2. **
  3. ** MCU:PIC18f8772
  4. ** 功能:串口接收
  5. ** 說明:中斷方式
  6. ** 時(shí)間:2012-5-29 Lzy
  7. **
  8. *****************************************************/
  9. #include
  10. /*
  11. 串口初始化
  12. 設(shè)置異步接收操作的步驟如下:
  13. 1. 初始化SPBRGHx:SPBRGx寄存器,設(shè)置合適的
  14. 波特率。按需要將BRGH 和BRG16 位置1 或清
  15. 零,以獲得目標(biāo)波特率。
  16. 2. 通過將SYNC 位清零并將SPEN 位置1 使能異步串口。
  17. 3. 如果需要中斷,將允許位RCxIE 置1。
  18. 4. 若需要接收9 位數(shù)據(jù),將RX9 位置1。
  19. 5. 通過將CREN 位置1,使能接收。
  20. 6. 當(dāng)接收完成時(shí)標(biāo)志位RCxIF 將被置1,此時(shí)如果
  21. 允許位RCxIE 已置1,還會產(chǎn)生一個(gè)中斷。
  22. 7. 讀RCSTAx 寄存器以獲取第9 位數(shù)據(jù)(如果已
  23. 使能),并判斷是否在接收過程中發(fā)生了錯誤。
  24. 8. 通過讀RCREGx 寄存器來讀取接收到的8 位數(shù)據(jù)。
  25. 9. 如果發(fā)生錯誤,通過將使能位CREN 清零來清除錯誤。
  26. 10. 若想使用中斷,請確保將INTCON 寄存器中
  27. GIE 和PEIE 位(INTCON<7:6>)置1。
  28. */
  29. voidUartInit(void)
  30. {
  31. RCSTA1bits.SPEN=1;// 串口使能
  32. TRISCbits.TRISC7=1;// 異步串行接收數(shù)據(jù)輸入
  33. TRISCbits.TRISC6=0;// 異步和同步主模式,TRISC<6> 零(= 0)
  34. // TXSTA1:發(fā)送狀態(tài)和控制寄存器
  35. TXSTA1bits.SYNC=0;// 異步模式
  36. TXSTA1bits.TX9=0;// 選擇8 位發(fā)送
  37. TXSTA1bits.TXEN=1;// 禁止發(fā)送
  38. TXSTA1bits.BRGH=1;// 高速
  39. TXSTA1bits.TXEN=1;// 使能發(fā)送
  40. // RCSTA1:接收狀態(tài)和控制寄存器
  41. RCSTA1bits.RX9=0;// 選擇8 位接收
  42. RCSTA1bits.CREN=1;// 使能接收器
  43. // BAUDCON1:波特率控制寄存器
  44. BAUDCON1bits.BRG16=0;// 8位波特率發(fā)生器——SPBRGHx 和SPBRGx
  45. SPBRG1=25;
  46. // 外設(shè)中斷允許寄存器1
  47. PIE1bits.RC1IE=1;// 允許EUSART 接收中斷
  48. INTCONbits.GIE=INTCONbits.PEIE=1;// 中斷控制寄存器
  49. TRISF=0;
  50. }
  51. voidInterruptHandlerHigh(void);
  52. //高優(yōu)先級中斷向量
  53. #pragma code InterruptVectorHigh=0x08
  54. voidInterruptVectorHigh(void)
  55. {
  56. _asm
  57. gotoInterruptHandlerHigh //跳到中斷程
  58. _endasm
  59. }
  60. //高優(yōu)先級中斷服務(wù)程序
  61. #pragma code
  62. #pragmainterruptInterruptHandlerHigh
  63. voidInterruptHandlerHigh()
  64. {
  65. if(PIR1bits.RC1IF)// 已接收數(shù)據(jù)
  66. {
  67. PIR1bits.RC1IF=0;
  68. PORTF=RCREG1;// 讀取接收到的數(shù)據(jù)
  69. }
  70. }
  71. voidmain()
  72. {
  73. UartInit();
  74. while(1);
  75. }


關(guān)鍵詞: PIC18f串口中

評論


技術(shù)專區(qū)

關(guān)閉