📄 lesson1.lis
字号:
.module lesson1.c
.area vector(rom, abs)
.org 120
0078 0C945D00 jmp _uart_rx
.area data(ram, con, rel)
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\icc\examples.avr\lesson1\lesson1.c
0001 .dbsym e flag _flag c
.area text(rom, con, rel)
0000 .dbfile C:\icc\examples.avr\lesson1\lesson1.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 10
0004 ; #include <iom128v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; #define mclk 7372800
0004 ; #pragma interrupt_handler uart_rx:31
0004 ; uchar rdata,flag=0;
0004 ; void delay(uint ms)
0004 ; {
0004 .dbline 12
0004 ; uint i,j;
0004 ; for(i=0;i<ms;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 13
000A ; {
000A .dbline 14
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 14
0010 L7:
0010 .dbline 14
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 14
0014 6233 cpi R22,50
0016 E2E0 ldi R30,2
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C .dbline 15
001C L3:
001C .dbline 12
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 12
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 .dbline -2
0026 L1:
0026 0E940000 xcall pop_gset2
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r i 20 i
002C .dbsym r j 22 i
002C .dbsym r ms 16 i
002C .dbend
002C .dbfunc e init_port _init_port fV
.even
002C _init_port::
002C .dbline -1
002C .dbline 19
002C ; for(j=0;j<562;j++);
002C ; }
002C ; }
002C ; void init_port();
002C ; void init_port()
002C ; {
002C .dbline 20
002C ; DDRB=DDRB|BIT(7);
002C BF9A sbi 0x17,7
002E .dbline 21
002E ; PORTB=PORTB|BIT(7);
002E C79A sbi 0x18,7
0030 .dbline -2
0030 L10:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbend
0032 .dbfunc e uart_init _uart_init fV
0032 ; baud -> R10,R11
.even
0032 _uart_init::
0032 0E940000 xcall push_gset3
0036 5801 movw R10,R16
0038 .dbline -1
0038 .dbline 25
0038 ;
0038 ; }
0038 ; void uart_init(uint baud)
0038 ; {
0038 .dbline 26
0038 ; UCSR1B=0x00;
0038 2224 clr R2
003A 20929A00 sts 154,R2
003E .dbline 27
003E ; UCSR1A=0x00; //控制寄存器清零
003E 20929B00 sts 155,R2
0042 .dbline 28
0042 ; UCSR1C=(0<<UPM10)|(3<<UCSZ10);
0042 86E0 ldi R24,6
0044 80939D00 sts 157,R24
0048 .dbline 31
0048 ; //选择UCSRC,异步模式,禁止
0048 ; // 校验,1位停止位,8位数据位
0048 ; baud=mclk/16/baud-1 ; //波特率最大为65K
0048 1501 movw R2,R10
004A 4424 clr R4
004C 5524 clr R5
004E 40E0 ldi R20,0
0050 58E0 ldi R21,8
0052 67E0 ldi R22,7
0054 70E0 ldi R23,0
0056 5A92 st -y,R5
0058 4A92 st -y,R4
005A 3A92 st -y,R3
005C 2A92 st -y,R2
005E 8A01 movw R16,R20
0060 9B01 movw R18,R22
0062 0E940000 xcall div32s
0066 41E0 ldi R20,1
0068 50E0 ldi R21,0
006A 60E0 ldi R22,0
006C 70E0 ldi R23,0
006E 1801 movw R2,R16
0070 2901 movw R4,R18
0072 241A sub R2,R20
0074 350A sbc R3,R21
0076 460A sbc R4,R22
0078 570A sbc R5,R23
007A 5101 movw R10,R2
007C .dbline 32
007C ; UBRR1L=baud;
007C A0929900 sts 153,R10
0080 .dbline 33
0080 ; UBRR1H=baud>>8; //设置波特率
0080 232C mov R2,R3
0082 3324 clr R3
0084 20929800 sts 152,R2
0088 .dbline 34
0088 ; UCSR1B=(1<<TXEN1)|(1<<RXEN1)|(1<<RXCIE1);
0088 88E9 ldi R24,152
008A 80939A00 sts 154,R24
008E .dbline 36
008E ; //接收、发送使能,接收中断使能
008E ; SREG=BIT(7); //全局中断开放
008E 80E8 ldi R24,128
0090 8FBF out 0x3f,R24
0092 .dbline 37
0092 ; DDRD|=0X08; //配置TX为输出(很重要)
0092 8B9A sbi 0x11,3
0094 .dbline -2
0094 L11:
0094 0E940000 xcall pop_gset3
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r baud 10 i
009A .dbend
009A .dbfunc e uart_sendB _uart_sendB fV
009A ; data -> R16
.even
009A _uart_sendB::
009A .dbline -1
009A .dbline 41
009A ;
009A ; }
009A ; void uart_sendB(uchar data)
009A ; {
009A L13:
009A .dbline 42
009A L14:
009A .dbline 42
009A ; while(!(UCSR1A&(BIT(UDRE1)))) ;
009A 20909B00 lds R2,155
009E 25FE sbrs R2,5
00A0 FCCF rjmp L13
00A2 .dbline 43
00A2 ; UDR1=data;
00A2 00939C00 sts 156,R16
00A6 L16:
00A6 .dbline 44
00A6 L17:
00A6 .dbline 44
00A6 ; while(!(UCSR1A&(BIT(TXC1))));
00A6 20909B00 lds R2,155
00AA 26FE sbrs R2,6
00AC FCCF rjmp L16
00AE .dbline 45
00AE ; UCSR1A|=BIT(TXC1);
00AE 80919B00 lds R24,155
00B2 8064 ori R24,64
00B4 80939B00 sts 155,R24
00B8 .dbline -2
00B8 L12:
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbsym r data 16 c
00BA .dbend
00BA .dbfunc e uart_rx _uart_rx fV
.even
00BA _uart_rx::
00BA 2A92 st -y,R2
00BC 8A93 st -y,R24
00BE 2FB6 in R2,0x3f
00C0 2A92 st -y,R2
00C2 .dbline -1
00C2 .dbline 48
00C2 ; }
00C2 ; void uart_rx()
00C2 ; {
00C2 .dbline 49
00C2 ; UCSR1B&=~BIT(RXCIE1);
00C2 80919A00 lds R24,154
00C6 8F77 andi R24,127
00C8 80939A00 sts 154,R24
00CC .dbline 50
00CC ; rdata=UDR1;
00CC 20909C00 lds R2,156
00D0 20920000 sts _rdata,R2
00D4 .dbline 51
00D4 ; flag=1;
00D4 81E0 ldi R24,1
00D6 80930000 sts _flag,R24
00DA .dbline 52
00DA ; UCSR1B|=BIT(RXCIE1);
00DA 80919A00 lds R24,154
00DE 8068 ori R24,128
00E0 80939A00 sts 154,R24
00E4 .dbline -2
00E4 L19:
00E4 2990 ld R2,y+
00E6 2FBE out 0x3f,R2
00E8 8991 ld R24,y+
00EA 2990 ld R2,y+
00EC .dbline 0 ; func end
00EC 1895 reti
00EE .dbend
00EE .dbfunc e main _main fV
00EE ; i -> R22,R23
00EE ; j -> R20
.even
00EE _main::
00EE .dbline -1
00EE .dbline 55
00EE ; }
00EE ; void main()
00EE ; {
00EE .dbline 56
00EE ; unsigned char j='a';
00EE 41E6 ldi R20,97
00F0 .dbline 58
00F0 ;
00F0 ; unsigned int i=3;
00F0 63E0 ldi R22,3
00F2 70E0 ldi R23,0
00F4 .dbline 63
00F4 ;
00F4 ; //
00F4 ; //
00F4 ; // init_port();
00F4 ; uart_init(19200);
00F4 00E0 ldi R16,19200
00F6 1BE4 ldi R17,75
00F8 9CDF xcall _uart_init
00FA .dbline 64
00FA ; delay(1);
00FA 01E0 ldi R16,1
00FC 10E0 ldi R17,0
00FE 80DF xcall _delay
0100 .dbline 65
0100 ; uart_sendB(i);
0100 062F mov R16,R22
0102 CBDF xcall _uart_sendB
0104 .dbline 66
0104 ; delay(1);
0104 01E0 ldi R16,1
0106 10E0 ldi R17,0
0108 7BDF xcall _delay
010A .dbline 67
010A ; uart_sendB(j);
010A 042F mov R16,R20
010C C6DF xcall _uart_sendB
010E .dbline 68
010E ; uart_sendB(i);
010E 062F mov R16,R22
0110 C4DF xcall _uart_sendB
0112 .dbline 69
0112 ; delay(1);
0112 01E0 ldi R16,1
0114 10E0 ldi R17,0
0116 74DF xcall _delay
0118 .dbline 70
0118 ; uart_sendB(j);
0118 042F mov R16,R20
011A BFDF xcall _uart_sendB
011C .dbline 72
011C ;
011C ; uart_sendB(i);
011C 062F mov R16,R22
011E BDDF xcall _uart_sendB
0120 .dbline 73
0120 ; delay(1);
0120 01E0 ldi R16,1
0122 10E0 ldi R17,0
0124 6DDF xcall _delay
0126 .dbline 74
0126 ; uart_sendB(j);
0126 042F mov R16,R20
0128 B8DF xcall _uart_sendB
012A .dbline 76
012A ;
012A ; uart_sendB(i);
012A 062F mov R16,R22
012C B6DF xcall _uart_sendB
012E .dbline 77
012E ; delay(1);
012E 01E0 ldi R16,1
0130 10E0 ldi R17,0
0132 66DF xcall _delay
0134 .dbline 78
0134 ; uart_sendB(j);
0134 042F mov R16,R20
0136 B1DF xcall _uart_sendB
0138 .dbline 80
0138 ;
0138 ; uart_sendB(i);
0138 062F mov R16,R22
013A AFDF xcall _uart_sendB
013C .dbline 81
013C ; delay(1);
013C 01E0 ldi R16,1
013E 10E0 ldi R17,0
0140 5FDF xcall _delay
0142 .dbline 82
0142 ; uart_sendB(j);
0142 042F mov R16,R20
0144 AADF xcall _uart_sendB
0146 .dbline 84
0146 ;
0146 ; uart_sendB(i);
0146 062F mov R16,R22
0148 A8DF xcall _uart_sendB
014A .dbline 85
014A ; delay(1);
014A 01E0 ldi R16,1
014C 10E0 ldi R17,0
014E 58DF xcall _delay
0150 .dbline 86
0150 ; uart_sendB(j);
0150 042F mov R16,R20
0152 A3DF xcall _uart_sendB
0154 .dbline 89
0154 ;
0154 ;
0154 ; uart_sendB(i);
0154 062F mov R16,R22
0156 A1DF xcall _uart_sendB
0158 .dbline 90
0158 ; delay(1);
0158 01E0 ldi R16,1
015A 10E0 ldi R17,0
015C 51DF xcall _delay
015E .dbline 91
015E ; uart_sendB(j);
015E 042F mov R16,R20
0160 9CDF xcall _uart_sendB
0162 .dbline -2
0162 L20:
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r i 22 i
0164 .dbsym r j 20 c
0164 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\icc\examples.avr\lesson1\lesson1.c
0000 _rdata::
0000 .blkb 1
0001 .dbsym e rdata _rdata c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -