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

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

点击数:7303 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   AVR单片机
    sts USARTAI_RXUPD,ZL
USART_RX_COMM_CTRLCOM_RET:
    ret                             ;子程序返回

;*** 此段程序用于接收到[重新初始化完成]命令处理
USART_RX_COMM_RINIOK:
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
    ret                             ;子程序返回

;*** 此段程序用于接收到[要求对方重新初始化]命令处理
USART_RX_COMM_REPINI:
    ldi ZH,(1<<RXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)
    com ZH                          ;禁止接收器和发送器,禁止 USART 
    in ZL,UCSRB                       ;接收结束中断和数据寄存器空中断
    and ZL,ZH
    out UCSRB,ZL


;此处插入从头开始重新进行数据处理操作程序


    ldi ZH,(1<<FE)|(1<<DOR)|(1<<PE)
    com ZH                          ;清除帧错误(FE)、数据溢出(DOR)
    in ZL,UCSRA                       ;及奇偶校验错误(UPE)标志
    and ZL,ZH
    out UCSRA,ZL
    ldi ZH,(1<<UDRE)
    in ZL,UCSRA                     ;置数据寄存器空(UDRE)标志
    or ZL,ZH
    out UCSRA,ZL
    rcall USART_AINT_INI            ;重新初始化 USART 异步中断接收和发送
    rcall USART_TX_COMM_RINIOK      ;向对方发送“重新初始化完成”命令
    ret                             ;子程序返回

;*** 此段程序用于接收到[向对方请求发送]命令处理
USART_RX_COMM_AskTX:
    lds ZL,DataUPD_RXALW            ;接收数据是否己处理?
    cpi ZL,DataUPD_RALWI              ;是,继续
    breq USART_RX_COMM_AskTX_RET      ;否,返回,等待处理接收数据
    lds ZL,USARTAI_TXEnd            ;发送作业是否全部结束?
    cpi ZL,USARTAI_TEndI              ;是,继续
    brne USART_RX_COMM_AskTX_RET      ;否,返回,等待发送作业结束
    rcall USART_TX_COMM_OKRX        ;向对方发送“允许对方发送”命令
    clr ZL                          ;清除接收命令作业标志
    sts USARTAI_RXCOM,ZL
    ldi ZL,DataUPD_RALWI            ;置允许处理接收数据标志值
    sts DataUPD_RXALW,ZL
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
USART_RX_COMM_AskTX_RET:
    ret                             ;子程序返回

;*** 此段程序用于接收到[允许对方发送]命令处理
USART_RX_COMM_OKRX:
    lds ZL,DataUPD_TXALW            ;发送数据是否己更新?
    cpi ZL,DataUPD_TALWI              ;是,继续
    breq USART_RX_COMM_OKRX_RET       ;否,返回,等待更新发送数据
    lds ZL,USARTAI_TXEnd            ;发送作业是否全部结束?
    cpi ZL,USARTAI_TEndI              ;是,继续
    brne USART_RX_COMM_OKRX_RET       ;否,返回,等待发送作业结束
    clr ZL                          ;清除发送命令作业标志
    sts USARTAI_TXCOM,ZL
    rcall USART_AINT_TXINI          ;启动发送数据
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
USART_RX_COMM_OKRX_RET:
    ret                             ;子程序返回

;*** 此段程序用于接收到[要求对方重新发送]命令处理
USART_RX_COMM_REPTX:
    lds ZL,USARTAI_ERRNum           ;USART 发生收发错误次数是否超过允许次数?
    cpi ZL,USARTAI_ENALWI             ;是,转至 USART 通信发生错误处理
    brlo USART_RX_COMM_REPTX1         ;否,继续
    rcall USART_Error               ;调用 USART 通信发生错误处理程序
    rjmp USART_RX_COMM_REPTX_RET    ;返回

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


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

上一篇:makefile文件讲解

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