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

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

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


;******** 本程序寄存器变量定义:

.def    USARTAI_TEMP   = r16        ;暂存寄存器
.def    USARTAI_TEMP2  = r17        ;暂存寄存器2
.def    USARTAI_TEMP3  = r18        ;暂存寄存器3


;******** 本程序常数定义:

.equ    USARTAI_TCOMI  = $e0        ;发送命令作业标志值(11100000)
.equ    DataUPD_TALWI  = $c0        ;允许更新发送数据标志值(11000000)
.equ    USARTAI_TEndI  = $f0        ;全部数据发送结束标志值(11110000)
.equ    USARTAI_RCOMI  = $07        ;接收命令作业标志值(00000111)
.equ    DataUPD_RALWI  = $03        ;允许处理接收数据标志值(00000011)
.equ    USARTAI_RUPDI  = $0a        ;接收作业己更新标志值(00001010)
.equ    USARTAI_REndI  = $0f        ;全部数据接收结束标志值(00001111)
.equ    USARTAI_ENALWI = $10        ;允许 USART 发生收发错误次数值(16次)
.equ    USARTAI_CMATNI = $0a        ;收发命令的字符串总长度数值(10个)
.equ    USARTAI_CMANI  = $03        ;收发命令的有效字符串长度数值(3个)


;******** 程序指令代码清单:

;*******************************************************************************
;*
;* USART 异步通信中断接收和发送初始化子程序 - “USART_AINT_INI”
;*
;* 说明:
;*   本子程序用于初始化 USART 异步中断接收和发送通信。本初始化子程序只打开了
;* USART 的中断接收功能,没有打开中断发送功能。
;*   本子程序只需在主程序中运行一次即可。除非释放 RXD 与 TXD 引脚功能作为其
;* 他用途,如要再使用 USART 通信则需在主程序中再运行一次本子程序。
;*
;*******************************************************************************

USART_AINT_INI:
    push ZL                         ;压入寄存器中的数值到堆栈
    push ZH
    in ZL,SREG                      ;压状态寄存器中的标志值到堆栈
    push ZL
    ldi ZL,USARTAI_TEndI            ;置发送作业全部结束标志值
    sts USARTAI_TXEnd,ZL
    ldi ZL,USARTAI_TCOMI            ;置发送命令作业标志值,首次发送一定为
    sts USARTAI_TXCOM,ZL              ;请求向对方发送或允许对方发送命令
    clr ZL                          ;清除允许更新发送数据标志
    sts DataUPD_TXALW,ZL
    ldi ZL,USARTAI_REndI            ;置接收作业全部结束标志值
    sts USARTAI_RXEnd,ZL
    ldi ZL,USARTAI_RCOMI            ;置接收命令作业标志值,首次接收一定为
    sts USARTAI_RXCOM,ZL              ;对方请求发送或对方允许发送命令 
    clr ZL                          ;清除接收作业己更新标志
    sts USARTAI_RXUPD,ZL
    clr ZL                          ;清除允许处理接收数据标志
    sts DataUPD_RXALW,ZL
    clr ZL                          ;清除USART 发生收发错误次数计数器值
    sts USARTAI_ERRNum,ZL
    clr ZL                          ;清除定时器/计数器0溢出次数计数器值
    sts USARTAI_T0VNum,ZL
    cli                             ;禁止全局中断
    ldi ZL,USARTAI_UBRRL            ;设置通信波特率
    out UBRRL,ZL
    ldi ZL,USARTAI_UBRRH
    out UBRRH,ZL
    ldi ZL,(1<<URSEL)|(1<<UPM1)|(1<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0)
                                    ;设置帧格式: 8 个数据位, 1 个停止位,
                                      ;并使能奇校验。USART 异步模式
;    ldi ZL,(1<<URSEL)|(1<<UPM1)|(1<<UPM0)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)
                                    ;设置帧格式: 8 个数据位, 2 个停止位,
                                      ;并使能奇校验。USART 异步模式
    out UCSRC,ZL
    ldi ZL,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)
    out UCSRB,ZL                    ;接收器与发送器使能和接收结束中断使能

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


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

上一篇:makefile文件讲解

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