新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC18f 串口中斷

        PIC18f 串口中斷

        作者: 時間:2016-11-11 來源:網絡 收藏
        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 位數據,將RX9 位置1。
        19. 5. 通過將CREN 位置1,使能接收。
        20. 6. 當接收完成時標志位RCxIF 將被置1,此時如果
        21. 允許位RCxIE 已置1,還會產生一個中斷。
        22. 7. 讀RCSTAx 寄存器以獲取第9 位數據(如果已
        23. 使能),并判斷是否在接收過程中發生了錯誤。
        24. 8. 通過讀RCREGx 寄存器來讀取接收到的8 位數據。
        25. 9. 如果發生錯誤,通過將使能位CREN 清零來清除錯誤。
        26. 10. 若想使用中斷,請確保將INTCON 寄存器中
        27. GIE 和PEIE 位(INTCON<7:6>)置1。
        28. */
        29. voidUartInit(void)
        30. {
        31. RCSTA1bits.SPEN=1;// 串口使能
        32. TRISCbits.TRISC7=1;// 異步串行接收數據輸入
        33. TRISCbits.TRISC6=0;// 異步和同步主模式,TRISC<6> 零(= 0)
        34. // TXSTA1:發送狀態和控制寄存器
        35. TXSTA1bits.SYNC=0;// 異步模式
        36. TXSTA1bits.TX9=0;// 選擇8 位發送
        37. TXSTA1bits.TXEN=1;// 禁止發送
        38. TXSTA1bits.BRGH=1;// 高速
        39. TXSTA1bits.TXEN=1;// 使能發送
        40. // RCSTA1:接收狀態和控制寄存器
        41. RCSTA1bits.RX9=0;// 選擇8 位接收
        42. RCSTA1bits.CREN=1;// 使能接收器
        43. // BAUDCON1:波特率控制寄存器
        44. BAUDCON1bits.BRG16=0;// 8位波特率發生器——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. //高優先級中斷向量
        53. #pragma code InterruptVectorHigh=0x08
        54. voidInterruptVectorHigh(void)
        55. {
        56. _asm
        57. gotoInterruptHandlerHigh //跳到中斷程
        58. _endasm
        59. }
        60. //高優先級中斷服務程序
        61. #pragma code
        62. #pragmainterruptInterruptHandlerHigh
        63. voidInterruptHandlerHigh()
        64. {
        65. if(PIR1bits.RC1IF)// 已接收數據
        66. {
        67. PIR1bits.RC1IF=0;
        68. PORTF=RCREG1;// 讀取接收到的數據
        69. }
        70. }
        71. voidmain()
        72. {
        73. UartInit();
        74. while(1);
        75. }


        關鍵詞: PIC18f串口中

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 黔西| 泉州市| 乌兰浩特市| 东乌| 台北县| 汤阴县| 香格里拉县| 永和县| 额敏县| 陆丰市| 都安| 黄冈市| 凤冈县| 广丰县| 东兴市| 东港市| 永兴县| 禄丰县| 镇原县| 聂拉木县| 建宁县| 广德县| 竹溪县| 济阳县| 大竹县| 英山县| 常熟市| 阿合奇县| 长顺县| 卢氏县| 绥芬河市| 海宁市| 陆良县| 武义县| 武功县| 定陶县| 自治县| 奉贤区| 高陵县| 怀远县| 远安县|