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

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

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

上一篇:makefile文件讲解

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