📄 uart1.lis
字号:
.module uart1.c
.area text(rom, con, rel)
0000 .dbfile C:\work\UART_MEGA128\uart1.c
0000 .dbfunc e uart0_init _uart0_init fI
.even
0000 _uart0_init::
0000 .dbline -1
0000 .dbline 7
0000 ; #include<iom128v.h>
0000 ; #include<macros.h>
0000 ; #define fosc 4000000 //晶振4MHZ
0000 ; #define baud 2400 //波特率
0000 ; #define com0
0000 ; void uart0_init(void)
0000 ; {
0000 .dbline 8
0000 ; UCSR0B = 0x00; //disable while setting baud rate
0000 2224 clr R2
0002 2AB8 out 0xa,R2
0004 .dbline 9
0004 ; UCSR0A = 0x00;
0004 2BB8 out 0xb,R2
0006 .dbline 10
0006 ; UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
0006 86E0 ldi R24,6
0008 80939500 sts 149,R24
000C .dbline 11
000C ; UBRR0L=(fosc/16/(baud+1))%256;
000C 88E6 ldi R24,104
000E 89B9 out 0x9,R24
0010 .dbline 12
0010 ; UBRR0H=(fosc/16/(baud+1))/256;
0010 20929000 sts 144,R2
0014 .dbline 13
0014 ; UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
0014 88E1 ldi R24,24
0016 8AB9 out 0xa,R24
0018 .dbline -2
0018 .dbline 14
0018 ; }
0018 L1:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbfunc e uart1_init _uart1_init fI
.even
001A _uart1_init::
001A .dbline -1
001A .dbline 16
001A ; void uart1_init(void)
001A ; {
001A .dbline 17
001A ; UCSR1B = 0x00; //disable while setting baud rate
001A 2224 clr R2
001C 20929A00 sts 154,R2
0020 .dbline 18
0020 ; UCSR1A = 0x00;
0020 20929B00 sts 155,R2
0024 .dbline 19
0024 ; UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//8bit+1bit stop
0024 86E0 ldi R24,6
0026 80939D00 sts 157,R24
002A .dbline 20
002A ; UBRR1L=(fosc/16/(baud+1))%256;
002A 88E6 ldi R24,104
002C 80939900 sts 153,R24
0030 .dbline 21
0030 ; UBRR1H=(fosc/16/(baud+1))/256;
0030 20929800 sts 152,R2
0034 .dbline 22
0034 ; UCSR1B =(1<<RXEN1)|(1<<TXEN1);//RXCEN TXCEN
0034 88E1 ldi R24,24
0036 80939A00 sts 154,R24
003A .dbline -2
003A .dbline 23
003A ; }
003A L2:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbfunc e putchar0 _putchar0 fI
003C ; c -> R16
.even
003C _putchar0::
003C .dbline -1
003C .dbline 25
003C ; void putchar0(unsigned char c)
003C ; {
003C L4:
003C .dbline 26
003C L5:
003C .dbline 26
003C ; while (!(UCSR0A&(1<<UDRE0)));
003C 5D9B sbis 0xb,5
003E FECF rjmp L4
0040 .dbline 27
0040 ; UDR0=c;
0040 0CB9 out 0xc,R16
0042 .dbline -2
0042 .dbline 28
0042 ; }
0042 L3:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r c 16 c
0044 .dbfunc e putchar1 _putchar1 fI
0044 ; c -> R16
.even
0044 _putchar1::
0044 .dbline -1
0044 .dbline 30
0044 ; void putchar1(unsigned char c)
0044 ; {
0044 L8:
0044 .dbline 31
0044 L9:
0044 .dbline 31
0044 ; while (!(UCSR1A&(1<<UDRE1)));
0044 20909B00 lds R2,155
0048 25FE sbrs R2,5
004A FCCF rjmp L8
004C .dbline 32
004C ; UDR1=c;
004C 00939C00 sts 156,R16
0050 .dbline -2
0050 .dbline 33
0050 ; }
0050 L7:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r c 16 c
0052 .dbfunc e getchar0 _getchar0 fI
.even
0052 _getchar0::
0052 .dbline -1
0052 .dbline 35
0052 ; unsigned char getchar0(void)
0052 ; {
0052 L12:
0052 .dbline 36
0052 L13:
0052 .dbline 36
0052 ; while(!(UCSR0A& (1<<RXC0)));
0052 5F9B sbis 0xb,7
0054 FECF rjmp L12
0056 .dbline 37
0056 ; return UDR0;
0056 0CB1 in R16,0xc
0058 .dbline -2
0058 L11:
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbfunc e getchar1 _getchar1 fI
.even
005A _getchar1::
005A .dbline -1
005A .dbline 40
005A ; }
005A ; unsigned char getchar1(void)
005A ; {
005A L16:
005A .dbline 41
005A L17:
005A .dbline 41
005A ; while(!(UCSR1A& (1<<RXC1)));
005A 20909B00 lds R2,155
005E 27FE sbrs R2,7
0060 FCCF rjmp L16
0062 .dbline 42
0062 ; return UDR1;
0062 00919C00 lds R16,156
0066 .dbline -2
0066 L15:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbfunc e puts0 _puts0 fI
0068 ; s -> R20,R21
.even
0068 _puts0::
0068 0E940000 xcall push_gset1
006C A801 movw R20,R16
006E .dbline -1
006E .dbline 45
006E ; }
006E ; void puts0(char *s)
006E ; {
006E 05C0 xjmp L21
0070 L20:
0070 .dbline 47
0070 .dbline 48
0070 FA01 movw R30,R20
0072 0081 ldd R16,z+0
0074 E3DF xcall _putchar0
0076 .dbline 49
0076 4F5F subi R20,255 ; offset = 1
0078 5F4F sbci R21,255
007A .dbline 50
007A L21:
007A .dbline 46
007A ; while (*s)
007A FA01 movw R30,R20
007C 2080 ldd R2,z+0
007E 2220 tst R2
0080 B9F7 brne L20
0082 .dbline 51
0082 ; {
0082 ; putchar0(*s);
0082 ; s++;
0082 ; }
0082 ; putchar0(0x0a);
0082 0AE0 ldi R16,10
0084 DBDF xcall _putchar0
0086 .dbline 52
0086 ; putchar0(0x0d);
0086 0DE0 ldi R16,13
0088 D9DF xcall _putchar0
008A .dbline -2
008A .dbline 53
008A ; }
008A L19:
008A 0E940000 xcall pop_gset1
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbsym r s 20 pc
0090 .dbfunc e puts1 _puts1 fI
0090 ; s -> R20,R21
.even
0090 _puts1::
0090 0E940000 xcall push_gset1
0094 A801 movw R20,R16
0096 .dbline -1
0096 .dbline 55
0096 ; void puts1(char *s)
0096 ; {
0096 05C0 xjmp L25
0098 L24:
0098 .dbline 57
0098 .dbline 58
0098 FA01 movw R30,R20
009A 0081 ldd R16,z+0
009C D3DF xcall _putchar1
009E .dbline 59
009E 4F5F subi R20,255 ; offset = 1
00A0 5F4F sbci R21,255
00A2 .dbline 60
00A2 L25:
00A2 .dbline 56
00A2 ; while (*s)
00A2 FA01 movw R30,R20
00A4 2080 ldd R2,z+0
00A6 2220 tst R2
00A8 B9F7 brne L24
00AA .dbline 61
00AA ; {
00AA ; putchar1(*s);
00AA ; s++;
00AA ; }
00AA ; putchar1(0x0a);
00AA 0AE0 ldi R16,10
00AC CBDF xcall _putchar1
00AE .dbline 62
00AE ; putchar1(0x0d);
00AE 0DE0 ldi R16,13
00B0 C9DF xcall _putchar1
00B2 .dbline -2
00B2 .dbline 63
00B2 ; }
00B2 L23:
00B2 0E940000 xcall pop_gset1
00B6 .dbline 0 ; func end
00B6 0895 ret
00B8 .dbsym r s 20 pc
00B8 .dbfunc e main _main fI
00B8 ; i -> R20
.even
00B8 _main::
00B8 .dbline -1
00B8 .dbline 65
00B8 ; void main(void)
00B8 ; {
00B8 .dbline 68
00B8 ; unsigned char i;
00B8 ; #ifdef com0
00B8 ; uart0_init();
00B8 A3DF xcall _uart0_init
00BA .dbline 69
00BA ; puts0("HELLO!");
00BA 00E0 ldi R16,<L28
00BC 10E0 ldi R17,>L28
00BE D4DF xcall _puts0
00C0 12C0 xjmp L30
00C2 L29:
00C2 .dbline 75
00C2 ; #else
00C2 ; uart1_init();
00C2 ; puts1("HELLO!");
00C2 ; #endif
00C2 ; while(1)
00C2 ; {
00C2 .dbline 77
00C2 ; #ifdef com0
00C2 ; if (getchar0()=='t')//按键盘t键开始测试
00C2 C7DF xcall _getchar0
00C4 0437 cpi R16,116
00C6 79F4 brne L32
00C8 .dbline 78
00C8 ; {
00C8 .dbline 79
00C8 ; puts0("test ok!");
00C8 00E0 ldi R16,<L34
00CA 10E0 ldi R17,>L34
00CC CDDF xcall _puts0
00CE .dbline 80
00CE ; for (i=0;i<10;i++)
00CE 4427 clr R20
00D0 04C0 xjmp L38
00D2 L35:
00D2 .dbline 81
00D2 .dbline 82
00D2 042F mov R16,R20
00D4 005D subi R16,208 ; addi 48
00D6 B2DF xcall _putchar0
00D8 .dbline 83
00D8 L36:
00D8 .dbline 80
00D8 4395 inc R20
00DA L38:
00DA .dbline 80
00DA 4A30 cpi R20,10
00DC D0F3 brlo L35
00DE .dbline 84
00DE ; {
00DE ; putchar0(0x30+i);
00DE ; }
00DE ; putchar0(0x0a);
00DE 0AE0 ldi R16,10
00E0 ADDF xcall _putchar0
00E2 .dbline 85
00E2 ; putchar0(0x0d);
00E2 0DE0 ldi R16,13
00E4 ABDF xcall _putchar0
00E6 .dbline 86
00E6 ; }
00E6 L32:
00E6 .dbline 99
00E6 L30:
00E6 .dbline 74
00E6 EDCF xjmp L29
00E8 X0:
00E8 .dbline -2
00E8 .dbline 100
00E8 ; #else
00E8 ; if (getchar1()=='t')//按键盘t键开始测试
00E8 ; {
00E8 ; puts1("test ok!");
00E8 ; for (i=0;i<10;i++)
00E8 ; {
00E8 ; putchar1(0x30+i);
00E8 ; }
00E8 ; putchar1(0x0a);
00E8 ; putchar1(0x0d);
00E8 ; }
00E8 ; #endif
00E8 ; }
00E8 ; }
00E8 L27:
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbsym r i 20 c
.area data(ram, con, rel)
0000 .dbfile C:\work\UART_MEGA128\uart1.c
0000 L34:
0000 .blkb 9
.area idata
0000 74657374206F6B2100 .byte 't,'e,'s,'t,32,'o,'k,33,0
.area data(ram, con, rel)
0009 .dbfile C:\work\UART_MEGA128\uart1.c
0009 L28:
0009 .blkb 7
.area idata
0009 48454C4C4F2100 .byte 'H,'E,'L,'L,'O,33,0
.area data(ram, con, rel)
0010 .dbfile C:\work\UART_MEGA128\uart1.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -