📄 serial.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 + -