📄 uart.lis
字号:
.module UART.c
.area lit(rom, con, rel)
0000 L2:
0000 00 .byte 0
0001 00000000000000 .byte 0,0,0,0,0,0,0
.area text(rom, con, rel)
0000 .dbfile D:\AVR\代码\ICCdaima\TWI\UART.c
0000 .dbfunc e put _put fV
0000 ; d -> y+0
0000 ; i -> R20,R21
.even
0000 _put::
0000 00D0 rcall push_gset1
0002 A801 movw R20,R16
0004 2897 sbiw R28,8
0006 .dbline -1
0006 .dbline 5
0006 ; #include <iom8v.h>
0006 ; #include<macros.h>
0006 ;
0006 ; void put(unsigned int i)
0006 ; {
0006 .dbline 6
0006 ; char d[8]={0};
0006 80E0 ldi R24,<L2
0008 90E0 ldi R25,>L2
000A FE01 movw R30,R28
000C 08E0 ldi R16,8
000E 10E0 ldi R17,0
0010 FA93 st -y,R31
0012 EA93 st -y,R30
0014 9A93 st -y,R25
0016 8A93 st -y,R24
0018 00D0 rcall asgncblk
001A .dbline 7
001A ; Int_to_Char(i,d);
001A 9E01 movw R18,R28
001C 8A01 movw R16,R20
001E 05D0 rcall _Int_to_Char
0020 .dbline 8
0020 ; puts(d);
0020 8E01 movw R16,R28
0022 39D0 rcall _puts
0024 .dbline -2
0024 .dbline 9
0024 ; }
0024 L1:
0024 2896 adiw R28,8
0026 00D0 rcall pop_gset1
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym l d 0 A[8:8]c
002A .dbsym r i 20 i
002A .dbend
002A .dbfunc e Int_to_Char _Int_to_Char fV
002A ; p -> R20,R21
002A ; i -> R22,R23
.even
002A _Int_to_Char::
002A 00D0 rcall push_gset2
002C A901 movw R20,R18
002E B801 movw R22,R16
0030 .dbline -1
0030 .dbline 11
0030 ; void Int_to_Char(unsigned int i,char *p)
0030 ; {p[0]=i/1000+48;
0030 .dbline 11
0030 28EE ldi R18,1000
0032 33E0 ldi R19,3
0034 8B01 movw R16,R22
0036 00D0 rcall div16u
0038 C801 movw R24,R16
003A C096 adiw R24,48
003C FA01 movw R30,R20
003E 8083 std z+0,R24
0040 .dbline 12
0040 ; p[1]=(i/100)%10+48;
0040 24E6 ldi R18,100
0042 30E0 ldi R19,0
0044 8B01 movw R16,R22
0046 00D0 rcall div16u
0048 2AE0 ldi R18,10
004A 30E0 ldi R19,0
004C 00D0 rcall mod16u
004E C801 movw R24,R16
0050 C096 adiw R24,48
0052 FA01 movw R30,R20
0054 8183 std z+1,R24
0056 .dbline 13
0056 ; p[2]=(i%100)/10+48;
0056 24E6 ldi R18,100
0058 30E0 ldi R19,0
005A 8B01 movw R16,R22
005C 00D0 rcall mod16u
005E 2AE0 ldi R18,10
0060 30E0 ldi R19,0
0062 00D0 rcall div16u
0064 C801 movw R24,R16
0066 C096 adiw R24,48
0068 FA01 movw R30,R20
006A 8283 std z+2,R24
006C .dbline 14
006C ; p[3]=(i%100)%10+48;
006C 24E6 ldi R18,100
006E 30E0 ldi R19,0
0070 8B01 movw R16,R22
0072 00D0 rcall mod16u
0074 2AE0 ldi R18,10
0076 30E0 ldi R19,0
0078 00D0 rcall mod16u
007A C801 movw R24,R16
007C C096 adiw R24,48
007E FA01 movw R30,R20
0080 8383 std z+3,R24
0082 .dbline -2
0082 .dbline 15
0082 ; }
0082 L3:
0082 00D0 rcall pop_gset2
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbsym r p 20 pc
0086 .dbsym r i 22 i
0086 .dbend
0086 .dbfunc e putchar _putchar fV
0086 ; c -> R16
.even
0086 _putchar::
0086 .dbline -1
0086 .dbline 18
0086 ; /* 字符输出函数 */
0086 ; void putchar(char c)
0086 ; {
0086 L5:
0086 .dbline 19
0086 L6:
0086 .dbline 19
0086 ; while (!(UCSRA&(1<<UDRE)));
0086 5D9B sbis 0xb,5
0088 FECF rjmp L5
008A .dbline 20
008A ; UDR=c;
008A 0CB9 out 0xc,R16
008C .dbline -2
008C .dbline 21
008C ; }
008C L4:
008C .dbline 0 ; func end
008C 0895 ret
008E .dbsym r c 16 c
008E .dbend
008E .dbfunc e getchar _getchar fc
.even
008E _getchar::
008E .dbline -1
008E .dbline 24
008E ; /* 字符输入函数 */
008E ; unsigned char getchar(void)
008E ; {
008E L9:
008E .dbline 25
008E L10:
008E .dbline 25
008E ; while(!(UCSRA& (1<<RXC)));
008E 5F9B sbis 0xb,7
0090 FECF rjmp L9
0092 .dbline 27
0092 ;
0092 ; return UDR;
0092 0CB1 in R16,0xc
0094 .dbline -2
0094 L8:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
0096 .dbfunc e puts _puts fV
0096 ; s -> R20,R21
.even
0096 _puts::
0096 00D0 rcall push_gset1
0098 A801 movw R20,R16
009A .dbline -1
009A .dbline 31
009A ; }
009A ; /* 字符串输出函数 */
009A ; void puts(char * s)
009A ; {
009A 05C0 rjmp L14
009C L13:
009C .dbline 33
009C .dbline 34
009C FA01 movw R30,R20
009E 0081 ldd R16,z+0
00A0 F2DF rcall _putchar
00A2 .dbline 35
00A2 4F5F subi R20,255 ; offset = 1
00A4 5F4F sbci R21,255
00A6 .dbline 36
00A6 L14:
00A6 .dbline 32
00A6 ; while (*s)
00A6 FA01 movw R30,R20
00A8 2080 ldd R2,z+0
00AA 2220 tst R2
00AC B9F7 brne L13
00AE .dbline 37
00AE ; {
00AE ; putchar(*s);
00AE ; s++;
00AE ; }
00AE ; putchar(0x0a);//回车换行
00AE 0AE0 ldi R16,10
00B0 EADF rcall _putchar
00B2 .dbline 38
00B2 ; putchar(0x0d);
00B2 0DE0 ldi R16,13
00B4 E8DF rcall _putchar
00B6 .dbline -2
00B6 .dbline 40
00B6 ;
00B6 ; }
00B6 L12:
00B6 00D0 rcall pop_gset1
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbsym r s 20 pc
00BA .dbend
00BA .dbfunc e putstr _putstr fV
00BA ; s -> R20,R21
.even
00BA _putstr::
00BA 00D0 rcall push_gset1
00BC A801 movw R20,R16
00BE .dbline -1
00BE .dbline 43
00BE ; /* 不含回车换行的字符串输出函数 */
00BE ; void putstr(char * s)
00BE ; {
00BE 05C0 rjmp L18
00C0 L17:
00C0 .dbline 45
00C0 .dbline 46
00C0 FA01 movw R30,R20
00C2 0081 ldd R16,z+0
00C4 E0DF rcall _putchar
00C6 .dbline 47
00C6 4F5F subi R20,255 ; offset = 1
00C8 5F4F sbci R21,255
00CA .dbline 48
00CA L18:
00CA .dbline 44
00CA ; while (*s)
00CA FA01 movw R30,R20
00CC 2080 ldd R2,z+0
00CE 2220 tst R2
00D0 B9F7 brne L17
00D2 .dbline -2
00D2 .dbline 49
00D2 ; {
00D2 ; putchar(*s);
00D2 ; s++;
00D2 ; }
00D2 ; }
00D2 L16:
00D2 00D0 rcall pop_gset1
00D4 .dbline 0 ; func end
00D4 0895 ret
00D6 .dbsym r s 20 pc
00D6 .dbend
00D6 .dbfunc e uart_init _uart_init fV
.even
00D6 _uart_init::
00D6 .dbline -1
00D6 .dbline 52
00D6 ; /* UART初始化 */
00D6 ; void uart_init(void)
00D6 ; {
00D6 .dbline 54
00D6 ;
00D6 ; UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);;//允许发送和接收
00D6 88E9 ldi R24,152
00D8 8AB9 out 0xa,R24
00DA .dbline 54
00DA .dbline 55
00DA ; UBRRL=47; // 4M 25 8M 51 7.3728M 47
00DA 8FE2 ldi R24,47
00DC 89B9 out 0x9,R24
00DE .dbline 56
00DE ; UBRRH=0; // 9600;
00DE 2224 clr R2
00E0 20BC out 0x20,R2
00E2 .dbline 57
00E2 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
00E2 86E8 ldi R24,134
00E4 80BD out 0x20,R24
00E6 .dbline -2
00E6 .dbline 58
00E6 ; }
00E6 L20:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -