您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机avr异步中断接收和发送通信程序 正文
avr异步中断接收和发送通信程序

avr异步中断接收和发送通信程序

点击数:7303 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   AVR单片机
;*******************************************************************************
;*
;* 子程序名:          USART_AINT.asm
;* 程序名称:          通用同步和异步串行接收器和转发器(USART)
;*                    异步中断接收和发送通信程序
;* 版本:              1.0
;* 适用 MCU 型号:     AVR所有型号
;* 使用资源:          r5,r6,r16,r17,r18,r19,r20,r28,r29,r30,r31
;*                    定时器/计数器0(溢出中断)
;*
;* 程序功能:        
;*   本程序是通用同步和异步串行接收器和转发器(USART)在异步状态下使用中断
;* 方式进行全双工接收和发送数据的通信程序。共包括下面列表中这四个子程序。这
;* 四个子程序的具体使用方法请参考各自的说明。
;* ┏───────────┳───────────────────────┓
;* ┃      子程序名称      ┃                子程序功能描述                ┃
;* ┣───────────╋───────────────────────┫
;* ┃    USART_AINT_INI    ┃      USART 异步通信中断接收和发送初始化      ┃
;* ┣───────────╋───────────────────────┫
;* ┃    USART_INT_ACOM    ┃USART 异步通信中断接收与发送协议命令和数据处理┃
;* ┣───────────╋───────────────────────┫
;* ┃     USART_RXCINT     ┃       USART 异步通信接收结束中断处理         ┃
;* ┣───────────╋───────────────────────┫
;* ┃    USART_TXDREINT    ┃   USART 异步通信数据寄存器空中断发送处理     ┃
;* ┗───────────┻───────────────────────┛
;* 
;* 注意:
;*   ①.r5 (USARTAI_RXNum)《接收作业次数寄存器》和 r6 (USARTAI_TXNum)
;* 《发送作业次数寄存器》为全局寄存器变量,不得被其他程序使用,否则将导致接收
;* 和发送的数据错误。
;*   ②.本程序共使用了3个中断向量,需在主程序中设置其中断向量转移地址,分
;* 别为如下具体设置:
;* ┏─────────────┳───────┳─────────────┓
;* ┃       中断名称           ┃ 中断向量地址 ┃       中断处理程序       ┃
;* ┣─────────────╋───────╋─────────────┫
;* ┃   USART 接收结束中断     ┃   URXCaddr   ┃       USART_RXCINT       ┃
;* ┣─────────────╋───────╋─────────────┫
;* ┃  USART 数据寄存器空中断  ┃   UDREaddr   ┃      USART_TXDREINT      ┃
;* ┣─────────────╋───────╋─────────────┫
;* ┃    T/C0溢出中断      ┃   OVF0addr   ┃     TC0_Timer_OVFINT     ┃
;* ┗─────────────┻───────┻─────────────┛
;*
;* 通信协议:
;*   ①.每次进行接收和发送的作业时均以协议命令来决定下一步操作方式,关于通信
;* 协议命令的约定方法请见下述详细说明和命令字符串的具体定义。接收和发送的命令
;* 的数据字节长度固定为 10 个字节,其格式定义如下:COM(命令起始标识字符串)+
;* 设备编号(4 个字节)+ 命令字(3 个字节)。
;*   ②.接收或发送的数据帧格式:“8 个数据位, 1 个停止位,使用奇校验”。注:如
;* 需更改本程序的数据帧格式可在“USART_AINT_INI”子程序中进行修改。
;*   ③.本程序约定双方通信的波特率为“ 115.2 Kbps ”。注:如需更改本程序的通
;* 信波特率可在“波特率(bps)常数定义”中进行设置,但双方通信的波特率受定时器/
;* 计数器0定时时间的约束,如果要修改最小双方通信波特率,则需修改定时器/计数器
;* 0的定时时间(减小最小波特率需延长定时时间,增大则缩短定时时间)。定时器/计
;* 数器0的定时时间应略大于在约定双方通信的波特率下接收完 255 个字节所用的时间
;* 总和,也不宜取得过大,过大则影响双方通信的速度。
;*   ④.接收和发送的数据时均以[命令>数据,命令>数据……]形式为作业方式进行
;* 通信,但接收和发送的命令时可以任意形式进行通信。对于接收和发送的数据的校验方
;* 法采用循环冗余检测(CRC)校验法,接收和发送的双方必须采用相同的校验算法,具
;* 体的检测校验算法请参考子程序“Data_CRC_2Byte”中的具体说明。
;*   ⑤.每次接收和发送的数据总长度均不超过 255 个字节。而且每次接收或发送数据
;* 的第一个字节为本次接收或发送的数据长度字符,最后两个字节为循环冗余检测校验字
;* 节,因此每次接收和发送的有效数据长度均不得超过 252 个字节。,其计算公式如下:
;* 数据长度数值 = 有效数据字节长度 + 3( 1 个长度字符本身 + 2 个校验字节)
;*   ⑥.在发送数据前要向对方先发送一请求发送数据命令字符串“COMXXXXATX”,等待
;* 对方回应一允许发送命令字符串“COMXXXXYET”的握手信号后,方可接着进行发送数据。
;*   ⑦.当接收到的数据或命令有错误时,可向对方发送要求重新发送命令字符串“CO
;* MXXXXRPT”,要求对方重新发送。对方在接收到此命令字符串后,依据上次发送的作业
;* 类型来重新发送数据或命令。对于接收到的数据经循环冗余检测校验错误后,也可使用
;* 重新发送一次允许发送命令字符串“COMXXXXYET”来要求对方重新发送数据。
;*   ⑧.当接收到的数据(不包括命令)经循环冗余检测校验正确后,必须向对方发送
;* 一接收数据正确命令字符串“COMXXXXOKD”,来结束本次接收数据操作。如果对方不发
;* 送收到此命令字符串“COMXXXXOKD”错误的信息(即发回“COMXXXXRPT”),不允许多
;* 次发送此命令字符串,否则将导致接收数据错误。
;*   ⑨.本程序通信协议命令还包括了下面三个协议命令字符串,具体用法如下述:
;* “COMXXXXSTD”[要求对方发送指定数据],此命令用于启动双方对指定数据的收发
;* 操作。
;* “COMXXXXRII”[要求对方重新初始化 USART 端口状态],此命令用于当通信协议命令
;* 混乱,致使收发作业操作无法正常运行时,向对方发出从头再重新开始收发作业请求。
;* 此命令也可用于双方开始通信前向对方发送开始通信命令使用,使双方的 USART 端口
;* 均处于起始状态。
;* “COMXXXXYRI”[重新初始化 USART 端口状态完成],此命令用于通知对方,我方己可
;* 以从头再重新开始收发作业。

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]  下一页


本文关键字:通信  程序  AVR单片机单片机-工控设备 - AVR单片机

上一篇:makefile文件讲解

《avr异步中断接收和发送通信程序》相关文章>>>