?? usart.lis
字號:
.module usart.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 E:\atmega16子函數\AT24C256\usart.c
0000 .dbfunc e put _put fV
0000 ; d -> y+0
0000 ; i -> R20,R21
.even
0000 _put::
0000 0E940000 xcall push_gset1
0004 A801 movw R20,R16
0006 2897 sbiw R28,8
0008 .dbline -1
0008 .dbline 5
0008 ; #include <iom16v.h>
0008 ; #include<macros.h>
0008 ;
0008 ; void put(unsigned int i)
0008 ; {
0008 .dbline 6
0008 ; char d[8]={0};
0008 80E0 ldi R24,<L2
000A 90E0 ldi R25,>L2
000C FE01 movw R30,R28
000E 08E0 ldi R16,8
0010 10E0 ldi R17,0
0012 FA93 st -y,R31
0014 EA93 st -y,R30
0016 9A93 st -y,R25
0018 8A93 st -y,R24
001A 0E940000 xcall asgncblk
001E .dbline 7
001E ; Int_to_Char(i,d);
001E 9E01 movw R18,R28
0020 8A01 movw R16,R20
0022 06D0 xcall _Int_to_Char
0024 .dbline 8
0024 ; puts(d);
0024 8E01 movw R16,R28
0026 43D0 xcall _puts
0028 .dbline -2
0028 .dbline 9
0028 ; }
0028 L1:
0028 2896 adiw R28,8
002A 0E940000 xcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym l d 0 A[8:8]c
0030 .dbsym r i 20 i
0030 .dbend
0030 .dbfunc e Int_to_Char _Int_to_Char fV
0030 ; p -> R20,R21
0030 ; i -> R22,R23
.even
0030 _Int_to_Char::
0030 0E940000 xcall push_gset2
0034 A901 movw R20,R18
0036 B801 movw R22,R16
0038 .dbline -1
0038 .dbline 11
0038 ; void Int_to_Char(unsigned int i,char *p)
0038 ; {p[0]=i/1000+48;
0038 .dbline 11
0038 28EE ldi R18,1000
003A 33E0 ldi R19,3
003C 8B01 movw R16,R22
003E 0E940000 xcall div16u
0042 C801 movw R24,R16
0044 C096 adiw R24,48
0046 FA01 movw R30,R20
0048 8083 std z+0,R24
004A .dbline 12
004A ; p[1]=(i/100)%10+48;
004A 24E6 ldi R18,100
004C 30E0 ldi R19,0
004E 8B01 movw R16,R22
0050 0E940000 xcall div16u
0054 2AE0 ldi R18,10
0056 30E0 ldi R19,0
0058 0E940000 xcall mod16u
005C C801 movw R24,R16
005E C096 adiw R24,48
0060 FA01 movw R30,R20
0062 8183 std z+1,R24
0064 .dbline 13
0064 ; p[2]=(i%100)/10+48;
0064 24E6 ldi R18,100
0066 30E0 ldi R19,0
0068 8B01 movw R16,R22
006A 0E940000 xcall mod16u
006E 2AE0 ldi R18,10
0070 30E0 ldi R19,0
0072 0E940000 xcall div16u
0076 C801 movw R24,R16
0078 C096 adiw R24,48
007A FA01 movw R30,R20
007C 8283 std z+2,R24
007E .dbline 14
007E ; p[3]=(i%100)%10+48;
007E 24E6 ldi R18,100
0080 30E0 ldi R19,0
0082 8B01 movw R16,R22
0084 0E940000 xcall mod16u
0088 2AE0 ldi R18,10
008A 30E0 ldi R19,0
008C 0E940000 xcall mod16u
0090 C801 movw R24,R16
0092 C096 adiw R24,48
0094 FA01 movw R30,R20
0096 8383 std z+3,R24
0098 .dbline -2
0098 .dbline 15
0098 ; }
0098 L3:
0098 0E940000 xcall pop_gset2
009C .dbline 0 ; func end
009C 0895 ret
009E .dbsym r p 20 pc
009E .dbsym r i 22 i
009E .dbend
009E .dbfunc e putchar _putchar fV
009E ; c -> R16
.even
009E _putchar::
009E .dbline -1
009E .dbline 18
009E ; /* 字符輸出函數 */
009E ; void putchar(char c)
009E ; {
009E L5:
009E .dbline 19
009E L6:
009E .dbline 19
009E ; while (!(UCSRA&(1<<UDRE)));
009E 5D9B sbis 0xb,5
00A0 FECF rjmp L5
00A2 .dbline 20
00A2 ; UDR=c;
00A2 0CB9 out 0xc,R16
00A4 .dbline -2
00A4 .dbline 21
00A4 ; }
00A4 L4:
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbsym r c 16 c
00A6 .dbend
00A6 .dbfunc e getchar _getchar fc
.even
00A6 _getchar::
00A6 .dbline -1
00A6 .dbline 24
00A6 ; /* 字符輸入函數 */
00A6 ; unsigned char getchar(void)
00A6 ; {
00A6 L9:
00A6 .dbline 25
00A6 L10:
00A6 .dbline 25
00A6 ; while(!(UCSRA& (1<<RXC)));
00A6 5F9B sbis 0xb,7
00A8 FECF rjmp L9
00AA .dbline 27
00AA ;
00AA ; return UDR;
00AA 0CB1 in R16,0xc
00AC .dbline -2
00AC L8:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbend
00AE .dbfunc e puts _puts fV
00AE ; s -> R20,R21
.even
00AE _puts::
00AE 0E940000 xcall push_gset1
00B2 A801 movw R20,R16
00B4 .dbline -1
00B4 .dbline 31
00B4 ; }
00B4 ; /* 字符串輸出函數 */
00B4 ; void puts(char * s)
00B4 ; {
00B4 05C0 xjmp L14
00B6 L13:
00B6 .dbline 33
00B6 .dbline 34
00B6 FA01 movw R30,R20
00B8 0081 ldd R16,z+0
00BA F1DF xcall _putchar
00BC .dbline 35
00BC 4F5F subi R20,255 ; offset = 1
00BE 5F4F sbci R21,255
00C0 .dbline 36
00C0 L14:
00C0 .dbline 32
00C0 ; while (*s)
00C0 FA01 movw R30,R20
00C2 2080 ldd R2,z+0
00C4 2220 tst R2
00C6 B9F7 brne L13
00C8 .dbline 37
00C8 ; {
00C8 ; putchar(*s);
00C8 ; s++;
00C8 ; }
00C8 ; putchar(0x0a);//回車換行
00C8 0AE0 ldi R16,10
00CA E9DF xcall _putchar
00CC .dbline 38
00CC ; putchar(0x0d);
00CC 0DE0 ldi R16,13
00CE E7DF xcall _putchar
00D0 .dbline -2
00D0 .dbline 40
00D0 ;
00D0 ; }
00D0 L12:
00D0 0E940000 xcall pop_gset1
00D4 .dbline 0 ; func end
00D4 0895 ret
00D6 .dbsym r s 20 pc
00D6 .dbend
00D6 .dbfunc e putstr _putstr fV
00D6 ; s -> R20,R21
.even
00D6 _putstr::
00D6 0E940000 xcall push_gset1
00DA A801 movw R20,R16
00DC .dbline -1
00DC .dbline 43
00DC ; /* 不含回車換行的字符串輸出函數 */
00DC ; void putstr(char * s)
00DC ; {
00DC 05C0 xjmp L18
00DE L17:
00DE .dbline 45
00DE .dbline 46
00DE FA01 movw R30,R20
00E0 0081 ldd R16,z+0
00E2 DDDF xcall _putchar
00E4 .dbline 47
00E4 4F5F subi R20,255 ; offset = 1
00E6 5F4F sbci R21,255
00E8 .dbline 48
00E8 L18:
00E8 .dbline 44
00E8 ; while (*s)
00E8 FA01 movw R30,R20
00EA 2080 ldd R2,z+0
00EC 2220 tst R2
00EE B9F7 brne L17
00F0 .dbline -2
00F0 .dbline 49
00F0 ; {
00F0 ; putchar(*s);
00F0 ; s++;
00F0 ; }
00F0 ; }
00F0 L16:
00F0 0E940000 xcall pop_gset1
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbsym r s 20 pc
00F6 .dbend
00F6 .dbfunc e usart_init _usart_init fV
.even
00F6 _usart_init::
00F6 .dbline -1
00F6 .dbline 52
00F6 ; /* UART初始化 */
00F6 ; void usart_init(void)
00F6 ; {
00F6 .dbline 54
00F6 ;
00F6 ; UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);;//允許發送和接收
00F6 88E9 ldi R24,152
00F8 8AB9 out 0xa,R24
00FA .dbline 54
00FA .dbline 55
00FA ; UBRRL=47; // 4M 25 8M 51 7.3728M 47
00FA 8FE2 ldi R24,47
00FC 89B9 out 0x9,R24
00FE .dbline 56
00FE ; UBRRH=0; // 9600;
00FE 2224 clr R2
0100 20BC out 0x20,R2
0102 .dbline 57
0102 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位數據+1位STOP位
0102 86E8 ldi R24,134
0104 80BD out 0x20,R24
0106 .dbline -2
0106 .dbline 58
0106 ; }
0106 L20:
0106 .dbline 0 ; func end
0106 0895 ret
0108 .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -