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

📄 comm.h

📁 这是一个AVR单片机的串行通讯模块 大家可以合理的用到自己的实验中
💻 H
字号:
/**************************************************************************************************
* 文 件 名 : Comm.H
* 说    明 : 
*            1> 这一版本中最大的接收和发送缓存为255为INT8U类型的最大值
**************************************************************************************************/



#ifdef  COMM_GLOBALS
#define COMM_EXT
#else
#define COMM_EXT extern
#endif



/**************************************************************************************************
* 全局常量
**************************************************************************************************/
#define COMM_MODULE_EN          1            // 串口模块总使能   0禁止


                                              // 当串口的接收需要任务协助处理时下面两个定义有效
//#define TaskComm1Prio           1           // 定义串口0接收任务ID 注意: 在CONFIG.H中统一定义
//#define TaskComm2Prio           2           // 定义串口1接收任务ID
#define COMM1_MEM_SEL                         // 串口0各种控制变量存储区选择    非C51一般为空
#define COMM2_MEM_SEL                         // 串口1各种控制变量存储区选择    非C51一般为空
#define COMM_CONST_SEL                        // 串口数据常量存储区选择        非C51一般为const或static
#define COMM0_VECTOR                          // 串口0中断函数入口编号
#define COMM1_VECTOR                          // 串口1中断函数入口编号
#define X0N                     17            // 流控制字符 继续发送  20%
#define XOFF                    19            // 流控制字符 停止发送  70%

////////////////////////////////////////////////------------串口配置----------
#define COMM_MODE               1             // 通信模式     0异步正常模式 1异步倍速模式 2同步主机模式                                              
#define COMM_MORE_CPU_MODE      0             // 多处理器模式 1为多处理器模式有效 0为无效
#define COMM_ACCEPT_ISR_EN      1             // 接收结束中断          (1)使能   (0)禁止
#define COMM_SEND_ISR_EN        1             // 发送结束中断          (1)使能   (0)禁止
#define COMM_DATAFREE_ISR_EN    1             // 数据寄存器空中断      (1)使能   (0)禁止
#define COMM_SYN_CLOCK          1             // 同步工作模式时钟极性  (1)下降沿 (0)上升沿 



                                              // 两个处理CLK模块临界数据的两个宏 这里使用OS的临界宏  
#define COMM_ENTER_CRITICAL()   OS_ENTER_CRITICAL() // 进入临界宏  默认COMM_ENTER_CRITICAL() EA=0    
#define COMM_EXIT_CRITICAL()    OS_EXIT_CRITICAL()  //退出临界宏  默认COMM_ENTER_CRITICAL() EA=1
     
                                              // 串口0的常量定义
#define COMM1_UNIT_EN           1             // 串口0模块使能                                  0禁止
  #define COMM1_DATA_STREAM_EN  0             // ASCII方式通讯时可采样XON/XOFF数据流模式来保证数据传输
  #define COMM1_OS_SEL          1             // 选择在RTOS中使用则调用OSIntSendSignal 通知接收任务处理
                                              //  串口数据 则启用定义TaskComm1Prio即接收任务ID   0=禁止
  #define COMM1_OS_SIGNAL_SEL   1             // 0选择发送信号 1选择释放信号量 同时COMM1_OS_SEL要使能  
                                              //   来通知接收任务处理数据                            
  #define COMM1_RXD_EN          1             // 串口0接收部分使能                              0禁止
  #define COMM1_GETNMSGS_EN     0             // 串口0的数据计数检测函数使能                    0禁止
  #define COMM1_GETS_EN         0             // 串口0接收多数据                                0禁止
  #define COMM1_RXD_SIZE        255           // 串口0的接收缓存配置 需要立即读数据 否则弃数据  必须>=1
  #define COMM1_TXD_EN          1             // 串口0发送部分使能                              0禁止
  #define COMM1_PUTS_EN         0             // 串口0发送多数据                                0禁止
  #define COMM1_TXD_SIZE        128           // 串口0的发送缓存配置                            必须>=1
                                                                                

//////////////////////////////////////////////// --------------串口的各种返回信息 不能更改------------
#define COMM_ERR                0             // 串口配置有错误  
#define COMM_NO_ERR             1             // 串口配置没有错误
#define COMM_BAD_BAUD           2             // 波特率错误 
#define COMM_BAD_MODE           3             // 串口工作为错误的工作方式
#define COMM_RXD_EMPTY          4             // 接收缓存没有数据 为空
#define COMM_RXD_FALSE          5             // 接收数据失败 只多字节接收时返回此信息
#define COMM_RXD_OK             6             // 接收数据正确
#define COMM_TXD_FALSE          7             // 发送失败
#define COMM_TXD_OK             8             // 发送正确
#define COMM_TXD_FLOOD          9             // 发送数据溢出 快速或多字节数据发送时 缓存溢出
			   			   

////////////////////////////////////////////

#if   (COMM_MODE == 0)||(COMM_MODE == 1)         // 异步正常模式串,异步倍速模式串
    #define UMSEL_MODE          0
    #define UCPOL_MODE          0
  #elif COMM_MODE == 2                           // 同步模式串
    #define UMSEL_MODE          BIT(UMSEL)
    #if COMM_SYN_CLOCK == 0                       // 同步工作模式时钟极性
        #define UCPOL_MODE      0
      #else
        #define UCPOL_MODE      BIT(UCPOL)
    #endif
  #else	                                         // 选择其他模式 则停止编译
    #error "(COMM_MODE)通信模式设置错误!  "
#endif

#if     COMM_MORE_CPU_MODE  ==  0                // 处理器模式 1为多处理器模式有效 0为无效
    #define MPCM_MODE               0            //
  #elif   COMM_MORE_CPU_MODE  ==  1
    #define MPCM_MODE               BIT(MPCM)
  #else
    #error "请正确配置多处理器模式中断使能信号 (COMM_MORE_CPU_MODE)!"
#endif

#if     COMM_ACCEPT_ISR_EN  ==  0                // 接收结束中断 (1)使能  (0)禁止
    #define RXCIE_MODE              0            //
  #elif   COMM_ACCEPT_ISR_EN  ==  1
    #define RXCIE_MODE              BIT(RXCIE)
  #else
    #error "请正确配置接收结束中断中断使能信号 (COMM_ACCEPT_ISR_EN)!"
#endif

#if     COMM_SEND_ISR_EN  ==  0                  // 发送结束中断 (1)使能  (0)禁止
    #define TXCIE_MODE               0           //
  #elif   COMM_SEND_ISR_EN  ==  1
    #define TXCIE_MODE               BIT(TXCIE)
  #else
    #error "请正确配置发送结束中断中断使能信号 (COMM_SEND_ISR_EN)!"
#endif

#if     COMM_DATAFREE_ISR_EN == 0                // 数据寄存器空中断 (1)使能  (0)禁止
    #define UDRIE_MODE              0            //
  #elif   COMM_DATAFREE_ISR_EN == 1
    #define UDRIE_MODE              BIT(UDRIE)
  #else
    #error "请正确配置数据寄存器空中断使能信号 (COMM_DATAFREE_ISR_EN)!"
#endif
////////////////////////////////////////////////
#define none 0
#define even 2
#define odd  3
/********************************************************************************************************
* 全局变量和数据类型
********************************************************************************************************/
#if COMM_MODULE_EN  > 0


#endif

/********************************************************************************************************
* 函数
********************************************************************************************************/
                                              /* COMM1有关接口函数集                                   */
INT8U    Comm1CfgPort     (INT32U baud, INT8U parity, INT8U bits, INT8U stops);
void     Comm1VarInit     (void);             
                                              /* COMM1接收有关函数                                     */
INT8U    Comm1RxGetChar   (INT8U *Data);
INT8U    Comm1RxGetNMsgs  (void);
INT8U    Comm1RxGetsChar  (INT8U *s, INT8U len);

                                              /* COMM1发送有关函数                                     */
INT8U    Comm1TxInBuf  (INT8U Data);           // 数据进入发送缓存     
#define Comm1TxPutChar  Comm1TxInBuf
//INT8U    Comm1TxPutChar   (INT8U Data);
INT8U    Comm1TxPutsChar  (INT8U *s, INT8U len);

/********************************************************************************************************
*                                             End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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