📄 main.lis
字号:
.module main.c
.area lit(rom, con, rel)
0000 _buffer::
0000 687474703A2F2F7777772E6176727669 .byte 'h,'t,'t,'p,58,47,47,'w,'w,'w,46,'a,'v,'r,'v,'i
0010 2E636F6D00 .byte 46,'c,'o,'m,0
0015 .dbfile E:\avr\usart_mega16\main.c
0015 .dbsym e buffer _buffer A[21:21]kc
.area text(rom, con, rel)
0000 .dbfile E:\avr\usart_mega16\main.c
0000 .dbfunc e USART_Init _USART_Init fV
0000 ; tmp -> R10,R11
0000 ; baud -> R10,R11
.even
0000 _USART_Init::
0000 0E940000 xcall push_gset3
0004 5801 movw R10,R16
0006 .dbline -1
0006 .dbline 15
0006 ; // ICC-AVR application builder : 2007-5-20 17:21:25
0006 ; // Target : M16
0006 ; // Crystal: 7.3728Mhz
0006 ; // AVR mega16 串口测试
0006 ;
0006 ; #include <iom16v.h>
0006 ; #include <macros.h>
0006 ;
0006 ; #define F_CPU 7372800
0006 ; const unsigned char buffer[]="http://www.avrvi.com";
0006 ;
0006 ; //下面三个函数直接从数据手册上拷贝过来的
0006 ;
0006 ; void USART_Init( unsigned int baud )
0006 ; {
0006 .dbline 18
0006 ; unsigned int tmp;
0006 ; /* 设置波特率*/
0006 ; tmp= F_CPU/baud/16-1;
0006 1501 movw R2,R10
0008 4424 clr R4
000A 5524 clr R5
000C 40E0 ldi R20,0
000E 50E8 ldi R21,128
0010 60E7 ldi R22,112
0012 70E0 ldi R23,0
0014 5A92 st -y,R5
0016 4A92 st -y,R4
0018 3A92 st -y,R3
001A 2A92 st -y,R2
001C 8A01 movw R16,R20
001E 9B01 movw R18,R22
0020 0E940000 xcall div32s
0024 40E1 ldi R20,16
0026 50E0 ldi R21,0
0028 60E0 ldi R22,0
002A 70E0 ldi R23,0
002C 7A93 st -y,R23
002E 6A93 st -y,R22
0030 5A93 st -y,R21
0032 4A93 st -y,R20
0034 0E940000 xcall div32s
0038 1801 movw R2,R16
003A 2901 movw R4,R18
003C 41E0 ldi R20,1
003E 50E0 ldi R21,0
0040 60E0 ldi R22,0
0042 70E0 ldi R23,0
0044 241A sub R2,R20
0046 350A sbc R3,R21
0048 460A sbc R4,R22
004A 570A sbc R5,R23
004C 5101 movw R10,R2
004E .dbline 19
004E ; UBRRH = (unsigned char)(tmp>>8);
004E 232C mov R2,R3
0050 3324 clr R3
0052 20BC out 0x20,R2
0054 .dbline 20
0054 ; UBRRL = (unsigned char)tmp;
0054 A9B8 out 0x9,R10
0056 .dbline 22
0056 ; /* 接收器与发送器使能*/
0056 ; UCSRB = (1<<RXEN)|(1<<TXEN);
0056 88E1 ldi R24,24
0058 8AB9 out 0xa,R24
005A .dbline 24
005A ; /* 设置帧格式: 8 个数据位, 2 个停止位*/
005A ; UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
005A 8EE8 ldi R24,142
005C 80BD out 0x20,R24
005E .dbline -2
005E L1:
005E 0E940000 xcall pop_gset3
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r tmp 10 i
0064 .dbsym r baud 10 i
0064 .dbend
0064 .dbfunc e uart0_init _uart0_init fV
.even
0064 _uart0_init::
0064 .dbline -1
0064 .dbline 51
0064 ; }
0064 ; /* UMSEL 模式选择
0064 ; 0 异步操作
0064 ; 1 同步操作
0064 ;
0064 ; USBS 停止位位数
0064 ; 0 1
0064 ; 1 2
0064 ;
0064 ; UCSZ2 UCSZ1 UCSZ0 字符长度
0064 ; 0 0 0 5 位
0064 ; 0 0 1 6 位
0064 ; 0 1 0 7 位
0064 ; 0 1 1 8 位
0064 ; 1 0 0 保留
0064 ; 1 0 1 保留
0064 ; 1 1 0 保留
0064 ; 1 1 1 9 位
0064 ; */
0064 ; // ICC 生成的初始化
0064 ; //UART0 initialize
0064 ; // desired baud rate: 9600
0064 ; // actual: baud rate:9600 (0.0%)
0064 ; // char size: 8 bit
0064 ; // parity: Disabled
0064 ; void uart0_init(void)
0064 ; {
0064 .dbline 52
0064 ; UCSRB = 0x00; //disable while setting baud rate
0064 2224 clr R2
0066 2AB8 out 0xa,R2
0068 .dbline 53
0068 ; UCSRA = 0x00;
0068 2BB8 out 0xb,R2
006A .dbline 54
006A ; UCSRC = BIT(URSEL) | 0x06;
006A 86E8 ldi R24,134
006C 80BD out 0x20,R24
006E .dbline 55
006E ; UBRRL = 0x2F; //set baud rate lo
006E 8FE2 ldi R24,47
0070 89B9 out 0x9,R24
0072 .dbline 56
0072 ; UBRRH = 0x00; //set baud rate hi
0072 20BC out 0x20,R2
0074 .dbline 57
0074 ; UCSRB = 0x18;
0074 88E1 ldi R24,24
0076 8AB9 out 0xa,R24
0078 .dbline -2
0078 L2:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbend
007A .dbfunc e USART_Transmit _USART_Transmit fV
007A ; data -> R16
.even
007A _USART_Transmit::
007A .dbline -1
007A .dbline 62
007A ; }
007A ;
007A ; // 数据发送【发送5 到8 位数据位的帧】
007A ; void USART_Transmit( unsigned char data )
007A ; {
007A L4:
007A .dbline 65
007A L5:
007A .dbline 64
007A ; /* 等待发送缓冲器为空 */
007A ; while ( !( UCSRA & (1<<UDRE)) )
007A 5D9B sbis 0xb,5
007C FECF rjmp L4
007E .dbline 67
007E ; ;
007E ; /* 将数据放入缓冲器,发送数据 */
007E ; UDR = data;
007E 0CB9 out 0xc,R16
0080 .dbline -2
0080 L3:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r data 16 c
0082 .dbend
0082 .dbfunc e USART_Receive _USART_Receive fc
.even
0082 _USART_Receive::
0082 .dbline -1
0082 .dbline 73
0082 ; }
0082 ;
0082 ;
0082 ; // 数据接收【以5 到8 个数据位的方式接收数 据帧】
0082 ; unsigned char USART_Receive( void )
0082 ; {
0082 L8:
0082 .dbline 76
0082 L9:
0082 .dbline 75
0082 ; /* 等待接收数据*/
0082 ; while ( !(UCSRA & (1<<RXC)) )
0082 5F9B sbis 0xb,7
0084 FECF rjmp L8
0086 .dbline 78
0086 ; ;
0086 ; /* 从缓冲器中获取并返回数据*/
0086 ; return UDR;
0086 0CB1 in R16,0xc
0088 .dbline -2
0088 L7:
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbend
008A .dbfunc e USART_Transmit_2 _USART_Transmit_2 fV
.even
008A _USART_Transmit_2::
008A .dbline -1
008A .dbline 83
008A ; }
008A ;
008A ; //连续发送字符
008A ; void USART_Transmit_2( void )
008A ; {
008A L12:
008A .dbline 85
008A L13:
008A .dbline 84
008A ; while ( !( UCSRA & (1<<UDRE)) )
008A 5D9B sbis 0xb,5
008C FECF rjmp L12
008E .dbline 86
008E ; ;
008E ; UDR = 'H';
008E 88E4 ldi R24,72
0090 8CB9 out 0xc,R24
0092 L15:
0092 .dbline 88
0092 L16:
0092 .dbline 87
0092 ; while ( !( UCSRA & (1<<UDRE)) )
0092 5D9B sbis 0xb,5
0094 FECF rjmp L15
0096 .dbline 89
0096 ; ;
0096 ; UDR = 'e';
0096 85E6 ldi R24,101
0098 8CB9 out 0xc,R24
009A L18:
009A .dbline 91
009A L19:
009A .dbline 90
009A ; while ( !( UCSRA & (1<<UDRE)) )
009A 5D9B sbis 0xb,5
009C FECF rjmp L18
009E .dbline 92
009E ; ;
009E ; UDR = 'l';
009E 8CE6 ldi R24,108
00A0 8CB9 out 0xc,R24
00A2 L21:
00A2 .dbline 94
00A2 L22:
00A2 .dbline 93
00A2 ; while ( !( UCSRA & (1<<UDRE)) )
00A2 5D9B sbis 0xb,5
00A4 FECF rjmp L21
00A6 .dbline 95
00A6 ; ;
00A6 ; UDR = 'l';
00A6 8CE6 ldi R24,108
00A8 8CB9 out 0xc,R24
00AA L24:
00AA .dbline 97
00AA L25:
00AA .dbline 96
00AA ; while ( !( UCSRA & (1<<UDRE)) )
00AA 5D9B sbis 0xb,5
00AC FECF rjmp L24
00AE .dbline 98
00AE ; ;
00AE ; UDR = 'o';
00AE 8FE6 ldi R24,111
00B0 8CB9 out 0xc,R24
00B2 .dbline -2
00B2 L11:
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbend
00B4 .dbfunc e main _main fV
00B4 ; tmp -> R20
00B4 ; i -> R22
.even
00B4 _main::
00B4 .dbline -1
00B4 .dbline 103
00B4 ; }
00B4 ;
00B4 ;
00B4 ; void main(void)
00B4 ; {
00B4 .dbline 104
00B4 ; unsigned char i=0,tmp=0;
00B4 6627 clr R22
00B6 .dbline 104
00B6 4427 clr R20
00B8 .dbline 106
00B8 ;
00B8 ; USART_Init(9600); //波特率9600 初始化串口
00B8 00E8 ldi R16,9600
00BA 15E2 ldi R17,37
00BC A1DF xcall _USART_Init
00BE .dbline 109
00BE ; // uart0_init();
00BE ;
00BE ; for(i=0;i<20;i++) //发送数组里面的字符串
00BE 09C0 xjmp L31
00C0 L28:
00C0 .dbline 110
00C0 .dbline 111
00C0 80E0 ldi R24,<_buffer
00C2 90E0 ldi R25,>_buffer
00C4 E62F mov R30,R22
00C6 FF27 clr R31
00C8 E80F add R30,R24
00CA F91F adc R31,R25
00CC 0491 lpm R16,Z
00CE D5DF xcall _USART_Transmit
00D0 .dbline 112
00D0 L29:
00D0 .dbline 109
00D0 6395 inc R22
00D2 L31:
00D2 .dbline 109
00D2 6431 cpi R22,20
00D4 A8F3 brlo L28
00D6 .dbline 114
00D6 ; {
00D6 ; USART_Transmit(buffer[i]);
00D6 ; }
00D6 ;
00D6 ; USART_Transmit(0x0d); //发送一个回车
00D6 0DE0 ldi R16,13
00D8 D0DF xcall _USART_Transmit
00DA .dbline 115
00DA ; USART_Transmit(0x0a); //发送一个换行
00DA 0AE0 ldi R16,10
00DC CEDF xcall _USART_Transmit
00DE 0EC0 xjmp L33
00E0 L32:
00E0 .dbline 118
00E0 ;
00E0 ; while(1)
00E0 ; {
00E0 .dbline 119
00E0 ; if(UCSRA&(1<<RXC)) //如果接收缓存区有数据
00E0 5F9B sbis 0xb,7
00E2 0CC0 rjmp L35
00E4 .dbline 120
00E4 ; {
00E4 .dbline 121
00E4 ; tmp=USART_Receive(); //接收数据
00E4 CEDF xcall _USART_Receive
00E6 402F mov R20,R16
00E8 .dbline 122
00E8 ; USART_Transmit(tmp); //发送数据
00E8 C8DF xcall _USART_Transmit
00EA .dbline 124
00EA ;
00EA ; if(tmp=='a') //对接收到的数据进行,如果是a,再发一个OK回来
00EA 4136 cpi R20,97
00EC 21F4 brne L37
00EE .dbline 125
00EE ; {
00EE .dbline 126
00EE ; USART_Transmit('O');
00EE 0FE4 ldi R16,79
00F0 C4DF xcall _USART_Transmit
00F2 .dbline 127
00F2 ; USART_Transmit('K');
00F2 0BE4 ldi R16,75
00F4 C2DF xcall _USART_Transmit
00F6 .dbline 128
00F6 ; }
00F6 L37:
00F6 .dbline 129
00F6 ; if(tmp=='A')
00F6 4134 cpi R20,65
00F8 09F4 brne L39
00FA .dbline 130
00FA ; {
00FA .dbline 131
00FA ; USART_Transmit_2();
00FA C7DF xcall _USART_Transmit_2
00FC .dbline 132
00FC ; }
00FC L39:
00FC .dbline 133
00FC ; }
00FC L35:
00FC .dbline 134
00FC L33:
00FC .dbline 117
00FC F1CF xjmp L32
00FE X0:
00FE .dbline -2
00FE L27:
00FE .dbline 0 ; func end
00FE 0895 ret
0100 .dbsym r tmp 20 c
0100 .dbsym r i 22 c
0100 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -