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

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

点击数:7303 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   AVR单片机
    ldi ZL,Low(USARTAI_TXDAA)       ;Z 指针指向发送数据首个字节
    ldi ZH,High(USARTAI_TXDAA)
    lds DCRC2B_DLength,USARTAI_TXDAA;置校验的数据长度初值
    call DataCheck_CRC2B            ;生成发送数据序列的 CRC 码
    clr ZL                          ;清除允许更新发送数据标志
    sts DataUPD_TXALW,ZL
USART_TXD_Data_RET:
    ret                             ;子程序返回

;*** 此段程序用于向 USART 端口上发送数据的更新操作
USART_TXData_Process:


;此处插入更新发送数据程序


; 此段程序为示例数据的更新操作
     MOV  USARTAI_TEMP,r3
    ldi USARTAI_TEMP2,$fc
    sts USARTAI_TXDAA,USARTAI_TEMP2
    ldi YL,Low(USARTAI_TXDAA+1)       ;置接收作业地址指针为
    ldi YH,High(USARTAI_TXDAA+1)        ;首个接收数据地址指针
USART_TXData_Process1:
    st Y+,USARTAI_TEMP
    inc USARTAI_TEMP
    dec USARTAI_TEMP2
    brne USART_TXData_Process1
    inc r3
; 示例程序结束

    ret                             ;子程序返回


;*******************************************************************************
;*
;*  USART 通信发生错误处理子程序 - “USART_Error”
;*
;* 说明:
;*   本子程序用于当 USART 通信发生错误时的处理。
;*
;*******************************************************************************
USART_Error:
    push ZL                         ;压入寄存器中的数值到堆栈
    push ZH
    in ZL,SREG                      ;压状态寄存器中的标志值到堆栈
    push ZL
    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
    call USART_AINT_INI             ;重新初始化 USART 异步中断接收和发送
    call USART_TX_COMM_REPINI       ;向对方发送“要求其重新初始化”命令
USART_Error_RET:
    pop ZL
    out SREG,ZL                     ;弹出堆栈中的标志值到状态寄存器
    pop ZH                          ;弹出堆栈中的数值到寄存器
    pop ZL
    ret                             ;子程序返回


;*******************************************************************************
;*
;* 所有通信协议命令开头标识字符串 - “COMAgreement_Head”
;*
;*******************************************************************************
COMAgreement_Head:
.DB $03,"COM"                       ;通信协议命令开头标识字符(COM)
;   │   │
;   │   通信协议命令开头标识字符(COM)
;   本指令字符串字符长度数值(不包括自已在内共 3 个字符)


;*******************************************************************************
;*
;* 向对方请求发送命令字符串 - “USART_AskTX”
;*
;*******************************************************************************
USART_AskTX:
.DB "ATX"                           ;向对方请求发送命令字符串(ATX)

;*******************************************************************************
;*
;* 允许对方发送命令字符串 - “USART_OKRX”
;*
;*******************************************************************************
USART_OKRX:
.DB "YET"                           ;允许对方发送命令字符串(YET)

;*******************************************************************************
;*
;* 要求对方重新发送命令字符串 - “USART_REPTX”
;*
;*******************************************************************************
USART_REPTX:
.DB "RPT"                           ;要求对方重新发送命令字符串(RPT)

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


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

上一篇:makefile文件讲解

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