📄 communication_usart.h
字号:
/*
********************************************************************************************
头部文件名: 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 + -