⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.lis

📁 atmega16 iic(twi)主从机通信 测试通过
💻 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 E:\atmega16子函数\TWI_slaver0\uart.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 uart_init _uart_init fV
                        .even
 00F6           _uart_init::
 00F6                   .dbline -1
 00F6                   .dbline 52
 00F6           ; /*          UART初始化                */      
 00F6           ; void uart_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 + -