com ZH ;注:仅只改变T/C中断屏蔽寄存
in ZL,TIMSK ;器中的此项设置,对于其他T/C
and ZL,ZH ;中断状态保留原来设置
out TIMSK,ZL
in USARTAI_TEMP,UDR ;读 USART 数据寄存器使 RXC 标志清除,
;以结束本次 USART 接收结束中断处理
ldi ZL,USARTAI_RUPDI ;置接收作业己更新标志值
sts USARTAI_RXUPD,ZL
rjmp USART_RXCINT_RET ;转到中断返回
USART_RXCINT_First:
clr ZL ;清除接收作业全部结束标志
sts USARTAI_RXEnd,ZL
sts USARTAI_T0VNum,ZL ;定时器/计数器0溢出次数清 0
in ZL,TIFR ;清除T/C0计数溢出标志
ori ZL,(1<<TOV0) ;注:仅只清除T/C中断标志寄存
out TIFR,ZL ;器中的此项标志,对于其他T/C
;中断标志保留原来状态
ldi ZL,USARTAI_T0CNTI ;置T/C0定时参数的预定计数比例值
out TCNT0,ZL
in ZL,TIMSK ;使能T/C0计数溢出中断
ori ZL,(1<<TOIE0) ;注:仅只改变T/C中断屏蔽寄存
out TIMSK,ZL ;器中的此项设置,对于其他T/C
;中断状态保留原来设置
ldi ZL,(1<<CS00)|(0<<CS01)|(1<<CS02)
out TCCR0,ZL ;按CK÷1024 预分频因子启动T/C0
lds ZL,USARTAI_RXCOM ;接收作业是否为接收命令
cpi ZL,USARTAI_RCOMI ;否,则为接收数据
breq USART_RXCINT_FCOMM ;是,就转至接收命令处理
USART_RXCINT_FData:
ldi ZL,Low(USARTAI_RXDAA) ;置接收作业地址指针为
ldi ZH,High(USARTAI_RXDAA) ;首个接收数据地址指针
in USARTAI_TEMP,UDR ;从 USART 数据寄存器取出接收数据
st Z,USARTAI_TEMP ;存储进 SRAM 中
adiw ZL,$01 ;接收作业地址指针 + 1
sts USARTAI_RXAPL,ZL ;存储回 SRAM 中
sts USARTAI_RXAPH,ZH
MOV USARTAI_RXNum,USARTAI_TEMP ;置接收作业次数计数器初值
dec USARTAI_RXNum ;接收作业次数-1
rjmp USART_RXCINT_RET ;转到中断返回
USART_RXCINT_FCOMM:
ldi ZL,Low(USARTAI_RXCOA) ;置接收作业地址指针为
ldi ZH,High(USARTAI_RXCOA) ;首个接收命令地址指针
in USARTAI_TEMP,UDR ;从 USART 数据寄存器取出接收数据
st Z,USARTAI_TEMP ;存储进 SRAM 中
adiw ZL,$01 ;接收作业地址指针 + 1
sts USARTAI_RXAPL,ZL ;存储回 SRAM 中
sts USARTAI_RXAPH,ZH
ldi USARTAI_TEMP,(USARTAI_CMATNI-1)
;置接收作业次数计数器初值,
MOV USARTAI_RXNum,USARTAI_TEMP ;第一个命令的字符串己接收
USART_RXCINT_RET:
pop USARTAI_TEMP ;弹出堆栈中的标志值到状态寄存器
out SREG,USARTAI_TEMP
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
本文关键字:通信 程序 AVR单片机,单片机-工控设备 - AVR单片机