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

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

点击数:7303 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   AVR单片机
USART_RX_COMM_REPTX1:
    lds ZL,USARTAI_TXEnd            ;发送作业是否全部结束?
    cpi ZL,USARTAI_TEndI              ;是,继续
    brne USART_RX_COMM_REPTX_RET      ;否,返回,等待发送作业结束
    rcall USART_AINT_TXINI          ;重新启动原发送作业
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
    lds ZL,USARTAI_ERRNum           ;USART 发生收发错误次数+1
    inc ZL
    sts USARTAI_ERRNum,ZL
USART_RX_COMM_REPTX_RET:
    ret                             ;子程序返回

;*** 此段程序用于接收到[接收数据正确]命令处理
USART_RX_COMM_DataOK:
    ldi ZL,USARTAI_TCOMI            ;置发送命令作业标志值
    sts USARTAI_TXCOM,ZL
    ldi ZL,DataUPD_TALWI            ;置允许更新发送数据标志值
    sts DataUPD_TXALW,ZL
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
    ret                             ;子程序返回

;*** 此段程序用于接收到[要求对方发送指定数据]命令处理
USART_RX_COMM_DCOMTX:
    ldi ZL,DataUPD_TALWI            ;置允许更新发送数据标志值
    sts DataUPD_TXALW,ZL
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
USART_RX_COMM_DCOMTX_RET:
    ret                             ;子程序返回

;*** 此段程序用于“USART 接收器错误”和“接收命令或数据错误”处理
USART_RXD_Error:
    lds ZL,USARTAI_ERRNum           ;USART 发生收发错误次数是否超过允许次数?
    cpi ZL,USARTAI_ENALWI             ;是,转至 USART 通信发生错误处理
    brlo USART_RXD_Error1             ;否,继续
    rcall USART_Error               ;调用 USART 通信发生错误处理程序
    rjmp USART_RXD_Error_RET        ;返回
USART_RXD_Error1:
    lds ZL,USARTAI_TXEnd            ;发送作业是否全部结束?
    cpi ZL,USARTAI_TEndI              ;是,继续
    brne USART_RXD_Error_RET          ;否,返回,等待发送作业结束
    rcall USART_TX_COMM_REPTX       ;向对方发送“要求重新发送”命令
    ldi ZH,(1<<FE)|(1<<DOR)|(1<<PE)
    com ZH                          ;清除帧错误(FE)、数据溢出(DOR)
    in ZL,UCSRA                       ;及奇偶校验错误(UPE)标志
    and ZL,ZH
    out UCSRA,ZL
    ldi ZL,USARTAI_REndI            ;置接收作业全部结束标志值
    sts USARTAI_RXEnd,ZL
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
    lds ZL,USARTAI_ERRNum           ;USART 发生收发错误次数+1
    inc ZL
    sts USARTAI_ERRNum,ZL
USART_RXD_Error_RET:
    ret                             ;子程序返回


;*******************************************************************************
;*
;* 从 USART 端口上接收到的数据处理子程序 - “USART_RXD_Data”
;*
;* 说明:
;*   本子程序用于处理从 USART 端口上接收到的数据,本子程序中包含有数据循环
;* 冗余检测校验子程序。
;*   本子程序要在主程序中不间断循环查询运行。
;*
;* SRAM 中标志字节用法:
;*   入口标志:本子程序将检查这三个标志,只有这三个标志置值后才允许处理数据。
;*               允许处理接收数据(DataUPD_RXALW)= $03(DataUPD_RDALWI)
;*               接收作业己更新(USARTAI_RXUPD)  = $0a(USARTAI_RUPDI)
;*               接收作业全部结束(USARTAI_RXEnd)= $0f(USARTAI_REndI)
;*   出口标志:接收数据处理操作得到执行后,将对下面这两个标志置值。
;*               允许处理接收数据(DataUPD_RXALW)= $00
;*               接收作业己更新(USARTAI_RXUPD)  = $00
;*
;*******************************************************************************
USART_RXD_Data:
    lds ZL,DataUPD_RXALW            ;检查是否允许处理接收数据?

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


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

上一篇:makefile文件讲解

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