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

📄 uart.lis

📁 ICCavr编写的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 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 + -