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

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

点击数:7303 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   AVR单片机

;*******************************************************************************
;*
;* 接收数据正确命令字符串 - “USART_DataOK”
;*
;*******************************************************************************
USART_DataOK:
.DB "OKD"                           ;接收数据正确命令字符串(OKD)

;*******************************************************************************
;*
;* 要求对方发送指定数据的命令字符串 - “USART_DCOMTX”
;*
;*******************************************************************************
USART_DCOMTX:
.DB "STD"                           ;要求对方发送指定数据的命令字符串(STD)

;*******************************************************************************
;*
;* 要求对方重新初始化 USART 端口状态命令字符串 - “USART_REPINI”
;*
;*******************************************************************************
USART_REPINI:
.DB "RII"                           ;要求对方重新初始化状态命令字符串(RII)

;*******************************************************************************
;*
;* 重新初始化 USART 端口状态完成命令字符串 - “USART_RINIOK”
;*
;*******************************************************************************
USART_RINIOK:
.DB "YRI"                           ;重新初始化状态完成命令字符串(YRI)

;*******************************************************************************
;*
;* 从 USART 端口传送控制操作指令命令字符串 - “USART_CTRLCOM”
;*
;*******************************************************************************
USART_CTRLCOM:
.DB "CIT"                           ;从端口传送控制操作指令命令字符串(CIT)


;*******************************************************************************
;*
;*  USART 异步通信中断接收与发送协议命令和数据处理子程序 - “USART_INT_ACOM”
;*
;* 说明:
;*   本子程序用于 USART 异步通信中断接收与发送协议命令和数据处理。
;*   本子程序要在主程序中不间断地循环运行。
;*
;*******************************************************************************
USART_INT_ACOM:
    in ZL,SREG                      ;压状态寄存器中的标志值到堆栈
    push ZL
    call USART_RXD_COMM             ;接收通信协议命令处理程序
    call USART_RXD_Data             ;调用接收数据处理程序
    call USART_TXD_Data             ;调用更新发送数据程序
    pop ZL                          ;弹出堆栈中的标志值到状态寄存器
    out SREG,ZL
    ret                             ;子程序返回


;*******************************************************************************
;*
;* 定时器/计数器0溢出中断处理子程序 - “TC0_Timer_OVFINT”
;*
;* 说明:
;*   本子程序用于约束接收作业全部完成(指从接收第一个数据到最后一个数据之间)
;* 的时间范围,如果在规定的时间内没有接收作业全部完成,则强制结束此次接收作业,
;* 以便下次接收作业正确操作。此程序主要用于检查第一个的数据长度字节的数值与所接
;* 收到的数据帧数是否匹配,避免由于不匹配而产生的错误死循环。也用于接收端受干扰
;* 后能够及时恢复正确操作接收作业标志值。
;*
;* 注意:
;*   本子程序在多次执行到T/C0计数溢出次数超出设置数值后,将禁止定时器/计
;* 数器0溢出中断。
;*
;* SRAM 中标志字节用法:
;*   出口标志:
;*             接收作业己更新(USARTAI_RXUPD)  = $0a(USARTAI_RUPDI)
;*
;*******************************************************************************
TC0_Timer_OVFINT:
    push ZL                         ;压入寄存器中的数值到堆栈
    push ZH
    in ZL,SREG                      ;压状态寄存器中的标志值到堆栈
    push ZL
    ldi ZL,USARTAI_T0CNTI           ;置T/C0定时参数的预定计数比例值
    out TCNT0,ZL
    lds ZL,USARTAI_T0VNum           ;检查T/C0计数溢出次数是否超出设置值?
    cpi ZL,USARTAI_T0NumI             ;是,执行超出次数处理操作
    brlo TC0_Timer_OVFINT1            ;否,转至继续
    ldi ZL,USARTAI_RUPDI            ;置接收作业己更新标志值
    sts USARTAI_RXUPD,ZL
    ldi ZH,(1<<TOIE0)               ;禁止T/C0计数溢出中断
    com ZH                            ;注:仅只改变T/C中断屏蔽寄存
    in ZL,TIMSK                       ;器中的此项设置,对于其他T/C
    and ZL,ZH                         ;中断状态保留原来设置
    out TIMSK,ZL
    rjmp TC0_Timer_OVFINT_RET       ;返回
TC0_Timer_OVFINT1:
    inc ZL                          ;T/C0计数溢出次数 + 1

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


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

上一篇:makefile文件讲解

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