📄 ma16.lis
字号:
.module ma16.c
.area text(rom, con, rel)
0000 .dbfile D:\avr_prm\ATmege16\ma16.c
0000 .dbfunc e Delay _Delay fV
0000 ; i -> R20,R21
0000 ; uidata -> R22,R23
0000 ; time -> R16
.even
0000 _Delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 41
0004 ; //ICC-AVR application builder : 2006-10-21 上午 03:16:49
0004 ; // Target : M16
0004 ; // Crystal: 12.000Mhz
0004 ;
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ;
0004 ; #define TRUE 1
0004 ; #define FALSE 0
0004 ; //#define baud 0x4d
0004 ; //#define fosc 12000000
0004 ; //#define baud 9600
0004 ; #define Uchar unsigned char
0004 ; struct data //位定义
0004 ; {
0004 ; unsigned bit0:1;
0004 ; unsigned bit1:1;
0004 ; unsigned bit2:1;
0004 ; unsigned bit3:1;
0004 ; unsigned bit4:1;
0004 ; unsigned bit5:1;
0004 ; unsigned bit6:1;
0004 ; unsigned bit7:1;
0004 ; }bit_flag;
0004 ; #define send_busy_flag bit_flag.bit0
0004 ; #define GPS_validframe_flag bit_flag.bit1
0004 ; #define receive_data_flag bit_flag.bit2
0004 ; #define GPS_datalen 70 ///70 个有效数据
0004 ;
0004 ; Uchar GPS_status_frame;
0004 ; Uchar GPS_receive_buffer[72];
0004 ; Uchar GPS_send_buffer[72];
0004 ; Uchar GPS_data_conut;
0004 ; Uchar GPS_data_start;
0004 ; Uchar GPS_data_end;
0004 ;
0004 ; Uchar *com_send_ptr;
0004 ; Uchar com_datasen_len;
0004 ;
0004 ; void Delay(Uchar time)
0004 ; {
0004 .dbline 42
0004 ; int i,uidata=10000;
0004 60E1 ldi R22,10000
0006 77E2 ldi R23,39
0008 .dbline 43
0008 ; for(i=0;i<time;i++)
0008 4427 clr R20
000A 5527 clr R21
000C 09C0 xjmp L5
000E L6:
000E .dbline 45
000E .dbline 46
000E 0000 nop
0010 .dbline 47
0010 L7:
0010 .dbline 44
0010 CB01 movw R24,R22
0012 0197 sbiw R24,1
0014 BC01 movw R22,R24
0016 6030 cpi R22,0
0018 6707 cpc R22,R23
001A C9F7 brne L6
001C X0:
001C L3:
001C .dbline 43
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 43
0020 202E mov R2,R16
0022 3324 clr R3
0024 4215 cp R20,R2
0026 5305 cpc R21,R3
0028 9CF3 brlt L7
002A .dbline 48
002A ; while(--uidata)
002A ; {
002A ; asm("nop");
002A ; }
002A ; asm("nop");
002A 0000 nop
002C .dbline 49
002C ; asm("nop");
002C 0000 nop
002E .dbline 50
002E ; asm("nop");
002E 0000 nop
0030 .dbline -2
0030 L1:
0030 0E940000 xcall pop_gset2
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 20 I
0036 .dbsym r uidata 22 I
0036 .dbsym r time 16 c
0036 .dbend
0036 .dbfunc e port_init _port_init fV
.even
0036 _port_init::
0036 .dbline -1
0036 .dbline 54
0036 ; }
0036 ;
0036 ; void port_init(void)
0036 ; {
0036 .dbline 55
0036 ; DDRA = 0xFF; // Set to ouput
0036 8FEF ldi R24,255
0038 8ABB out 0x1a,R24
003A .dbline 56
003A ; PORTA = 0x00;
003A 2224 clr R2
003C 2BBA out 0x1b,R2
003E .dbline 57
003E ; DDRB = 0xFF; // Set to ouput
003E 87BB out 0x17,R24
0040 .dbline 58
0040 ; PORTB = 0x00; // Startup pattern
0040 28BA out 0x18,R2
0042 .dbline 59
0042 ; PORTC = 0x00; //m103 output only
0042 25BA out 0x15,R2
0044 .dbline 60
0044 ; DDRC = 0x00;
0044 24BA out 0x14,R2
0046 .dbline 61
0046 ; PORTD = 0x00;
0046 22BA out 0x12,R2
0048 .dbline 62
0048 ; DDRD = 0x80;
0048 80E8 ldi R24,128
004A 81BB out 0x11,R24
004C .dbline -2
004C L9:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e uart0_init _uart0_init fV
.even
004E _uart0_init::
004E .dbline -1
004E .dbline 65
004E ; }
004E ; void uart0_init(void)
004E ; {
004E .dbline 66
004E ; UCSRA=0x00;
004E 2224 clr R2
0050 2BB8 out 0xb,R2
0052 .dbline 68
0052 ; //UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
0052 ; UCSRB=0xd8;
0052 88ED ldi R24,216
0054 8AB9 out 0xa,R24
0056 .dbline 69
0056 ; UBRRH=0x00;
0056 20BC out 0x20,R2
0058 .dbline 70
0058 ; UBRRL=0x33;
0058 83E3 ldi R24,51
005A 89B9 out 0x9,R24
005C .dbline 72
005C ; //UCSRC| = BIT(URSEL);
005C ; UCSRC=BIT(URSEL)|0x06;
005C 86E8 ldi R24,134
005E 80BD out 0x20,R24
0060 .dbline -2
0060 L10:
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbend
.area vector(rom, abs)
.org 44
002C 0C943100 jmp _uart0_rx_isr
.area text(rom, con, rel)
0062 .dbfile D:\avr_prm\ATmege16\ma16.c
.area vector(rom, abs)
.org 52
0034 0C949600 jmp _uart0_tx_isr
.area text(rom, con, rel)
0062 .dbfile D:\avr_prm\ATmege16\ma16.c
0062 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
0062 _uart0_rx_isr::
0062 2A92 st -y,R2
0064 8A93 st -y,R24
0066 9A93 st -y,R25
0068 EA93 st -y,R30
006A FA93 st -y,R31
006C 2FB6 in R2,0x3f
006E 2A92 st -y,R2
0070 .dbline -1
0070 .dbline 77
0070 ; }
0070 ; #pragma interrupt_handler uart0_rx_isr:12
0070 ; #pragma interrupt_handler uart0_tx_isr:14
0070 ; void uart0_rx_isr(void)
0070 ; {
0070 .dbline 78
0070 ; UCSRA|=(1<<RXC);//清接收中断标志
0070 5F9A sbi 0xb,7
0072 .dbline 79
0072 ; if(GPS_validframe_flag)
0072 80919700 lds R24,_bit_flag
0076 8695 lsr R24
0078 8170 andi R24,1
007A 09F0 breq L12
007C .dbline 80
007C ; {return;}
007C .dbline 80
007C 4FC0 xjmp L11
007E L12:
007E .dbline 81
007E ; if(GPS_status_frame==0x00)//////////////接收数据起始字符68H
007E 20909600 lds R2,_GPS_status_frame
0082 2220 tst R2
0084 91F4 brne L14
0086 .dbline 82
0086 ; {
0086 .dbline 83
0086 ; GPS_data_start=UDR;
0086 2CB0 in R2,0xc
0088 20920400 sts _GPS_data_start,R2
008C .dbline 84
008C ; if(GPS_data_start!=0x24)
008C 822D mov R24,R2
008E 8432 cpi R24,36
0090 21F0 breq L16
0092 .dbline 85
0092 ; {
0092 .dbline 86
0092 ; GPS_status_frame=0x00;
0092 2224 clr R2
0094 20929600 sts _GPS_status_frame,R2
0098 .dbline 87
0098 ; }
0098 41C0 xjmp L15
009A L16:
009A .dbline 89
009A ; else
009A ; {
009A .dbline 90
009A ; GPS_status_frame=0x01;
009A 81E0 ldi R24,1
009C 80939600 sts _GPS_status_frame,R24
00A0 .dbline 91
00A0 ; GPS_receive_buffer[0]=GPS_data_start;
00A0 20900400 lds R2,_GPS_data_start
00A4 20924E00 sts _GPS_receive_buffer,R2
00A8 .dbline 92
00A8 ; }
00A8 .dbline 93
00A8 ; }
00A8 39C0 xjmp L15
00AA L14:
00AA .dbline 94
00AA ; else if(GPS_status_frame==0x01)//////////开始接收数据
00AA 80919600 lds R24,_GPS_status_frame
00AE 8130 cpi R24,1
00B0 A1F4 brne L18
00B2 .dbline 95
00B2 ; {
00B2 .dbline 96
00B2 ; GPS_receive_buffer[GPS_data_conut]=UDR;
00B2 80E0 ldi R24,<_GPS_receive_buffer
00B4 90E0 ldi R25,>_GPS_receive_buffer
00B6 E0910500 lds R30,_GPS_data_conut
00BA FF27 clr R31
00BC E80F add R30,R24
00BE F91F adc R31,R25
00C0 2CB0 in R2,0xc
00C2 2082 std z+0,R2
00C4 .dbline 97
00C4 ; GPS_data_conut++;
00C4 80910500 lds R24,_GPS_data_conut
00C8 8F5F subi R24,255 ; addi 1
00CA 80930500 sts _GPS_data_conut,R24
00CE .dbline 98
00CE ; if(GPS_data_conut==GPS_datalen+1)
00CE 8734 cpi R24,71
00D0 29F5 brne L19
00D2 .dbline 99
00D2 ; {
00D2 .dbline 100
00D2 ; GPS_status_frame=0x02;
00D2 82E0 ldi R24,2
00D4 80939600 sts _GPS_status_frame,R24
00D8 .dbline 101
00D8 ; }
00D8 .dbline 102
00D8 ; }
00D8 21C0 xjmp L19
00DA L18:
00DA .dbline 103
00DA ; else if(GPS_status_frame==0x02)
00DA 80919600 lds R24,_GPS_status_frame
00DE 8230 cpi R24,2
00E0 E9F4 brne L22
00E2 .dbline 104
00E2 ; {
00E2 .dbline 105
00E2 ; GPS_data_end=UDR;
00E2 2CB0 in R2,0xc
00E4 20920300 sts _GPS_data_end,R2
00E8 .dbline 106
00E8 ; if(GPS_data_end!=0x0a)
00E8 822D mov R24,R2
00EA 8A30 cpi R24,10
00EC 31F0 breq L24
00EE .dbline 107
00EE ; {
00EE .dbline 108
00EE ; GPS_validframe_flag=FALSE;
00EE 80919700 lds R24,_bit_flag
00F2 8D7F andi R24,253
00F4 80939700 sts _bit_flag,R24
00F8 .dbline 109
00F8 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -