📄 atmege16.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 3FE8 CPI R30,0xF8
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E014D CALL _main
_exit:
004A CFFF RJMP _exit
_Delay:
i --> R20
uidata --> R22
time --> R16
004B 940E016D CALL push_gset2
FILE: D:\avr_prm\ATmege16\ma16.c
(0001) //ICC-AVR application builder : 2006-10-21 上午 03:16:49
(0002) // Target : M16
(0003) // Crystal: 12.000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) #define TRUE 1
(0009) #define FALSE 0
(0010) //#define baud 0x4d
(0011) //#define fosc 12000000
(0012) //#define baud 9600
(0013) #define Uchar unsigned char
(0014) struct data //位定义
(0015) {
(0016) unsigned bit0:1;
(0017) unsigned bit1:1;
(0018) unsigned bit2:1;
(0019) unsigned bit3:1;
(0020) unsigned bit4:1;
(0021) unsigned bit5:1;
(0022) unsigned bit6:1;
(0023) unsigned bit7:1;
(0024) }bit_flag;
(0025) #define send_busy_flag bit_flag.bit0
(0026) #define GPS_validframe_flag bit_flag.bit1
(0027) #define receive_data_flag bit_flag.bit2
(0028) #define GPS_datalen 70 ///70 个有效数据
(0029)
(0030) Uchar GPS_status_frame;
(0031) Uchar GPS_receive_buffer[72];
(0032) Uchar GPS_send_buffer[72];
(0033) Uchar GPS_data_conut;
(0034) Uchar GPS_data_start;
(0035) Uchar GPS_data_end;
(0036)
(0037) Uchar *com_send_ptr;
(0038) Uchar com_datasen_len;
(0039)
(0040) void Delay(Uchar time)
(0041) {
(0042) int i,uidata=10000;
004D E160 LDI R22,0x10
004E E277 LDI R23,0x27
(0043) for(i=0;i<time;i++)
004F 2744 CLR R20
0050 2755 CLR R21
0051 C009 RJMP 0x005B
(0044) while(--uidata)
(0045) {
(0046) asm("nop");
0052 0000 NOP
0053 01CB MOVW R24,R22
0054 9701 SBIW R24,1
0055 01BC MOVW R22,R24
0056 3060 CPI R22,0
0057 0767 CPC R22,R23
0058 F7C9 BNE 0x0052
0059 5F4F SUBI R20,0xFF
005A 4F5F SBCI R21,0xFF
005B 2E20 MOV R2,R16
005C 2433 CLR R3
005D 1542 CP R20,R2
005E 0553 CPC R21,R3
005F F39C BLT 0x0053
(0047) }
(0048) asm("nop");
0060 0000 NOP
(0049) asm("nop");
0061 0000 NOP
(0050) asm("nop");
0062 0000 NOP
0063 940E0164 CALL pop_gset2
0065 9508 RET
(0051) }
(0052)
(0053) void port_init(void)
(0054) {
(0055) DDRA = 0xFF; // Set to ouput
_port_init:
0066 EF8F LDI R24,0xFF
0067 BB8A OUT 0x1A,R24
(0056) PORTA = 0x00;
0068 2422 CLR R2
0069 BA2B OUT 0x1B,R2
(0057) DDRB = 0xFF; // Set to ouput
006A BB87 OUT 0x17,R24
(0058) PORTB = 0x00; // Startup pattern
006B BA28 OUT 0x18,R2
(0059) PORTC = 0x00; //m103 output only
006C BA25 OUT 0x15,R2
(0060) DDRC = 0x00;
006D BA24 OUT 0x14,R2
(0061) PORTD = 0x00;
006E BA22 OUT 0x12,R2
(0062) DDRD = 0x80;
006F E880 LDI R24,0x80
0070 BB81 OUT 0x11,R24
0071 9508 RET
(0063) }
(0064) void uart0_init(void)
(0065) {
(0066) UCSRA=0x00;
_uart0_init:
0072 2422 CLR R2
0073 B82B OUT 0x0B,R2
(0067) //UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
(0068) UCSRB=0xd8;
0074 ED88 LDI R24,0xD8
0075 B98A OUT 0x0A,R24
(0069) UBRRH=0x00;
0076 BC20 OUT 0x20,R2
(0070) UBRRL=0x33;
0077 E383 LDI R24,0x33
0078 B989 OUT 0x09,R24
(0071) //UCSRC| = BIT(URSEL);
(0072) UCSRC=BIT(URSEL)|0x06;
0079 E886 LDI R24,0x86
007A BD80 OUT 0x20,R24
007B 9508 RET
_uart0_rx_isr:
007C 922A ST R2,-Y
007D 938A ST R24,-Y
007E 939A ST R25,-Y
007F 93EA ST R30,-Y
0080 93FA ST R31,-Y
0081 B62F IN R2,0x3F
0082 922A ST R2,-Y
(0073) }
(0074) #pragma interrupt_handler uart0_rx_isr:12
(0075) #pragma interrupt_handler uart0_tx_isr:14
(0076) void uart0_rx_isr(void)
(0077) {
(0078) UCSRA|=(1<<RXC);//清接收中断标志
0083 9A5F SBI 0x0B,7
(0079) if(GPS_validframe_flag)
0084 918000F7 LDS R24,bit_flag
0086 9586 LSR R24
0087 7081 ANDI R24,1
0088 F009 BEQ 0x008A
(0080) {return;}
0089 C04F RJMP 0x00D9
(0081) if(GPS_status_frame==0x00)//////////////接收数据起始字符68H
008A 902000F6 LDS R2,GPS_status_frame
008C 2022 TST R2
008D F491 BNE 0x00A0
(0082) {
(0083) GPS_data_start=UDR;
008E B02C IN R2,0x0C
008F 92200064 STS GPS_data_start,R2
(0084) if(GPS_data_start!=0x24)
0091 2D82 MOV R24,R2
0092 3284 CPI R24,0x24
0093 F021 BEQ 0x0098
(0085) {
(0086) GPS_status_frame=0x00;
0094 2422 CLR R2
0095 922000F6 STS GPS_status_frame,R2
(0087) }
0097 C041 RJMP 0x00D9
(0088) else
(0089) {
(0090) GPS_status_frame=0x01;
0098 E081 LDI R24,1
0099 938000F6 STS GPS_status_frame,R24
(0091) GPS_receive_buffer[0]=GPS_data_start;
009B 90200064 LDS R2,GPS_data_start
009D 922000AE STS GPS_receive_buffer,R2
(0092) }
(0093) }
009F C039 RJMP 0x00D9
(0094) else if(GPS_status_frame==0x01)//////////开始接收数据
00A0 918000F6 LDS R24,GPS_status_frame
00A2 3081 CPI R24,1
00A3 F4A1 BNE 0x00B8
(0095) {
(0096) GPS_receive_buffer[GPS_data_conut]=UDR;
00A4 EA8E LDI R24,0xAE
00A5 E090 LDI R25,0
00A6 91E00065 LDS R30,GPS_data_conut
00A8 27FF CLR R31
00A9 0FE8 ADD R30,R24
00AA 1FF9 ADC R31,R25
00AB B02C IN R2,0x0C
00AC 8220 STD Z+0,R2
(0097) GPS_data_conut++;
00AD 91800065 LDS R24,GPS_data_conut
00AF 5F8F SUBI R24,0xFF
00B0 93800065 STS GPS_data_conut,R24
(0098) if(GPS_data_conut==GPS_datalen+1)
00B2 3487 CPI R24,0x47
00B3 F529 BNE 0x00D9
(0099) {
(0100) GPS_status_frame=0x02;
00B4 E082 LDI R24,2
00B5 938000F6 STS GPS_status_frame,R24
(0101) }
(0102) }
00B7 C021 RJMP 0x00D9
(0103) else if(GPS_status_frame==0x02)
00B8 918000F6 LDS R24,GPS_status_frame
00BA 3082 CPI R24,2
00BB F4E9 BNE 0x00D9
(0104) {
(0105) GPS_data_end=UDR;
00BC B02C IN R2,0x0C
00BD 92200063 STS GPS_data_end,R2
(0106) if(GPS_data_end!=0x0a)
00BF 2D82 MOV R24,R2
00C0 308A CPI R24,0xA
00C1 F031 BEQ 0x00C8
(0107) {
(0108) GPS_validframe_flag=FALSE;
00C2 918000F7 LDS R24,bit_flag
00C4 7F8D ANDI R24,0xFD
00C5 938000F7 STS bit_flag,R24
(0109) }
00C7 C009 RJMP 0x00D1
(0110) else
(0111) {
(0112) GPS_receive_buffer[71]=GPS_data_end;
00C8 90200063 LDS R2,GPS_data_end
00CA 922000F5 STS 0xF5,R2
(0113) GPS_validframe_flag=TRUE;
00CC 918000F7 LDS R24,bit_flag
00CE 6082 ORI R24,2
00CF 938000F7 STS bit_flag,R24
(0114) }
(0115) GPS_status_frame=0x00;
00D1 2422 CLR R2
00D2 922000F6 STS GPS_status_frame,R2
(0116) receive_data_flag=TRUE;
00D4 918000F7 LDS R24,bit_flag
00D6 6084 ORI R24,4
00D7 938000F7 STS bit_flag,R24
(0117) }
00D9 9029 LD R2,Y+
00DA BE2F OUT 0x3F,R2
00DB 91F9 LD R31,Y+
00DC 91E9 LD R30,Y+
00DD 9199 LD R25,Y+
00DE 9189 LD R24,Y+
00DF 9029 LD R2,Y+
00E0 9518 RETI
_uart0_tx_isr:
00E1 922A ST R2,-Y
00E2 923A ST R3,-Y
00E3 938A ST R24,-Y
00E4 939A ST R25,-Y
00E5 93EA ST R30,-Y
00E6 93FA ST R31,-Y
00E7 B62F IN R2,0x3F
00E8 922A ST R2,-Y
(0118) }
(0119) void uart0_tx_isr(void)
(0120) {
(0121) UCSRA|=(1<<TXC);//清发送中断标志
00E9 9A5E SBI 0x0B,6
(0122) if(com_datasen_len>0)/////////////数据缓冲区数据没有发送完毕
00EA 2422 CLR R2
00EB 90300060 LDS R3,com_datasen_len
00ED 1423 CP R2,R3
00EE F488 BCC 0x0100
(0123) {
(0124) UDR=*com_send_ptr;
00EF 91E00061 LDS R30,com_send_ptr
00F1 91F00062 LDS R31,com_send_ptr+1
00F3 8020 LDD R2,Z+0
00F4 B82C OUT 0x0C,R2
(0125) com_send_ptr++;
00F5 01CF MOVW R24,R30
00F6 9601 ADIW R24,1
00F7 93900062 STS com_send_ptr+1,R25
00F9 93800061 STS com_send_ptr,R24
(0126) com_datasen_len--;
00FB 2D83 MOV R24,R3
00FC 5081 SUBI R24,1
00FD 93800060 STS com_datasen_len,R24
(0127) }
00FF C005 RJMP 0x0105
(0128) else
(0129) {
(0130) send_busy_flag=FALSE;
0100 918000F7 LDS R24,bit_flag
0102 7F8E ANDI R24,0xFE
0103 938000F7 STS bit_flag,R24
(0131) }
0105 9029 LD R2,Y+
0106 BE2F OUT 0x3F,R2
0107 91F9 LD R31,Y+
0108 91E9 LD R30,Y+
0109 9199 LD R25,Y+
010A 9189 LD R24,Y+
010B 9039 LD R3,Y+
010C 9029 LD R2,Y+
010D 9518 RETI
(0132) }
(0133) void init_devices(void)
(0134) {
(0135) CLI(); //disable all interrupts
_init_devices:
010E 94F8 BCLR 7
(0136) port_init();
010F DF56 RCALL _port_init
(0137) uart0_init();
0110 DF61 RCALL _uart0_init
(0138) OSCCAL=0xb9;
0111 EB89 LDI R24,0xB9
0112 BF81 OUT 0x31,R24
(0139) send_busy_flag=FALSE;
0113 918000F7 LDS R24,bit_flag
0115 7F8E ANDI R24,0xFE
0116 938000F7 STS bit_flag,R24
(0140) MCUCR = 0x00;
0118 2422 CLR R2
0119 BE25 OUT 0x35,R2
(0141) GICR = 0x00;
011A BE2B OUT 0x3B,R2
(0142) TIMSK = 0x00; //timer interrupt sources
011B BE29 OUT 0x39,R2
(0143) SEI(); //re-enable interrupts
011C 9478 BSET 7
011D 9508 RET
(0144) //all peripherals are now initialized
(0145) }
(0146) void system_init()
(0147) {
(0148) GPS_data_conut=1;
_system_init:
011E E081 LDI R24,1
011F 93800065 STS GPS_data_conut,R24
(0149) GPS_status_frame=0x00;
0121 2422 CLR R2
0122 922000F6 STS GPS_status_frame,R2
(0150) GPS_validframe_flag=FALSE;
0124 918000F7 LDS R24,bit_flag
0126 7F8D ANDI R24,0xFD
0127 938000F7 STS bit_flag,R24
(0151) receive_data_flag=FALSE;
0129 7F8B ANDI R24,0xFB
012A 938000F7 STS bit_flag,R24
012C 9508 RET
(0152) }
(0153) void send_com_data()
(0154) {
(0155) if(!send_busy_flag)
_send_com_data:
012D 918000F7 LDS R24,bit_flag
012F 7081 ANDI R24,1
0130 F4D9 BNE 0x014C
(0156) {
(0157) com_datasen_len=72;
0131 E488 LDI R24,0x48
0132 93800060 STS com_datasen_len,R24
(0158) com_datasen_len--;
0134 5081 SUBI R24,1
0135 93800060 STS com_datasen_len,R24
(0159) com_send_ptr=GPS_receive_buffer;
0137 EA8E LDI R24,0xAE
0138 E090 LDI R25,0
0139 93900062 STS com_send_ptr+1,R25
013B 93800061 STS com_send_ptr,R24
(0160) send_busy_flag=TRUE;
013D 918000F7 LDS R24,bit_flag
013F 6081 ORI R24,1
0140 938000F7 STS bit_flag,R24
(0161) UDR=*com_send_ptr++;
0142 91E00061 LDS R30,com_send_ptr
0144 91F00062 LDS R31,com_send_ptr+1
0146 9021 LD R2,Z+
0147 93F00062 STS com_send_ptr+1,R31
0149 93E00061 STS com_send_ptr,R30
014B B82C OUT 0x0C,R2
(0162) }
014C 9508 RET
(0163) }
(0164) void main(void)
(0165) {
(0166) Uchar i;
(0167) init_devices();
_main:
i --> Y+1
014D DFC0 RCALL _init_devices
(0168) system_init();
014E DFCF RCALL _system_init
014F C012 RJMP 0x0162
(0169) while(1)
(0170) {
(0171) if(receive_data_flag)
0150 918000F7 LDS R24,bit_flag
0152 9586 LSR R24
0153 9586 LSR R24
0154 7081 ANDI R24,1
0155 F061 BEQ 0x0162
(0172) {
(0173) send_com_data();
0156 DFD6 RCALL _send_com_data
(0174) receive_data_flag=FALSE;
0157 918000F7 LDS R24,bit_flag
0159 7F8B ANDI R24,0xFB
015A 938000F7 STS bit_flag,R24
(0175) GPS_validframe_flag=FALSE;
015C 7F8D ANDI R24,0xFD
015D 938000F7 STS bit_flag,R24
(0176) GPS_data_conut=1;
FILE: <library>
015F E081 LDI R24,1
0160 93800065 STS GPS_data_conut,R24
0162 CFED RJMP 0x0150
0163 9508 RET
pop_gset2:
0164 E0E2 LDI R30,2
0165 940C0173 JMP pop
push_gset5:
0167 92FA ST R15,-Y
0168 92EA ST R14,-Y
push_gset4:
0169 92DA ST R13,-Y
016A 92CA ST R12,-Y
push_gset3:
016B 92BA ST R11,-Y
016C 92AA ST R10,-Y
push_gset2:
016D 937A ST R23,-Y
016E 936A ST R22,-Y
push_gset1:
016F 935A ST R21,-Y
0170 934A ST R20,-Y
0171 9508 RET
pop_gset1:
0172 E0E1 LDI R30,1
pop:
0173 9149 LD R20,Y+
0174 9159 LD R21,Y+
0175 FDE0 SBRC R30,0
0176 9508 RET
0177 9169 LD R22,Y+
0178 9179 LD R23,Y+
0179 FDE1 SBRC R30,1
017A 9508 RET
017B 90A9 LD R10,Y+
017C 90B9 LD R11,Y+
017D FDE2 SBRC R30,2
017E 9508 RET
017F 90C9 LD R12,Y+
0180 90D9 LD R13,Y+
0181 FDE3 SBRC R30,3
0182 9508 RET
0183 90E9 LD R14,Y+
0184 90F9 LD R15,Y+
0185 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -