pop ZH ;弹出堆栈中的数值到寄存器
pop ZL
pop USARTAI_TEMP
reti ;中断返回
;*******************************************************************************
;*
;* USART 异步通信数据寄存器空中断发送处理子程序 - “USART_TXDREINT”
;*
;* 说明:
;* 本子程序用于 USART 异步通信数据寄存器空中断发送处理。
;*
;* 注意:
;* 发送作业全部结束后,将禁止 USART 数据寄存器空中断操作。
;*
;* SRAM 中标志字节用法:
;* 入口标志:本子程序将检查这些标志,依据这些标志置值来控制不同发送作业。
;* r6 --- 发送作业次数(USARTAI_TXNum)
;* 出口标志:发送作业全部正确发送完成后,将对下面这两个标志置值。
;* 发送作业全部结束(USARTAI_TXEnd)= $f0(USARTAI_TEndI)
;* r6 --- 发送作业次数(USARTAI_TXNum) = $00
;*
;*******************************************************************************
USART_TXDREINT:
push USARTAI_TEMP ;压入寄存器中的数值到堆栈
push ZL
push ZH
in USARTAI_TEMP,SREG ;压状态寄存器中的标志值到堆栈
push USARTAI_TEMP
lds ZL,USARTAI_TXAPL ;置发送作业地址指针
lds ZH,USARTAI_TXAPH
ld USARTAI_TEMP,Z ;从 SRAM 中取出发送字节,
out UDR,USARTAI_TEMP ;送入 USART 数据寄存器
adiw ZL,$01 ;发送作业地址指针 + 1
sts USARTAI_TXAPL,ZL ;存储回 SRAM 中
sts USARTAI_TXAPH,ZH
dec USARTAI_TXNum ;发送作业全部完毕否?
brne USART_TXDREINT1 ;否,转到中断返回
ldi USARTAI_TEMP,USARTAI_TEndI ;置发送作业全部结束标志值
sts USARTAI_TXEnd,USARTAI_TEMP
cbi UCSRB,UDRIE ;禁止 USART 数据寄存器空中断
USART_TXDREINT1:
pop USARTAI_TEMP ;弹出堆栈中的标志值到状态寄存器
out SREG,USARTAI_TEMP
pop ZH ;弹出堆栈中的数值到寄存器
pop ZL
pop USARTAI_TEMP
reti ;中断返回
;*******************************************************************************
;*
;* USART 异步通信数据寄存器空中断发送处理初始化子程序 - “USART_AINT_TXINI”
;*
;* 说明:
;* 本子程序用于初始化 USART 异步通信数据寄存器空中断发送处理。
;*
;* 注意:
;* 1.在运行本程序前必须先运行“USART_AINT_INI”子程序。
;* 2.在运行本程序前必须先将要发送的数据块复制到 SRAM 相应的存储区中。
;* 3.本子程序运行后,将立即启动数据寄存器空中断,进行发送作业。
;*
;* SRAM 中标志字节用法:
;* 入口标志:本子程序将检查这些标志,依据这些标志置值来控制不同发送作业。
;* 发送命令作业(USARTAI_TXCOM) = $e0(USARTAI_TCOMI)
;* 出口标志:本子程序运行后,将对下面这两个标志置值。
;* 发送作业全部结束(USARTAI_TXEnd)= $00
;* r6 --- 发送作业次数(USARTAI_TXNum) = 发送的首个字节
;*
;*******************************************************************************
USART_AINT_TXINI:
clr ZL ;清除全部数据发送结束标志
sts USARTAI_TXEnd,ZL
lds ZL,USARTAI_TXCOM ;发送任务是否为发送命令
cpi ZL,USARTAI_TCOMI ;否,则为发送数据
breq USART_AINT_TXINI1 ;是,就转至发送命令处理
ldi ZL,Low(USARTAI_TXDAA) ;置首个发送地址指针为发送数据初值
ldi ZH,High(USARTAI_TXDAA) ;发送的首个数据为本次发送作业次数
sts USARTAI_TXAPL,ZL
sts USARTAI_TXAPH,ZH
ld USARTAI_TXNum,Z ;置发送作业次数计数器初值
rjmp USART_AINT_TXINI2
USART_AINT_TXINI1:
ldi ZL,Low(USARTAI_TXCOA) ;置首个发送地址指针为发送命令初值
ldi ZH,High(USARTAI_TXCOA) ;发送的首个命令为本次发送作业次数
sts USARTAI_TXAPL,ZL
sts USARTAI_TXAPH,ZH
ldi USARTAI_TEMP,USARTAI_CMATNI ;置发送作业次数计数器初值
MOV USARTAI_TXNum,USARTAI_TEMP ;注:发送命令作业为固定次数
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
本文关键字:通信 程序 AVR单片机,单片机-工控设备 - AVR单片机