关于pic单片机串口初始化,有一段代码,求大神解释啊

2019-07-15 16:20发布

  1. void serial_setup(void)
  2. {
  3.         /* relates crystal freq to baud rate - see above and PIC16F87x data sheet under 'USART async. modes'

  4.         BRGH=1, Fosc=3.6864MHz                BRGH=1, Fosc=4MHz      BRGH=1, Fosc=8MHz    BRGH=1, Fosc=16MHz
  5.         ----------------------          -----------------      -----------------    ------------------
  6.         Baud                SPBRG             Baud                SPBRG          Baud                SPBRG         Baud                SPBRG
  7.         1200                191               1200                207.3          1200                415.7         9600    103
  8.         2400                95                2400                103.2          2400                207.3         19200                51
  9.         4800                47                4800                51.1           4800                103.2         38400   25
  10.         9600                23                9600                25.0           9600                51.1          57600   16
  11.         19200                11                19200                12.0           19200        25.0          115200  8
  12.         38400                5                 38400                5.5            38400        12.0
  13.         57600                3                 57600                3.3            57600        7.7
  14.         115200        1                 115200        1.2            115200        3.3

  15.         */

  16.         /*
  17.          * Comms setup:
  18.          */

  19.         #define BAUD 19200
  20.         #define DIVIDER ((PIC_CLK/(16UL * BAUD) -1))
  21.         #define HIGH_SPEED 1

  22.         //you can comment these #assert statements out if you dont want error checking
  23.         #if PIC_CLK==3686400 && BAUD==19200
  24.                 #assert DIVIDER==11
  25.         #elif PIC_CLK==4000000 && BAUD==19200
  26.                 #assert DIVIDER==12
  27.         #elif PIC_CLK==16000000 && BAUD==19200
  28.                 #assert DIVIDER==51
  29.         #elif PIC_CLK==20000000 && BAUD==19200
  30.                 #assert DIVIDER==64
  31.         #endif

  32.         SPBRG=DIVIDER;
  33.         BRGH=HIGH_SPEED;        //data rate for sending
  34.         SYNC=0;                                                //asynchronous
  35.         SPEN=1;                                                //enable serial port pins
  36.         CREN=1;                                                //enable reception
  37.         SREN=0;                                                //no effect
  38.         TXIE=0;                                                //disable tx interrupts
  39.         RCIE=0;                                                //disable rx interrupts
  40.         TX9=0;                                                //8-bit transmission
  41.         RX9=0;                                                //8-bit reception
  42.         TXEN=0;                                                //reset transmitter
  43.         TXEN=1;                                                //enable the transmitter
  44. }
复制代码百度了一下  assert  但是看不太明白啊
还有那个  DIVIDER 宏定义  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。