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

📄 gps20080503icc.lst

📁 ATmega128的GPS例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
      61 E5CF      LDI	R28,0x5F
      62 E0D4      LDI	R29,4
      63 BFCD      OUT	0x3D,R28
      64 BFDE      OUT	0x3E,R29
      65 52C0      SUBI	R28,0x20
      66 40D0      SBCI	R29,0
      67 EA0A      LDI	R16,0xAA
      68 8308      STD	Y+0,R16
      69 2400      CLR	R0
      6A E7E4      LDI	R30,0x74
      6B E0F0      LDI	R31,0
      6C E011      LDI	R17,1
      6D 3AE3      CPI	R30,0xA3
      6E 07F1      CPC	R31,R17
      6F F011      BEQ	0x0072
      70 9201      ST	R0,Z+
      71 CFFB      RJMP	0x006D
      72 8300      STD	Z+0,R16
      73 EAEE      LDI	R30,0xAE
      74 E0F0      LDI	R31,0
      75 E6A0      LDI	R26,0x60
      76 E0B0      LDI	R27,0
      77 E010      LDI	R17,0
      78 E000      LDI	R16,0
      79 BF0B      OUT	0x3B,R16
      7A 3CE2      CPI	R30,0xC2
      7B 07F1      CPC	R31,R17
      7C F021      BEQ	0x0081
      7D 95C8      LPM
      7E 9631      ADIW	R30,1
      7F 920D      ST	R0,X+
      80 CFF9      RJMP	0x007A
      81 940E 026A CALL	_main
_exit:
      83 CFFF      RJMP	_exit
FILE: D:\SOURCE~1\gps20080503\initrialm16.h
(0001) //ICC-AVR application builder : 2007-6-27 10:26:06
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) /**************初始化m8函数***************/
(0006) #ifndef Initrial_M16_H
(0007) #define Initrial_M16_H
(0008) 
(0009) /**************************************************************
(0010) **函数名称	     :void init_devices(void)
(0011) **函数功能	     :初始化设备
(0012) **输入参数      :无
(0013) **返回值	     :无
(0014) **外定义变量:无
(0015) **调用的函数:无
(0016) **************************************************************/
(0017) void Init_Devices(void);
(0018) 
(0019) /**************************************************************
(0020) **函数名称	     :void port_init(void)
(0021) **函数功能      :初始化端口
(0022) **输入参数      :无
(0023) **返回值	     :无
(0024) **外定义变量:无
(0025) **调用的函数: Port_init();
(0026) **************************************************************/
(0027) void Port_Init(void);
(0028) void Init_Devices(void);
(0029) void uart0_init(void);
(0030) void uart0_rx_isr(void);
(0031) extern void Get_GPRMC_data(void);//提取GPRMC数据
(0032) 
(0033) 
(0034) //call this routine to initialize all peripherals
(0035) void Init_Devices(void)
(0036) {
(0037)  //stop errant interrupts until set up
(0038)  CLI(); //disable all interrupts
_Init_Devices:
      84 94F8      BCLR	7
(0039)  Port_Init();
      85 D007      RCALL	_Port_Init
(0040)  uart0_init();
      86 D014      RCALL	_uart0_init
(0041)  MCUCR = 0x00;
      87 2422      CLR	R2
      88 BE25      OUT	0x35,R2
(0042)  GICR  = 0x00;
      89 BE2B      OUT	0x3B,R2
(0043)  TIMSK = 0x00; //timer interrupt sources
      8A BE29      OUT	0x39,R2
(0044)  SEI(); //re-enable interrupts
      8B 9478      BSET	7
      8C 9508      RET
(0045)  //all peripherals are now initialized
(0046) }
(0047) 
(0048) void Port_Init(void)
(0049) {
(0050) 	PORTB = 0xFF;
_Port_Init:
      8D EF8F      LDI	R24,0xFF
      8E BB88      OUT	0x18,R24
(0051) 	DDRB  = 0xFF;
      8F BB87      OUT	0x17,R24
(0052) 	PORTC = 0x7F; //m103 output only
      90 E78F      LDI	R24,0x7F
      91 BB85      OUT	0x15,R24
(0053) 	DDRC  = 0x7F;
      92 BB84      OUT	0x14,R24
(0054) 	PORTD = 0xFF;
      93 EF8F      LDI	R24,0xFF
      94 BB82      OUT	0x12,R24
(0055) 	DDRD  = 0xFF;
      95 BB81      OUT	0x11,R24
(0056) 
(0057) 	DDRD &=~ BIT(PD0);
      96 9888      CBI	0x11,0
(0058) 	PORTD &= ~ BIT(PD0);
      97 9890      CBI	0x12,0
(0059) 	
(0060) 	DDRA &=~ BIT(PA1);//按键
      98 98D1      CBI	0x1A,1
(0061) 	DDRA &=~ BIT(PA3);
      99 98D3      CBI	0x1A,3
      9A 9508      RET
(0062) 	//PORTA &= ~ BIT(PA5);
(0063)  	//PORTA &= ~ BIT(PA7);
(0064) 	
(0065) 	
(0066)  
(0067) }
(0068) 
(0069) //UART0 initialize
(0070) // desired baud rate: 9600
(0071) // actual: baud rate:9615 (0.2%)
(0072) void uart0_init(void)
(0073) {
(0074)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
      9B 2422      CLR	R2
      9C B82A      OUT	0x0A,R2
(0075)  UCSRA = 0x00;
      9D B82B      OUT	0x0B,R2
(0076)  UCSRC = BIT(URSEL) | 0x06;
      9E E886      LDI	R24,0x86
      9F BD80      OUT	0x20,R24
(0077)  UBRRL = 0x33; //set baud rate lo
      A0 E383      LDI	R24,0x33
      A1 B989      OUT	0x09,R24
(0078)  UBRRH = 0x00; //set baud rate hi
      A2 BC20      OUT	0x20,R2
(0079)  UCSRB = 0x98;
      A3 E988      LDI	R24,0x98
      A4 B98A      OUT	0x0A,R24
      A5 9508      RET
_uart0_rx_isr:
  data                 --> R20
      A6 920A      ST	R0,-Y
      A7 921A      ST	R1,-Y
      A8 922A      ST	R2,-Y
      A9 923A      ST	R3,-Y
      AA 924A      ST	R4,-Y
      AB 925A      ST	R5,-Y
      AC 926A      ST	R6,-Y
      AD 927A      ST	R7,-Y
      AE 928A      ST	R8,-Y
      AF 929A      ST	R9,-Y
      B0 930A      ST	R16,-Y
      B1 931A      ST	R17,-Y
      B2 932A      ST	R18,-Y
      B3 933A      ST	R19,-Y
      B4 938A      ST	R24,-Y
      B5 939A      ST	R25,-Y
      B6 93AA      ST	R26,-Y
      B7 93BA      ST	R27,-Y
      B8 93EA      ST	R30,-Y
      B9 93FA      ST	R31,-Y
      BA B60F      IN	R0,0x3F
      BB 920A      ST	R0,-Y
      BC 934A      ST	R20,-Y
(0080) }
(0081) 
(0082) #pragma interrupt_handler uart0_rx_isr:12
(0083) void uart0_rx_isr(void)
(0084) {
(0085) 	char data;
(0086)  	data = UDR;
      BD B14C      IN	R20,0x0C
(0087) 	if(data == '$')//开始字符
      BE 3244      CPI	R20,0x24
      BF F441      BNE	0x00C8
(0088) 	{
(0089) 		usart_flag |= BIT(SINK0_START);
      C0 9180 007E LDS	R24,usart_flag
      C2 6081      ORI	R24,1
      C3 9380 007E STS	usart_flag,R24
(0090) 		sink0_count = 0;	
      C5 2422      CLR	R2
      C6 9220 007F STS	sink0_count,R2
(0091) 	}
(0092) 	if(usart_flag & BIT(SINK0_START))
      C8 9020 007E LDS	R2,usart_flag
      CA FE20      SBRS	R2,0
      CB C00D      RJMP	0x00D9
(0093) 	{
(0094) 		sink0_buf[sink0_count] = data; 
      CC E880      LDI	R24,0x80
      CD E090      LDI	R25,0
      CE 91E0 007F LDS	R30,sink0_count
      D0 27FF      CLR	R31
      D1 0FE8      ADD	R30,R24
      D2 1FF9      ADC	R31,R25
      D3 8340      STD	Z+0,R20
(0095) 		sink0_count ++;
      D4 9180 007F LDS	R24,sink0_count
      D6 5F8F      SUBI	R24,0xFF
      D7 9380 007F STS	sink0_count,R24
(0096) 	}
(0097) 	if(data == 0x0a)//换行结束字符
      D9 304A      CPI	R20,0xA
      DA F441      BNE	0x00E3
(0098) 	{
(0099) 		usart_flag &=~ BIT(SINK0_START);
      DB 9180 007E LDS	R24,usart_flag
      DD 7F8E      ANDI	R24,0xFE
      DE 9380 007E STS	usart_flag,R24
(0100) 		usart_flag |= BIT(SINK0_FINISH);
      E0 6082      ORI	R24,2
      E1 9380 007E STS	usart_flag,R24
(0101) 		
(0102) 	}
(0103) 	if(usart_flag & BIT(SINK0_FINISH))
      E3 9020 007E LDS	R2,usart_flag
      E5 FE21      SBRS	R2,1
      E6 C006      RJMP	0x00ED
(0104) 	{
(0105) 		Get_GPRMC_data();	
      E7 D4B5      RCALL	_Get_GPRMC_data
(0106) 		usart_flag &=~ BIT(SINK0_FINISH);			
      E8 9180 007E LDS	R24,usart_flag
      EA 7F8D      ANDI	R24,0xFD
      EB 9380 007E STS	usart_flag,R24
(0107) 	}
      ED 9149      LD	R20,Y+
      EE 9009      LD	R0,Y+
      EF BE0F      OUT	0x3F,R0
      F0 91F9      LD	R31,Y+
      F1 91E9      LD	R30,Y+
      F2 91B9      LD	R27,Y+
      F3 91A9      LD	R26,Y+
      F4 9199      LD	R25,Y+
      F5 9189      LD	R24,Y+
      F6 9139      LD	R19,Y+
      F7 9129      LD	R18,Y+
      F8 9119      LD	R17,Y+
      F9 9109      LD	R16,Y+
      FA 9099      LD	R9,Y+
      FB 9089      LD	R8,Y+
      FC 9079      LD	R7,Y+
      FD 9069      LD	R6,Y+
      FE 9059      LD	R5,Y+
      FF 9049      LD	R4,Y+
     100 9039      LD	R3,Y+
     101 9029      LD	R2,Y+
     102 9019      LD	R1,Y+
     103 9009      LD	R0,Y+
     104 9518      RETI
FILE: D:\SOURCE~1\gps20080503\delay.h
(0001) #ifndef	_DELAY_H
(0002) #define	_DELAY_H
(0003) 
(0004) // mcu:avr   crystal=8MHz
(0005) 
(0006) /**************************************************************
(0007) **函数功能:延时1us
(0008) **输入参数:无
(0009) **返回值:无
(0010) **在本函数外定义变量:无
(0011) **调用的函数:NOP()
(0012) **************************************************************/
(0013) void Delay_1us(void);
(0014) 
(0015) /**************************************************************
(0016) **函数功能:us级延时
(0017) **输入参数:xus:延时us数
(0018) **返回值:无
(0019) **在本函数外定义变量:无
(0020) **调用的函数:Delay_1us()
(0021) **************************************************************/
(0022) void Delay_Us(unsigned char xus);
(0023) 
(0024) /**************************************************************
(0025) **函数功能:延时1ms
(0026) **输入参数:无
(0027) **返回值:无
(0028) **在本函数外定义变量:无
(0029) **调用的函数:NOP()
(0030) **************************************************************/
(0031) void Delay_1ms(void);
(0032) 
(0033) /**************************************************************
(0034) **函数功能:ms级延时
(0035) **输入参数:xms:延时ms数
(0036) **返回值:无
(0037) **在本函数外定义变量:无
(0038) **调用的函数:Delay_1ms()
(0039) **************************************************************/
(0040) void Delay_Ms(unsigned int xms);
(0041) 
(0042) /**************************************************************
(0043) **函数功能:10us级延时
(0044) **输入参数:x10us:延时x10us数
(0045) **返回值:无
(0046) **在本函数外定义变量:无
(0047) **调用的函数:无
(0048) **************************************************************/
(0049) void Delay10us(Word x10us);
(0050) 
(0051) 
(0052) void Delay_1us()
(0053) {
(0054) 	NOP();
_Delay_1us:
     105 0000      NOP
     106 9508      RET
_Delay_Us:
  i                    --> R10
  xus                  --> R12
     107 92AA      ST	R10,-Y
     108 92CA      ST	R12,-Y
     109 2EC0      MOV	R12,R16
(0055) }
(0056) 
(0057) void Delay_Us(unsigned char xus)
(0058) {
(0059) 	unsigned char i;
(0060) 	for(i=0;i<xus;i++)
     10A 24AA      CLR	R10
     10B C002      RJMP	0x010E
(0061) 		Delay_1us();
     10C DFF8      RCALL	_Delay_1us
     10D 94A3      INC	R10
     10E 14AC      CP	R10,R12
     10F F3E0      BCS	0x010C
     110 90C9      LD	R12,Y+
     111 90A9      LD	R10,Y+
     112 9508      RET
(0062) }
(0063) 
(0064) void Delay_1ms(void)
(0065) {
(0066) 	unsigned int i;
(0067) 	for(i=0;i<1142;i++)
_Delay_1ms:
  i                    --> R16
     113 2700      CLR	R16
     114 2711      CLR	R17
     115 C002      RJMP	0x0118
     116 5F0F      SUBI	R16,0xFF
     117 4F1F      SBCI	R17,0xFF
     118 3706      CPI	R16,0x76
     119 E0E4      LDI	R30,4
     11A 071E      CPC	R17,R30
     11B F3D0      BCS	0x0116
     11C 9508      RET
_Delay_Ms:
  i                    --> R20
  j                    --> R22
  xms                  --> R16
     11D 940E 09AA CALL	push_xgsetF000
(0068) 		;
(0069) }
(0070) 
(0071) void Delay_Ms(Word xms) //crystal=8MHz
(0072) {
(0073) 	Word i,j; //variable:declare Word
(0074) 	for(i=0; i<xms; i++)
     11F 2744      CLR	R20
     120 2755      CLR	R21
     121 C014      RJMP	0x0136
(0075) 		for(j=0; j<498;j++)
     122 2766      CLR	R22
     123 2777      CLR	R23
     124 C00B      RJMP	0x0130
(0076) 		{
(0077) 			NOP();
     125 0000      NOP
(0078) 			NOP();
     126 0000      NOP
(0079) 			NOP();
     127 0000      NOP
(0080) 			NOP();
     128 0000      NOP
(0081) 			NOP();
     129 0000      NOP
(0082) 			NOP();
     12A 0000      NOP
(0083) 			NOP();
     12B 0000      NOP
(0084) 			NOP();
     12C 0000      NOP
(0085) 			NOP();
     12D 0000      NOP
     12E 5F6F      SUBI	R22,0xFF
     12F 4F7F      SBCI	R23,0xFF
     130 3F62      CPI	R22,0xF2
     131 E0E1      LDI	R30,1
     132 077E      CPC	R23,R30
     133 F388      BCS	0x0125
     134 5F4F      SUBI	R20,0xFF
     135 4F5F      SBCI	R21,0xFF
     136 1740      CP	R20,R16
     137 0751      CPC	R21,R17
     138 F348      BCS	0x0122
     139 940C 09AF JMP	pop_xgsetF000
_Delay10us:
  i                    --> R20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -