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

📄 communication_usart.h

📁 本程序是用于通用同步和异步串行接收器和转发器(USART)
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
********************************************************************************************
头部文件名:        Communication_USART.h
头部文件名称:      通用同步异步接收发送器(USART)异步中断接收和发送通信的头部文件
文件版本:        1.0
文件功能:
    本文件是对通用同步异步接收发送器(USART)异步中断接收和发送通信源程序文件的
    常量、数据结构类型进行定义和函数原型声明的头部文件。
文件说明:

编译工具软件:      IAR Embedded Workbench for Atmel AVR 版本:3.20 以上
链接文件:

编作者:            
编作者 E-Mail:     PTZSW@163.COM
编制日期:          2005年5月18日
----------------------------------------------------------------------------------------
头部文件版本历史:
2005年5月18日 -------- 版本 1.0 :发行版本
********************************************************************************************
*/


/*==========================================================================================
下面两条指令是本头部文件条件编译的预处理指令,用于防止本头部文件被其他文件重复引用。
==========================================================================================*/
#ifndef Communication_USART_H                 // "Communication_USART_H" 条件编译开始
#define Communication_USART_H


/*==========================================================================================
                  本头部文件包括的其他头部文件
==========================================================================================*/
//#include "ATmega128.h"                        // 包含目标器件芯片的头部文件
#include "MCU_C_Macro_Data_Define.h"          // 包含数据类型和常用指令宏定义的头部文件


/*==========================================================================================
下面这三条指令是用于区分编译系统为 C++ 或 C 的预处理指令。
"__cplusplus" 为 C++ 预处理器名字,这三条指令表明接在其下面的那些指令为 C 程序特征。
==========================================================================================*/
#ifdef __cplusplus
extern "C" {
#endif


/*==========================================================================================
声明在应用中对于目标器件芯片,具体指定使用哪一个 USART 端口的条件定义。
注意:此处的声明定义对于 Communication_USART.c 源程序文件的编译有决定性作用,应慎重!
==========================================================================================*/
/*--------------------------------------------------------------------------------------
具有两个 USART 的目标器件芯片声明定义,
对于具有两个 USART 的目标器件芯片,具体指定使用哪一个 USART 端口的声明定义
--------------------------------------------------------------------------------------*/
#if defined(MCU_TYPE_IS_ATMEGA64) || defined(MCU_TYPE_IS_ATMEGA128) || \
    defined(MCU_TYPE_IS_ATMEGA162)
#define DUAL_USART_USE_USART0                 // 使用USART0的声明定义
#define DUAL_USART_USE_USART1                 // 使用USART1的声明定义
#endif
/*--------------------------------------------------------------------------------------
具有单个 USART 的目标器件芯片声明定义,
--------------------------------------------------------------------------------------*/
#if defined(MCU_TYPE_IS_ATMEGA16) || defined(MCU_TYPE_IS_ATMEGA32) || \
    defined(MCU_TYPE_IS_ATMEGA8535)
#define USE_USART_PORT                        // 使用USART的声明定义
#endif


/*==========================================================================================
源程序文件的的字符化常数定义:
==========================================================================================*/
/*--------------------------------------------------------------------------------------
USART端口通讯波特率(bps)常数定义:
下面波特率设置以单片机的时钟= 11.0592 MHz ,且不打开倍速的条件下进行定义。
波特率(bps) = 57.6 Kbps,误差 = 0.0%
--------------------------------------------------------------------------------------*/
#ifdef DUAL_USART_USE_USART0                  // 使用USART0的条件编译
#define USART0_Baud_L         0x0B            // 波特率(bps)常数的低字节
#define USART0_Baud_H         0               // 波特率(bps)常数的高字节
#endif                                        // "DUAL_USART_USE_USART0" 条件编译结束

#ifdef DUAL_USART_USE_USART1                  // 使用USART1的条件编译
#define USART1_Baud_L         0x0B            // 波特率(bps)常数的低字节
#define USART1_Baud_H         0               // 波特率(bps)常数的高字节
#endif                                        // "DUAL_USART_USE_USART1" 条件编译结束

#ifdef USE_USART_PORT                         // 使用USART的条件编译
#define USART_Baud_L          0x0B            // 波特率(bps)常数的低字节
#define USART_Baud_H          0               // 波特率(bps)常数的高字节
#endif                                        // "USE_USART_PORT" 条件编译结束

/*--------------------------------------------------------------------------------------
USART端口状态和标志字符化定义:
--------------------------------------------------------------------------------------*/
#ifdef DUAL_USART_USE_USART0                  // 使用USART0的条件编译
#define USART0_DATA_TXB8      (1<<TXB80)      // USART0发送数据位8数值
#define USART0_DATA_RXB8      (1<<RXB80)      // USART0接收数据位8数值
#define USART0_FRAMING_ERROR  (1<<FE0)        // USART0帧错误的标志数值
#define USART0_PARITY_ERROR   (1<<UPE0)       // USART0奇偶校验错误的标志数值
#define USART0_DATA_OVERRUN   (1<<DOR0)       // USART0数据溢出的标志数值
#define USART0_DATAREG_EMPTY  (1<<UDRE0)      // USART0数据寄存器空的标志数值
#define USART0_RX_COMPLETE    (1<<RXC0)       // USART0接收结束的标志数值
#define USART0_EN_INT_DRE     (1<<UDRIE0)     // 使能USART0数据寄存器空中断的位设置值
#endif                                        // "DUAL_USART_USE_USART0" 条件编译结束

#ifdef DUAL_USART_USE_USART1                  // 使用USART1的条件编译
#define USART1_DATA_TXB8      (1<<TXB81)      // USART1发送数据位8数值
#define USART1_DATA_RXB8      (1<<RXB81)      // USART1接收数据位8数值
#define USART1_FRAMING_ERROR  (1<<FE1)        // USART1帧错误的标志数值
#define USART1_PARITY_ERROR   (1<<UPE1)       // USART1奇偶校验错误的标志数值
#define USART1_DATA_OVERRUN   (1<<DOR1)       // USART1数据溢出的标志数值
#define USART1_DATAREG_EMPTY  (1<<UDRE1)      // USART1数据寄存器空的标志数值
#define USART1_RX_COMPLETE    (1<<RXC1)       // USART1接收结束的标志数值
#define USART1_EN_INT_DRE     (1<<UDRIE0)     // 使能USART1数据寄存器空中断的位设置值
#endif                                        // "DUAL_USART_USE_USART1" 条件编译结束

#ifdef USE_USART_PORT                         // 使用USART的条件编译
#define USART_DATA_TXB8       (1<<TXB8)       // USART发送数据位8数值
#define USART_DATA_RXB8       (1<<RXB8)       // USART接收数据位8数值
#define USART_FRAMING_ERROR   (1<<FE)         // USART帧错误的标志数值
#define USART_PARITY_ERROR    (1<<UPE)        // USART奇偶校验错误的标志数值
#define USART_DATA_OVERRUN    (1<<DOR)        // USART数据溢出的标志数值
#define USART_DATAREG_EMPTY   (1<<UDRE)       // USART数据寄存器空的标志数值
#define USART_RX_COMPLETE     (1<<RXC)        // USART接收结束的标志数值
#define USART_EN_INT_DRE      (1<<UDRIE)      // 使能USART数据寄存器空中断的位设置值
#endif                                        // "USE_USART_PORT" 条件编译结束

/*--------------------------------------------------------------------------------------
USART数据缓冲区大小字符化定义:
--------------------------------------------------------------------------------------*/
#ifdef DUAL_USART_USE_USART0                  // 使用USART0的条件编译
#define USART0_RXBUF_SIZE     0xFF            // USART0接收数据缓冲区大小
#define USART0_TXBUF_SIZE     0xFF            // USART0发送数据缓冲区大小
#endif                                        // "DUAL_USART_USE_USART0" 条件编译结束

#ifdef DUAL_USART_USE_USART1                  // 使用USART1的条件编译
#define USART1_RXBUF_SIZE     0xFF            // USART1接收数据缓冲区大小
#define USART1_TXBUF_SIZE     0xFF            // USART1发送数据缓冲区大小
#endif                                        // "DUAL_USART_USE_USART1" 条件编译结束

#ifdef USE_USART_PORT                         // 使用USART的条件编译
#define USART_RXBUF_SIZE      0xFF            // USART接收数据缓冲区大小
#define USART_TXBUF_SIZE      0xFF            // USART发送数据缓冲区大小
#endif                                        // "USE_USART_PORT" 条件编译结束


/*==========================================================================================
                                     全局和静态常量定义
==========================================================================================*/
/*--------------------------------------------------------------------------------------
所有通信协议命令开头标识字符串 - “comm_com_head[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_head[4] = {"COM"};

/*--------------------------------------------------------------------------------------
向对方请求发送命令字符串 - “tcomm_com_ask_tx[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_ask_tx[4] = {"ATX"};

/*--------------------------------------------------------------------------------------
允许对方发送命令字符串 - “tcomm_com_ok_rx[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_ok_rx[4] = {"YET"};

/*--------------------------------------------------------------------------------------
要求对方重新发送命令字符串 - “tcomm_com_rep_tx[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_rep_tx[4] = {"RPT"};

/*--------------------------------------------------------------------------------------
接收数据正确命令字符串 - “tcomm_com_data_ok[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_data_ok[4] = {"OKD"};

/*--------------------------------------------------------------------------------------
要求对方发送指定数据的命令字符串 - “tcomm_com_dcom_tx[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_dcom_tx[4] = {"STD"};

/*--------------------------------------------------------------------------------------
从 USART 端口传送控制操作指令命令字符串 - “tcomm_com_ctrl_com[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_ctrl_com[4] = {"CIT"};

/*--------------------------------------------------------------------------------------
通知对方批处理发送数据结束命令字符串 - “tcomm_com_tx_gdend[4]”
--------------------------------------------------------------------------------------*/
static flash unsigned char tcomm_com_tx_gdend[4] = {"GDE"};


/*==========================================================================================
                                      数据结构类型定义
==========================================================================================*/
/*--------------------------------------------------------------------------------------
通讯处理消息任务标志数据结构类型定义:
--------------------------------------------------------------------------------------*/
#define TCOMM_BUF_SIZE        0x0A            // 定义通讯任务接收和发送命令缓冲区大小
#define TCOMM_VVALUE          0xA5            // 定义通讯处理消息各任务标志变量的有效字符值
#define TCOMM_ERRNUM_VALUE    0x10            // 定义允许 USART 发生收发错误次数值(16次)
#define TCOMM_PORT_USART      0x0A            // 定义 USART 通讯端口的标志字符值为 10
#define TCOMM_PORT_SPI        0x1B            // 定义 SPI 通讯端口的标志字符值为 27
#define TCOMM_PORT_I2C        0x2C            // 定义 I2C 通讯端口的标志字符值为 44
#define TCOMM_PORT_USB        0x95            // 定义 USB 通讯端口的标志字符值为 149

typedef struct
{
  unsigned char  tcomm_txend;                 // 通讯发送作业结束标志变量
  unsigned char  tcomm_txupd;                 // 通讯发送作业己更新标志变量
  unsigned char  tcomm_txerr;                 // 通讯发送作业错误标志变量
  unsigned char  tcomm_txenum;                // 通讯接收作业发生错误次数
  unsigned char  tcomm_tdalw;                 // 允许处理通讯发送数据标志变量
  unsigned char  tcomm_tdgrp;                 // 允许批次处理通讯发送数据标志变量
  unsigned char  tcomm_tdovr;                 // 通讯发送数据缓冲区溢出标志变量
  unsigned char  tcomm_tddata;                // 通讯发送数据标志变量

  unsigned char  tcomm_rxend;                 // 通讯接收作业结束标志变量
  unsigned char  tcomm_rxupd;                 // 通讯接收作业己更新标志变量
  unsigned char  tcomm_rxerr;                 // 通讯接收作业错误标志变量
  unsigned char  tcomm_rxenum;                // 通讯接收作业发生错误次数
  unsigned char  tcomm_rdalw;                 // 允许处理通讯接收数据标志变量
  unsigned char  tcomm_rctrl;                 // 通讯接收控制操作指令标志变量
  unsigned char  tcomm_rdovr;                 // 通讯接收数据缓冲区溢出标志变量
  unsigned char  tcomm_rddata;                // 通讯接收数据标志变量

  unsigned char  tcomm_txport;                // 通讯发送端口标志变量
  unsigned char  tcomm_rxport;                // 通讯接收端口标志变量
} tasks_comm;

typedef tasks_comm *tasks_comm_handle;        // 指向通讯处理消息任务标志变量结构体的指针变量

#define tasks_comm_defaults { 0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0, \
                              0 }             // 通讯处理消息任务各标志变量的默认初始化值



/*==========================================================================================
                                     全局和静态变量定义
==========================================================================================*/
/*--------------------------------------------------------------------------------------

⌨️ 快捷键说明

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