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

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

点击数:7303 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   AVR单片机
    cpi ZL,DataUPD_RALWI              ;是,则继续
    brne USART_RXD_Data_RET           ;否,直接返回
    lds ZL,USARTAI_RXUPD            ;检查接收作业是否己更新?
    cpi ZL,USARTAI_RUPDI              ;是,则继续
    brne USART_RXD_Data_RET           ;否,直接返回
    lds ZL,USARTAI_TXEnd            ;发送作业是否全部结束?
    cpi ZL,USARTAI_TEndI              ;是,继续
    brne USART_RXD_Data_RET           ;否,返回,等待发送作业结束
    lds ZL,USARTAI_RXEnd            ;检查接收作业是否全部结束?
    cpi ZL,USARTAI_REndI              ;是,则继续
    brne USART_RXD_Data_Error         ;否,转至接收错误处理
USART_RXD_Data_Check:
    ldi ZL,Low(USARTAI_RXDAA)       ;Z 指针指向接收数据的首字节
    ldi ZH,High(USARTAI_RXDAA)
    lds DCRC2B_DLength,USARTAI_RXDAA;置校验的数据长度初值
    call DataCheck_CRC2B            ;校验接收的数据是否正确?
    or YL,YH                          ;是,继续
    brne USART_RXD_Data_Error         ;否,转至接收错误处理
    rcall USART_TX_COMM_DataOK      ;向对方发送“接收数据正确”命令
    ldi ZL,USARTAI_RCOMI            ;置接收命令作业标志值
    sts USARTAI_RXCOM,ZL
    rcall USART_RXData_Process      ;调用接收数据处理子程序
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
    clr ZL                          ;清除允许处理接收数据标志
    sts DataUPD_RXALW,ZL
    rjmp USART_RXD_Data_RET         ;返回
USART_RXD_Data_Error:
    rcall USART_RXD_Error           ;调用接收错误处理子程序
USART_RXD_Data_RET:
    ret                             ;子程序返回

;*** 此段程序用于对从 USART 端口上接收到的数据进行处理操作
USART_RXData_Process:


;此处插入接收数据处理程序


    ret                             ;子程序返回


;*******************************************************************************
;*
;* 向 USART 端口上发送数据更新子程序 - “USART_TXD_Data”
;*
;* 说明:
;*   本子程序用于更新向 USART 端口上上发送数据,本子程序中包含有数据循环
;* 冗余检测校验子程序。
;*   本子程序要在主程序中不间断循环查询运行。
;*
;* SRAM 中标志字节用法:
;*   入口标志:本子程序将检查这个标志,只有这个标志置值后才允许更新数据。
;*               允许更新发送数据(DataUPD_TXALW)= $c0(DataUPD_TALWI)
;*   出口标志:更新发送数据操作得到执行后,将对下面这个标志置值。
;*               允许更新发送数据(DataUPD_TXALW)= $00
;*
;*******************************************************************************
USART_TXD_Data:
    lds ZL,DataUPD_TXALW            ;检查是否允许更新发送数据?
    cpi ZL,DataUPD_TALWI              ;是,则继续
    brne USART_TXD_Data_RET           ;否,直接返回
    lds ZL,USARTAI_TXEnd            ;发送作业是否全部结束?
    cpi ZL,USARTAI_TEndI              ;是,继续
    brne USART_TXD_Data_RET           ;否,返回,等待发送作业结束
    rcall USART_TX_COMM_AskTX       ;发送“向对方请求发送”命令
    rcall USART_TXData_Process      ;调用更新发送数据子程序
USART_TXD_Data_Check:
    lds ZL,USARTAI_TXDAA            ;取发送的数据长度值
    adiw ZL,$03                       ;发送的总长度=发送的数据长度值+
    sts USARTAI_TXDAA,ZL              ;1 个长度字符字节+ 2 个校验字节
     MOV  USARTAI_TEMP2,ZL
    ldi ZL,Low(USARTAI_TXDAA-2)     ;发送数据的校验字节在发送数据序列
    ldi ZH,High(USARTAI_TXDAA-2)      ;尾部后两个字节
    clr USARTAI_TEMP
    add ZL,USARTAI_TEMP2            ;Z 指针指向发送数据的校验字节
    adc ZH,USARTAI_TEMP
    clr USARTAI_TEMP
    st Z+,USARTAI_TEMP              ;清除发送数据的尾部后两个字节
    st Z+,USARTAI_TEMP                ;的校验字节值

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


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

上一篇:makefile文件讲解

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