📄 serial.lis
字号:
.module serial.c
.area text(rom, con, rel)
0000 .dbfile E:\Program\gps\serial.c
0000 .dbfunc e uart0_init _uart0_init fV
.even
0000 _uart0_init::
0000 .dbline -1
0000 .dbline 24
0000 ; //ICC-AVR application builder : 2006-5-8 20:10:07
0000 ; // Target : M16
0000 ; // Crystal: 8Mhz
0000 ;
0000 ; #include <iom32v.h>
0000 ; #include <macros.h>
0000 ; #include <serial.h>
0000 ;
0000 ; #define max 1024
0000 ;
0000 ; /* Static Variables */
0000 ; int count;
0000 ; char rcv_buf[max];
0000 ; int UART_wp;//write data to receive buffer
0000 ; int read_pt;//read pointer: read data from receive buffer
0000 ;
0000 ;
0000 ; //UART0 initialize
0000 ; // desired baud rate: 4800
0000 ; // actual: baud rate:4800 (0.0%)
0000 ; // char size: 8 bit
0000 ; // parity: Disabled
0000 ; void uart0_init(void)
0000 ; {
0000 .dbline 26
0000 ;
0000 ; UCSRB = 0x00; //disable while setting baud rate
0000 2224 clr R2
0002 2AB8 out 0xa,R2
0004 .dbline 27
0004 ; UCSRA = 0x00;
0004 2BB8 out 0xb,R2
0006 .dbline 28
0006 ; UCSRC = BIT(URSEL) | 0x06;
0006 86E8 ldi R24,134
0008 80BD out 0x20,R24
000A .dbline 29
000A ; UBRRL = 0XCF; //set baud rate lo
000A 8FEC ldi R24,207
000C 89B9 out 0x9,R24
000E .dbline 30
000E ; UBRRH = 0X00; //set baud rate hi
000E 20BC out 0x20,R2
0010 .dbline 31
0010 ; UCSRB = 0x90;//10010000
0010 80E9 ldi R24,144
0012 8AB9 out 0xa,R24
0014 .dbline 32
0014 ; UART_wp = 0;
0014 3324 clr R3
0016 30920300 sts _UART_wp+1,R3
001A 20920200 sts _UART_wp,R2
001E .dbline 33
001E ; read_pt = 0;
001E 30920100 sts _read_pt+1,R3
0022 20920000 sts _read_pt,R2
0026 .dbline -2
0026 L1:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
.area vector(rom, abs)
.org 52
0034 0C941400 jmp _uart0_rx_isr
.area text(rom, con, rel)
0028 .dbfile E:\Program\gps\serial.c
0028 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
0028 _uart0_rx_isr::
0028 2A92 st -y,R2
002A 3A92 st -y,R3
002C 8A93 st -y,R24
002E 9A93 st -y,R25
0030 EA93 st -y,R30
0032 FA93 st -y,R31
0034 2FB6 in R2,0x3f
0036 2A92 st -y,R2
0038 .dbline -1
0038 .dbline 38
0038 ; }
0038 ;
0038 ; #pragma interrupt_handler uart0_rx_isr:14
0038 ; void uart0_rx_isr(void)
0038 ; {
0038 .dbline 40
0038 ; //uart has received a character in UDR
0038 ; if (count<max)
0038 80910404 lds R24,_count
003C 90910504 lds R25,_count+1
0040 8030 cpi R24,0
0042 E4E0 ldi R30,4
0044 9E07 cpc R25,R30
0046 D4F4 brge L3
0048 .dbline 42
0048 ; /* read the received data */
0048 ; {
0048 .dbline 43
0048 ; rcv_buf[UART_wp++]=UDR; /* store received data in buffer */
0048 20900200 lds R2,_UART_wp
004C 30900300 lds R3,_UART_wp+1
0050 C101 movw R24,R2
0052 0196 adiw R24,1
0054 90930300 sts _UART_wp+1,R25
0058 80930200 sts _UART_wp,R24
005C 80E0 ldi R24,<_rcv_buf
005E 90E0 ldi R25,>_rcv_buf
0060 F101 movw R30,R2
0062 E80F add R30,R24
0064 F91F adc R31,R25
0066 2CB0 in R2,0xc
0068 2082 std z+0,R2
006A .dbline 44
006A ; count++;
006A 80910404 lds R24,_count
006E 90910504 lds R25,_count+1
0072 0196 adiw R24,1
0074 90930504 sts _count+1,R25
0078 80930404 sts _count,R24
007C .dbline 45
007C ; }
007C L3:
007C .dbline 48
007C 80910200 lds R24,_UART_wp
0080 90910300 lds R25,_UART_wp+1
0084 8030 cpi R24,0
0086 E4E0 ldi R30,4
0088 9E07 cpc R25,R30
008A 31F4 brne L5
008C .dbline 49
008C 2224 clr R2
008E 3324 clr R3
0090 30920300 sts _UART_wp+1,R3
0094 20920200 sts _UART_wp,R2
0098 L5:
0098 .dbline -2
0098 L2:
0098 2990 ld R2,y+
009A 2FBE out 0x3f,R2
009C F991 ld R31,y+
009E E991 ld R30,y+
00A0 9991 ld R25,y+
00A2 8991 ld R24,y+
00A4 3990 ld R3,y+
00A6 2990 ld R2,y+
00A8 .dbline 0 ; func end
00A8 1895 reti
00AA .dbend
00AA .dbfunc e Read_buf _Read_buf fc
00AA ; temp -> R16
.even
00AA _Read_buf::
00AA .dbline -1
00AA .dbline 61
00AA ;
00AA ; /* calculate buffer index */
00AA ; if (UART_wp==max)
00AA ; UART_wp = 0; // full return to the start
00AA ; }
00AA ;
00AA ; /*********************************************************************
00AA ; * read data from buffer
00AA ; description: 1 close interrupt
00AA ; 2 whether there are data to be read
00AA ; 3 read data, and count--
00AA ; 4 return the data
00AA ; 5 rp point to next character
00AA ; **********************************************************************/
00AA ; char Read_buf(void)
00AA ; {
00AA L8:
00AA .dbline 63
00AA L9:
00AA .dbline 63
00AA ; char temp;
00AA ; while ( !count);//if no data ,wait for new data
00AA 20900404 lds R2,_count
00AE 30900504 lds R3,_count+1
00B2 2220 tst R2
00B4 11F4 brne X0
00B6 3320 tst R3
00B8 C1F3 breq L8
00BA X0:
00BA .dbline 64
00BA ; count--;
00BA 80910404 lds R24,_count
00BE 90910504 lds R25,_count+1
00C2 0197 sbiw R24,1
00C4 90930504 sts _count+1,R25
00C8 80930404 sts _count,R24
00CC .dbline 65
00CC ; temp=rcv_buf[read_pt++];
00CC 20900000 lds R2,_read_pt
00D0 30900100 lds R3,_read_pt+1
00D4 C101 movw R24,R2
00D6 0196 adiw R24,1
00D8 90930100 sts _read_pt+1,R25
00DC 80930000 sts _read_pt,R24
00E0 80E0 ldi R24,<_rcv_buf
00E2 90E0 ldi R25,>_rcv_buf
00E4 F101 movw R30,R2
00E6 E80F add R30,R24
00E8 F91F adc R31,R25
00EA 0081 ldd R16,z+0
00EC .dbline 66
00EC ; if (read_pt==1024)
00EC 80910000 lds R24,_read_pt
00F0 90910100 lds R25,_read_pt+1
00F4 8030 cpi R24,0
00F6 E4E0 ldi R30,4
00F8 9E07 cpc R25,R30
00FA 31F4 brne L11
00FC .dbline 67
00FC ; read_pt=0;
00FC 2224 clr R2
00FE 3324 clr R3
0100 30920100 sts _read_pt+1,R3
0104 20920000 sts _read_pt,R2
0108 L11:
0108 .dbline 68
0108 ; return ( temp);
0108 .dbline -2
0108 L7:
0108 .dbline 0 ; func end
0108 0895 ret
010A .dbsym r temp 16 c
010A .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\Program\gps\serial.c
0000 _read_pt::
0000 .blkb 2
0002 .dbsym e read_pt _read_pt I
0002 _UART_wp::
0002 .blkb 2
0004 .dbsym e UART_wp _UART_wp I
0004 _rcv_buf::
0004 .blkb 1024
0404 .dbsym e rcv_buf _rcv_buf A[1024:1024]c
0404 _count::
0404 .blkb 2
0406 .dbsym e count _count I
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -