⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16c550cfg.h

📁 51单片机驱动16C550
💻 H
字号:
#include    <absacc.h>

//定义16C550的外部晶体频率和要求的波特率
#define C550_BAUD   19200                       //单位: bps
#define C550_XTAL   1843200                     //单位: Hz

//----------------------------------------------------------------------------------------

//变量存储寄存器类型
#define C550_REG    xdata

//----------------------------------------------------------------------------------------

//外部中断号(0,1),使用INT0或INT1
#define C550_USING_EXTERN_INT_NUMBER 1

//----------------------------------------------------------------------------------------

//接收缓冲区长度(256, 512, 1024, 2048, 4096, 8192, 16384, 32768 )
#define C550_RBUFF_LEN   16384

//发送缓冲区长度(256, 512, 1024, 2048, 4096, 8192, 16384, 32768 )
#define C550_TBUFF_LEN   1024

//----------------------------------------------------------------------------------------

//寄存器选择地址的16位地址的基址
#define C550_BASE   0x8000

//寄存器选择地址对应16位地址的位号,0-15
#define C550_A0     8

//寄存器选择地址对应16位地址的位号,0-15
#define C550_A1     9

//寄存器选择地址对应16位地址的位号,0-15
#define C550_A2     10

//----------------------------------------------------------------------------------------

#define FORM_BIT(B7,B6,B5,B4,B3,B2,B1,B0)   (((B7)<<7)+((B6)<<6)+((B5)<<5)+((B4)<<4)+((B3)<<3)+((B2)<<2)+((B1)<<1)+(B0))

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |CTS      |RTS      |Xoff     |Sleep    |modem    |receive  |transmit |receive  |
//    IER         |   00    |interrupt|interrupt|interrupt|interrupt|status   |line     |holding  |holding  |
//                |         |         |         |         |         |interrupt|status   |register |register |
//                |         |         |         |         |         |         |interrupt|         |         |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
#define C550_VAL_IER  FORM_BIT(   0,        0,        0,        0,        0,        0,        1,        1         )

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |RCVR     |RCVR     |reserved |reserved |DMA      |XMIT     |RCVR     |FIFO     |
//    FCR         |   00    |trigger  |trigger  |         |         |mode     |FIFO     |FIFO     |enable   |
//                |         |(MSB)    |(MSB)    |         |         |select   |reset    |reset    |         |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
#define C550_VAL_FCR  FORM_BIT(   1,        0,        0,        0,        0,        1,        1,        1     )

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |divisor  |set break|set      |even     |parity   |stop bits|word     |word     |
//    LCR         |   00    |latch    |         |parity   |parity   |enable   |         |length   |length   |
//                |         |enable   |         |         |         |         |         |bit 1    |bit 0    |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
#define C550_VAL_LCR  FORM_BIT(   0,        0,        0,        0,        0,        0,        1,        1     )

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |reserved |IR enable|reserved |loop back|_OUT2    |_OUT1    |_RTS     |_DTR     |
//    MCR         |   00    |         |         |         |         |INT      |         |         |         |
//                |         |         |         |         |         |enable   |         |         |         |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
#define C550_VAL_MCR  FORM_BIT(   0,        0,        0,        0,        0,        0,        0,        0     )

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |Auto CTS |Auto RTS |Special  |Enable   |Cout-3   |Cout-2   |Cout-1   |Cout-0   |
//                |         |         |         |char.    |IER[4-7] |Tx,Rx    |Tx,Rx    |Tx,Rx    |Tx,Rx    |
//    EFR         |   00    |         |         |sekect   |ISR[4,5] |Control  |Control  |Control  |Control  |
//                |         |         |         |         |FCR[4,5] |         |         |         |         |
//                |         |         |         |         |MCR[5-7] |         |         |         |         |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
#define C550_VAL_EFR  FORM_BIT(   0,        0,        0,        0,        0,        0,        0,        0     )

#define C550_VAL_DL      ( C550_XTAL / C550_BAUD / 16 )
#define C550_VAL_XON1
#define C550_VAL_XON2
#define C550_VAL_XOFF1
#define C550_VAL_XOFF2


//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |FIFOs    |FIFOs    |INT      |INT      |INT      |INT      |INT      |INT      |
//     ISR        |   01    |enabled  |enabled  |priority |priority |priority |priority |priority |status   |
//                |         |         |         |bit 4    |bit 3    |bit 2    |bit 1    |bit 0    |         |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//                |         |FIFO     |trans.   |trans.   |break    |framing  |parity   |overrun  |receive  |
//     LSR        |   60    |data     |empty    |holding  |interrupt|error    |error    |error    |data     |
//                |         |error    |         |empty    |         |         |         |         |ready    |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|

//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
//     MSR        |   X0    |DCD      |RI       |DSR      |CTS      |_DCD     |_RI      |_DSR     |_CTS     |
//----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|

#define address(A2,A1,A0)   ((C550_BASE)+((A2)<<(C550_A2))+((A1)<<(C550_A1))+((A0)<<(C550_A0)))

//接收缓冲器,地址A2-A0 = 000
#define C550_RHR    XBYTE[ address( 0, 0, 0 ) ]

//发送缓冲器,地址A2-A0 = 000
#define C550_THR    XBYTE[ address( 0, 0, 0 ) ]

//中断使能寄存器,地址A2-A0 = 001
#define C550_IER    XBYTE[ address( 0, 0, 1 ) ]

//中断状态寄存器,地址A2-A0 = 010
#define C550_ISR    XBYTE[ address( 0, 1, 0 ) ]

//FIFO控制寄存器,地址A2-A0 = 010
#define C550_FCR    XBYTE[ address( 0, 1, 0 ) ]

//行控制寄存器,地址A2-A0 = 011
#define C550_LCR    XBYTE[ address( 0, 1, 1 ) ]

//MODEM控制寄存器,地址A2-A0 = 100
#define C550_MCR    XBYTE[ address( 1, 0, 0 ) ]

//行状态寄存器,地址A2-A0 = 101
#define C550_LSR    XBYTE[ address( 1, 0, 1 ) ]

//MODEM状态寄存器,地址A2-A0 = 110
#define C550_MSR    XBYTE[ address( 1, 1, 0 ) ]

//暂存寄存器,地址A2-A0 = 111
#define C550_SPR    XBYTE[ address( 1, 1, 1 ) ]

//分频寄存器低字节,地址A2-A0 = 000
#define C550_DLL    XBYTE[ address( 0, 0, 0 ) ]

//分频寄存器高字节,地址A2-A0 = 001
#define C550_DLM    XBYTE[ address( 0, 0, 1 ) ]

//增强性能寄存器,地址A2-A0 = 010
#define C550_EFR    XBYTE[ address( 0, 1, 0 ) ]

//软流控制 Xon1 符号,地址A2-A0 = 100
#define C550_XON1   XBYTE[ address( 1, 0, 0 ) ]

//软流控制 Xon2 符号,地址A2-A0 = 101
#define C550_XON2   XBYTE[ address( 1, 0, 1 ) ]

//软流控制 Xoff1 符号,地址A2-A0 = 110
#define C550_XOFF1  XBYTE[ address( 1, 1, 0 ) ]

//软流控制 Xoff2 符号,地址A2-A0 = 111
#define C550_XOFF2  XBYTE[ address( 1, 1, 1 ) ]

//----------------------------------------------------------------------------------------

  #if  C550_RBUFF_LEN==256
#elif  C550_RBUFF_LEN==512
#elif  C550_RBUFF_LEN==1024
#elif  C550_RBUFF_LEN==2048
#elif  C550_RBUFF_LEN==4096
#elif  C550_RBUFF_LEN==8192
#elif  C550_RBUFF_LEN==16384
#elif  C550_RBUFF_LEN==32768
#else
#error C550_RBUFF_LEN 定义错误!!!
#endif

  #if  C550_TBUFF_LEN==256
#elif  C550_TBUFF_LEN==512
#elif  C550_TBUFF_LEN==1024
#elif  C550_TBUFF_LEN==2048
#elif  C550_TBUFF_LEN==4096
#elif  C550_TBUFF_LEN==8192
#elif  C550_TBUFF_LEN==16384
#elif  C550_TBUFF_LEN==32768
#else
#error C550_TBUFF_LEN 定义错误!!!
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -