📄 usart.lis
字号:
.module usart.c
.area data(ram, con, rel)
0000 _temprecv::
0000 .blkb 1
.area idata
0000 F0 .byte 240
.area data(ram, con, rel)
0001 .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
0001 .dbsym e temprecv _temprecv c
.area vector(rom, abs)
.org 22
0016 00C0 rjmp _uart0_rx_isr
.area data(ram, con, rel)
0001 .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
.area text(rom, con, rel)
0000 .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
0000 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
0000 _uart0_rx_isr::
0000 2A92 st -y,R2
0002 2FB6 in R2,0x3f
0004 2A92 st -y,R2
0006 .dbline -1
0006 .dbline 33
0006 ; //******************************************************************************
0006 ; // *
0006 ; // FileName : 实验板uart.c ICCAVR V6.31A编译 *
0006 ; // Function : uart应用练习 ,回送PC发送的数据,从而双向通讯。 *
0006 ; // Date : 2006-05-07 *
0006 ; // Version : 1.0 *
0006 ; // *
0006 ; // Author : 开关电源 hongtusy@163.com *
0006 ; // Company : 电子信息技术咨询网 http://www.itsn.cn *
0006 ; // *
0006 ; //***************************描述与记事*****************************************
0006 ; //实验板的AVR程序,uart应用,和计算机通讯,回送PC发送的数据
0006 ; //接线定义:PD0-RXD PD1-TXD 开关位置:SW6-7/8打开。
0006 ; //使用串口调试器,使用十六进制方式,首先让PC发送一个字符给MCU,然后将接收到MCU返回的值。
0006 ; //记事:本程序旨在对uart的理解与演示,程序适合初学者使用.
0006 ; //使用片外8MHz晶体,9600bps波特率
0006 ; //******************************************************************************
0006 ;
0006 ; #include <iom16v.h> //头文件,ATmega8535单片机的寄存器定义
0006 ; #include <macros.h> //包含有SEI()、CLI()、NOP()、WDR()、等宏定义.
0006 ;
0006 ; typedef unsigned char uchar; //数据类型说明,无符号整型,两字节大小。
0006 ; typedef unsigned int uint; //数据类型说明,无符号字符型,单字节大小。
0006 ;
0006 ; #define BAUDRATE 9600 //波特率
0006 ; #define F_CPU 8000000 //系统晶体频率
0006 ; uchar temprecv=0xf0,tempsend;
0006 ; /*========*/
0006 ;
0006 ; #pragma interrupt_handler uart0_rx_isr: 12
0006 ;
0006 ; void uart0_rx_isr(void)
0006 ; {
0006 .dbline 35
0006 ;
0006 ; temprecv=UDR;
0006 2CB0 in R2,0xc
0008 20920000 sts _temprecv,R2
000C .dbline 37
000C ; //while(!(UCSRA&(1<<UDRE)));
000C ; UDR = temprecv;
000C 2CB8 out 0xc,R2
000E .dbline -2
000E L1:
000E 2990 ld R2,y+
0010 2FBE out 0x3f,R2
0012 2990 ld R2,y+
0014 .dbline 0 ; func end
0014 1895 reti
0016 .dbend
0016 .dbfunc e DelaymS _DelaymS fV
0016 ; j -> R20
0016 ; i -> R16,R17
.even
0016 _DelaymS::
0016 00D0 rcall push_gset1
0018 .dbline -1
0018 .dbline 48
0018 ;
0018 ; }
0018 ; /************************************************
0018 ; 函 数 名: DelaymS()
0018 ; 功 能: 毫秒级延时函数
0018 ; 输入参数: 延迟时间/系统晶体
0018 ; 输出参数: 做相应的延迟处理
0018 ; 描 述: /
0018 ; ***********************************************/
0018 ; void DelaymS (uint i) //延时函数,参数i为延时时间
0018 ; {
0018 .dbline 50
0018 ; uchar j; //双重延时
0018 ; for (;i!=0;i--)
0018 07C0 rjmp L6
001A L3:
001A .dbline 51
001A ; {
001A .dbline 52
001A 4EE1 ldi R20,30
001C 01C0 rjmp L10
001E L7:
001E .dbline 52
001E L8:
001E .dbline 52
001E 4A95 dec R20
0020 L10:
0020 .dbline 52
0020 4423 tst R20
0022 E9F7 brne L7
0024 .dbline 53
0024 L4:
0024 .dbline 50
0024 0150 subi R16,1
0026 1040 sbci R17,0
0028 L6:
0028 .dbline 50
0028 0030 cpi R16,0
002A 0107 cpc R16,R17
002C B1F7 brne L3
002E X0:
002E .dbline -2
002E L2:
002E 00D0 rcall pop_gset1
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r j 20 c
0032 .dbsym r i 16 i
0032 .dbend
0032 .dbfunc e usart_Init _usart_Init fV
.even
0032 _usart_Init::
0032 .dbline -1
0032 .dbline 63
0032 ; for (j=30;j!=0;j--);
0032 ; }
0032 ; }
0032 ; /********************************************************
0032 ; 子程序名: usart_Init()
0032 ; 功 能: 串口初始化
0032 ; 输入参数: /
0032 ; 输出参数: /
0032 ; 描 述: /
0032 ; ********************************************************/
0032 ; void usart_Init (void)
0032 ; {
0032 .dbline 64
0032 ; CLI(); //关闭中断
0032 F894 cli
0034 .dbline 65
0034 ; UBRRL= (F_CPU/BAUDRATE/16-1)%256;
0034 83E3 ldi R24,51
0036 89B9 out 0x9,R24
0038 .dbline 66
0038 ; UBRRH= (F_CPU/BAUDRATE/16-1)/256;
0038 2224 clr R2
003A 20BC out 0x20,R2
003C .dbline 68
003C ; //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
003C ; UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //接收结束中断使能,RXD&TXD使能
003C 88E9 ldi R24,152
003E 8AB9 out 0xa,R24
0040 .dbline 69
0040 ; UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
0040 86EA ldi R24,166
0042 80BD out 0x20,R24
0044 .dbline 71
0044 ; //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位,
0044 ; SREG = 0b10000000;
0044 80E8 ldi R24,128
0046 8FBF out 0x3f,R24
0048 .dbline -2
0048 L11:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
004A .dbfunc e main _main fV
004A ; temp -> R20
.even
004A _main::
004A .dbline -1
004A .dbline 77
004A ; //TIMSK =0X00;
004A ; //SEI(); //开全局中断使能
004A ; }
004A ; //*****************主程序**********************************
004A ; void main (void)
004A ; {
004A .dbline 78
004A ; uchar temp=0xff;
004A 4FEF ldi R20,255
004C .dbline 79
004C ; usart_Init(); //串口初始化
004C F2DF rcall _usart_Init
004E 0BC0 rjmp L14
0050 L13:
0050 .dbline 81
0050 ; while(1) //无限循环执行
0050 ; {
0050 .dbline 86
0050 ; //if (UCSRA & (1<<RXC)) //等待接收完成,
0050 ; //{
0050 ; // temp = UDR; //将接收到的数据暂存
0050 ; //while(!(UCSRA&(1<<UDRE)));
0050 ; if(temp!=temprecv)
0050 20900000 lds R2,_temprecv
0054 4215 cp R20,R2
0056 29F0 breq L16
0058 .dbline 87
0058 ; {
0058 L18:
0058 .dbline 88
0058 L19:
0058 .dbline 88
0058 ; while(!(UCSRA&(1<<UDRE)));
0058 5D9B sbis 0xb,5
005A FECF rjmp L18
005C .dbline 89
005C ; UDR = temprecv; //将接收到的数据发送出去
005C 20900000 lds R2,_temprecv
0060 2CB8 out 0xc,R2
0062 .dbline 90
0062 ; }
0062 L16:
0062 .dbline 92
0062 40910000 lds R20,_temprecv
0066 .dbline 94
0066 L14:
0066 .dbline 80
0066 F4CF rjmp L13
0068 X1:
0068 .dbline -2
0068 L12:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbsym r temp 20 c
006A .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
0000 _tempsend::
0000 .blkb 1
0001 .dbsym e tempsend _tempsend c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -