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

📄 serial.lis

📁 用avr单片机接收GPS的数据的c语言程序
💻 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 + -