;*******************************************************************************
;*
;* 接收数据正确命令字符串 - “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单片机