色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC18f 串口中斷

          PIC18f 串口中斷

          作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
          1. /***************************************************
          2. **
          3. ** MCU:PIC18f8772
          4. ** 功能:串口接收
          5. ** 說明:中斷方式
          6. ** 時間:2012-5-29 Lzy
          7. **
          8. *****************************************************/
          9. #include
          10. /*
          11. 串口初始化
          12. 設置異步接收操作的步驟如下:
          13. 1. 初始化SPBRGHx:SPBRGx寄存器,設置合適的
          14. 波特率。按需要將BRGH 和BRG16 位置1 或清
          15. 零,以獲得目標波特率。
          16. 2. 通過將SYNC 位清零并將SPEN 位置1 使能異步串口。
          17. 3. 如果需要中斷,將允許位RCxIE 置1。
          18. 4. 若需要接收9 位數(shù)據(jù),將RX9 位置1。
          19. 5. 通過將CREN 位置1,使能接收。
          20. 6. 當接收完成時標志位RCxIF 將被置1,此時如果
          21. 允許位RCxIE 已置1,還會產(chǎn)生一個中斷。
          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. // 外設中斷允許寄存器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)先級中斷服務程序
          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. }


          關鍵詞: PIC18f串口中

          評論


          技術專區(qū)

          關閉