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

📄 serial.lis

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 LIS
字号:
                        .module serial.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR_Demo\M8IAP\Source\serial.c
 0000                   .dbfunc e SerialInit _SerialInit fV
                        .even
 0000           _SerialInit::
 0000                   .dbline -1
 0000                   .dbline 3
 0000           ; #include "defines.h"
 0000           ; void SerialInit(void)
 0000           ; {
 0000                   .dbline 22
 0000           ; #ifdef _ATMEGA32
 0000           ;     UBRRL = 11;                         // 19200bps @ 3.69 MHz
 0000           ;     UCSRB = (1<<RXEN) | (1<<TXEN);      // Enable recieve and transmit UART1
 0000           ; #endif
 0000           ; 
 0000           ; #ifdef _ATMEGA161
 0000           ;  UCSR0B = 0x00; //disable while setting baud rate
 0000           ;  UCSR0A = 0x00; //disable while setting baud rate
 0000           ;  UBRR0  = 0x0B; //set baud rate
 0000           ;  UBRRHI = 0x00;
 0000           ;  UCSR0A = 0x00; //enable
 0000           ;  UCSR0B = 0x18; //enable#endif
 0000           ; #endif
 0000           ; #ifdef _ATMEGA163
 0000           ;     UBRRL = 11;                          // 19200bps @ 3.69 MHz
 0000           ;     UCSRB = (1<<RXEN) | (1<<TXEN);        // Enable recieve and transmit
 0000           ; #endif
 0000           ; #ifdef _ATMEGA8
 0000           ; UCSRB = 0x00; //disable while setting baud rate
 0000 2224              clr R2
 0002 2AB8              out 0xa,R2
 0004                   .dbline 23
 0004           ;  UCSRA = 0x00;
 0004 2BB8              out 0xb,R2
 0006                   .dbline 24
 0006           ;  UCSRC = 0x86;
 0006 86E8              ldi R24,134
 0008 80BD              out 0x20,R24
 000A                   .dbline 25
 000A           ;  UBRRL = 0x0B; //set baud rate lo
 000A 8BE0              ldi R24,11
 000C 89B9              out 0x9,R24
 000E                   .dbline 26
 000E           ;  UBRRH = 0x00; //set baud rate hi
 000E 20BC              out 0x20,R2
 0010                   .dbline 27
 0010           ;  UCSRB = 0xF8;
 0010 88EF              ldi R24,248
 0012 8AB9              out 0xa,R24
 0014                   .dbline -2
 0014                   .dbline 30
 0014           ; #endif
 0014           ; 
 0014           ; }
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
 0016                   .dbfunc e sendchar _sendchar fV
 0016           ;              c -> R16
                        .even
 0016           _sendchar::
 0016                   .dbline -1
 0016                   .dbline 32
 0016           ; void sendchar(char c)
 0016           ; {
 0016                   .dbline 50
 0016           ; #ifdef _ATMEGA32
 0016           ;    UDR=c;
 0016           ;    while (!(UCSRA & (1<<TXC)));                      //wait until byte sendt
 0016           ;    UCSRA |= (1<<TXC);                             //delete TXCflag
 0016           ; #endif
 0016           ; #ifdef _ATMEGA161
 0016           ;    UDR0=c;
 0016           ;    while (!(UCSR0A & (1<<TXC0)));                      //wait until byte sendt
 0016           ;    UCSR0A |= (1<<TXC0);                             //delete TXCflag
 0016           ; #endif
 0016           ; #ifdef _ATMEGA163
 0016           ;    UDR=c;
 0016           ;    while (!(UCSRA & (1<<TXC)));                      //wait until byte sendt
 0016           ;    UCSRA |= (1<<TXC);                             //delete TXCflag
 0016           ;    
 0016           ; #endif
 0016           ; #ifdef _ATMEGA8
 0016           ;    UDR=c;
 0016 0CB9              out 0xc,R16
 0018           L3:
 0018                   .dbline 51
 0018           L4:
 0018                   .dbline 51
 0018           ;    while (!(UCSRA & (1<<TXC)));                      //wait until byte sendt
 0018 5E9B              sbis 0xb,6
 001A FECF              rjmp L3
 001C                   .dbline 52
 001C           ;    UCSRA |= (1<<TXC);                             //delete TXCflag
 001C 5E9A              sbi 0xb,6
 001E                   .dbline -2
 001E                   .dbline 56
 001E           ;    
 001E           ; #endif
 001E           ; 
 001E           ; }
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbsym r c 16 c
 0020                   .dbend
 0020                   .dbfunc e sendstr _sendstr fV
 0020           ;              s -> R20,R21
                        .even
 0020           _sendstr::
 0020 00D0              rcall push_gset1
 0022 A801              movw R20,R16
 0024                   .dbline -1
 0024                   .dbline 58
 0024           ; void sendstr(char *s)
 0024           ; {while(*s)
 0024 05C0              rjmp L8
 0026           L7:
 0026                   .dbline 59
 0026                   .dbline 60
 0026 FA01              movw R30,R20
 0028 0081              ldd R16,z+0
 002A F5DF              rcall _sendchar
 002C                   .dbline 61
 002C 4F5F              subi R20,255  ; offset = 1
 002E 5F4F              sbci R21,255
 0030                   .dbline 62
 0030           L8:
 0030                   .dbline 58
 0030 FA01              movw R30,R20
 0032 2080              ldd R2,z+0
 0034 2220              tst R2
 0036 B9F7              brne L7
 0038                   .dbline 63
 0038           ; {
 0038           ; sendchar(*s);
 0038           ; s++;
 0038           ; }
 0038           ; sendchar(0x0a);
 0038 0AE0              ldi R16,10
 003A EDDF              rcall _sendchar
 003C                   .dbline -2
 003C                   .dbline 65
 003C           ; //sendchar(0x0d);
 003C           ; }
 003C           L6:
 003C 00D0              rcall pop_gset1
 003E                   .dbline 0 ; func end
 003E 0895              ret
 0040                   .dbsym r s 20 pc
 0040                   .dbend
 0040                   .dbfunc e recchar _recchar fc
 0040           ;           temp -> R16
                        .even
 0040           _recchar::
 0040                   .dbline -1
 0040                   .dbline 69
 0040           ; 
 0040           ; char recchar(void)
 0040           ; 
 0040           ; {
 0040           L11:
 0040                   .dbline 86
 0040           L12:
 0040                   .dbline 86
 0040           ; unsigned char temp;
 0040           ; #ifdef _ATMEGA32
 0040           ;    while(!(UCSRA & (1<<RXC)));                       // Wait for data to come
 0040           ;    return UDR;
 0040           ; #endif
 0040           ; #ifdef _ATMEGA161
 0040           ;    while(!(UCSR0A & (1<<RXC0)));    // Wait for data to come   
 0040           ;    temp=UDR0;
 0040           ;    return temp;
 0040           ; #endif
 0040           ; #ifdef _ATMEGA163
 0040           ;    while(!(UCSRA & (1<<RXC)));                       // Wait for data to come
 0040           ;    return UDR;
 0040           ; #endif
 0040           ; 
 0040           ; #ifdef _ATMEGA8
 0040           ;    while(!(UCSRA & (1<<RXC))) ;
 0040 5F9B              sbis 0xb,7
 0042 FECF              rjmp L11
 0044                   .dbline 87
 0044           ;    temp=UDR;
 0044 0CB1              in R16,0xc
 0046                   .dbline 88
 0046           ;    return temp;
 0046                   .dbline -2
 0046           L10:
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbsym r temp 16 c
 0048                   .dbend
 0048                   .dbfunc e reccharcommand _reccharcommand fc
 0048           ;           temp -> R16
 0048           ;              i -> R18,R19
                        .even
 0048           _reccharcommand::
 0048                   .dbline -1
 0048                   .dbline 92
 0048           ; #endif
 0048           ; }
 0048           ; char reccharcommand(void)
 0048           ; {unsigned int i;
 0048                   .dbline 94
 0048           ; unsigned char temp;
 0048           ; i=0;
 0048 2227              clr R18
 004A 3327              clr R19
 004C 09C0              rjmp L16
 004E           L15:
 004E                   .dbline 111
 004E           ; #ifdef _ATMEGA32
 004E           ;    while(!(UCSRA & (1<<RXC)));                       // Wait for data to come
 004E           ;    return UDR;
 004E           ; #endif
 004E           ; #ifdef _ATMEGA161
 004E           ;    while(!(UCSR0A & (1<<RXC0)));    // Wait for data to come   
 004E           ;    temp=UDR0;
 004E           ;    return temp;
 004E           ; #endif
 004E           ; #ifdef _ATMEGA163
 004E           ;    while(!(UCSRA & (1<<RXC)));                       // Wait for data to come
 004E           ;    return UDR;
 004E           ; #endif
 004E           ; 
 004E           ; #ifdef _ATMEGA8
 004E           ;    while(!(UCSRA & (1<<RXC)))
 004E           ;       {i++;
 004E                   .dbline 111
 004E 2F5F              subi R18,255  ; offset = 1
 0050 3F4F              sbci R19,255
 0052                   .dbline 112
 0052           ;       if(i>6000)
 0052 80E7              ldi R24,6000
 0054 97E1              ldi R25,23
 0056 8217              cp R24,R18
 0058 9307              cpc R25,R19
 005A 10F4              brsh L18
 005C                   .dbline 113
 005C 0027              clr R16
 005E 03C0              rjmp L14
 0060           L18:
 0060                   .dbline 113
 0060           L16:
 0060                   .dbline 110
 0060 5F9B              sbis 0xb,7
 0062 F5CF              rjmp L15
 0064                   .dbline 113
 0064           ;               return 0x00;};    // Wait for data to come   
 0064                   .dbline 114
 0064           ;    temp=UDR;
 0064 0CB1              in R16,0xc
 0066                   .dbline 115
 0066           ;    return temp;
 0066                   .dbline -2
 0066           L14:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r temp 16 c
 0068                   .dbsym r i 18 i
 0068                   .dbend
 0068                   .dbfunc e reccharcommand2 _reccharcommand2 fc
 0068           ;           temp -> R16
 0068           ;              i -> R18,R19
                        .even
 0068           _reccharcommand2::
 0068                   .dbline -1
 0068                   .dbline 120
 0068           ; #endif
 0068           ; }
 0068           ; 
 0068           ; char reccharcommand2(void)
 0068           ; {unsigned int i;
 0068                   .dbline 122
 0068           ; unsigned char temp;
 0068           ; i=0;
 0068 2227              clr R18
 006A 3327              clr R19
 006C 09C0              rjmp L22
 006E           L21:
 006E                   .dbline 139
 006E           ; #ifdef _ATMEGA32
 006E           ;    while(!(UCSRA & (1<<RXC)));                       // Wait for data to come
 006E           ;    return UDR;
 006E           ; #endif
 006E           ; #ifdef _ATMEGA161
 006E           ;    while(!(UCSR0A & (1<<RXC0)));    // Wait for data to come   
 006E           ;    temp=UDR0;
 006E           ;    return temp;
 006E           ; #endif
 006E           ; #ifdef _ATMEGA163
 006E           ;    while(!(UCSRA & (1<<RXC)));                       // Wait for data to come
 006E           ;    return UDR;
 006E           ; #endif
 006E           ; 
 006E           ; #ifdef _ATMEGA8
 006E           ;    while(!(UCSRA & (1<<RXC)))
 006E           ;       {i++;
 006E                   .dbline 139
 006E 2F5F              subi R18,255  ; offset = 1
 0070 3F4F              sbci R19,255
 0072                   .dbline 140
 0072           ;       if(i>50000)
 0072 80E5              ldi R24,50000
 0074 93EC              ldi R25,195
 0076 8217              cp R24,R18
 0078 9307              cpc R25,R19
 007A 10F4              brsh L24
 007C                   .dbline 141
 007C 0027              clr R16
 007E 03C0              rjmp L20
 0080           L24:
 0080                   .dbline 141
 0080           L22:
 0080                   .dbline 138
 0080 5F9B              sbis 0xb,7
 0082 F5CF              rjmp L21
 0084                   .dbline 141
 0084           ;               return 0x00;};    // Wait for data to come   
 0084                   .dbline 142
 0084           ;    temp=UDR;
 0084 0CB1              in R16,0xc
 0086                   .dbline 143
 0086           ;    return temp;
 0086                   .dbline -2
 0086           L20:
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r temp 16 c
 0088                   .dbsym r i 18 i
 0088                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -