您的位置 首页 开关

PIC18f 串口中止

/*******************************************************MCU:PIC18f8772**功能:串口接收**说明:中断方式**时间:2012-5-

  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. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/275286.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部