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

📄 atmega32.lst

📁 这是AVR单片机上能跑的嵌入式操作系统salvo
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0167) 		{
(0168) 		SPI_DatLen=SPDR;
    013D B02F      IN	R2,0x0F
    013E 9220009E  STS	SPI_DatLen,R2
(0169) 		SPI_RecvFifo[1]=SPI_DatLen;
    0140 9220008C  STS	SPI_RecvFifo+1,R2
(0170) 		SPI_Status=0x02;
    0142 E082      LDI	R24,2
    0143 938000A1  STS	SPI_Status,R24
(0171) 		}
    0145 C03F      RJMP	0x0185
(0172) 	else if(SPI_Status==0x02)
    0146 918000A1  LDS	R24,SPI_Status
    0148 3082      CPI	R24,2
    0149 F4C9      BNE	0x0163
(0173) 		{
(0174) 		SPI_RecvFifo[SPI_DatConter+2]=SPDR;
    014A E88D      LDI	R24,0x8D
    014B E090      LDI	R25,0
    014C 91E0009D  LDS	R30,SPI_DatConter
    014E 27FF      CLR	R31
    014F 0FE8      ADD	R30,R24
    0150 1FF9      ADC	R31,R25
    0151 B02F      IN	R2,0x0F
    0152 8220      STD	Z+0,R2
(0175) 		SPI_DatConter++;
    0153 9180009D  LDS	R24,SPI_DatConter
    0155 5F8F      SUBI	R24,0xFF
    0156 9380009D  STS	SPI_DatConter,R24
(0176) 		if(SPI_DatConter==SPI_DatLen)
    0158 9020009E  LDS	R2,SPI_DatLen
    015A 1582      CP	R24,R2
    015B F549      BNE	0x0185
(0177) 			{
(0178) 			SPI_Status=0x03;
    015C E083      LDI	R24,3
    015D 938000A1  STS	SPI_Status,R24
(0179) 			SPI_DatConter=0;
    015F 2422      CLR	R2
    0160 9220009D  STS	SPI_DatConter,R2
(0180) 			}
(0181) 		}
    0162 C022      RJMP	0x0185
(0182) 	else if(SPI_Status==0x03)
    0163 918000A1  LDS	R24,SPI_Status
    0165 3083      CPI	R24,3
    0166 F4F1      BNE	0x0185
(0183) 		{
(0184) 		SPI_DatEnd=SPDR;
    0167 B02F      IN	R2,0x0F
    0168 9220009B  STS	SPI_DatEnd,R2
(0185) 		if(SPI_DatEnd!=0x16)
    016A 2D82      MOV	R24,R2
    016B 3186      CPI	R24,0x16
    016C F031      BEQ	0x0173
(0186) 			{
(0187) 			SPI_validFrame=FALSE;
    016D 918000A2  LDS	R24,bit_flag
    016F 7E8F      ANDI	R24,0xEF
    0170 938000A2  STS	bit_flag,R24
(0188) 			}
    0172 C012      RJMP	0x0185
(0189) 		else
(0190) 			{
(0191) 			SPI_RecvFifo[SPI_DatLen+2]=SPI_DatEnd;
    0173 E88D      LDI	R24,0x8D
    0174 E090      LDI	R25,0
    0175 91E0009E  LDS	R30,SPI_DatLen
    0177 27FF      CLR	R31
    0178 0FE8      ADD	R30,R24
    0179 1FF9      ADC	R31,R25
    017A 9020009B  LDS	R2,SPI_DatEnd
    017C 8220      STD	Z+0,R2
(0192) 			SPI_validFrame=TRUE;
    017D 918000A2  LDS	R24,bit_flag
    017F 6180      ORI	R24,0x10
    0180 938000A2  STS	bit_flag,R24
(0193) 			SPI_Status=0x00;
    0182 2422      CLR	R2
    0183 922000A1  STS	SPI_Status,R2
(0194) 			}
(0195) 		}
    0185 9029      LD	R2,Y+
    0186 BE2F      OUT	0x3F,R2
    0187 91F9      LD	R31,Y+
    0188 91E9      LD	R30,Y+
    0189 9199      LD	R25,Y+
    018A 9189      LD	R24,Y+
    018B 9029      LD	R2,Y+
    018C 9518      RETI
_UART_RX_interrupt:
    018D 922A      ST	R2,-Y
    018E 938A      ST	R24,-Y
    018F 939A      ST	R25,-Y
    0190 93EA      ST	R30,-Y
    0191 93FA      ST	R31,-Y
    0192 B62F      IN	R2,0x3F
    0193 922A      ST	R2,-Y
(0196) }
(0197)  void UART_RX_interrupt(void)
(0198)  	{
(0199)  	if(RS485_validFrame)
    0194 918000A2  LDS	R24,bit_flag
    0196 9586      LSR	R24
    0197 9586      LSR	R24
    0198 9586      LSR	R24
    0199 7081      ANDI	R24,1
    019A F009      BEQ	0x019C
(0200)  		{return;}
    019B C055      RJMP	0x01F1
(0201) 	if(RS485_status==0x00)
    019C 902000B5  LDS	R2,RS485_status
    019E 2022      TST	R2
    019F F471      BNE	0x01AE
(0202) 		{
(0203) 		RS485_data=UDR;
    01A0 B02C      IN	R2,0x0C
    01A1 922000B4  STS	RS485_data,R2
(0204) 		if(RS485_data!=0x68)
    01A3 2D82      MOV	R24,R2
    01A4 3688      CPI	R24,0x68
    01A5 F021      BEQ	0x01AA
(0205) 			{
(0206) 			RS485_status=0x00;
    01A6 2422      CLR	R2
    01A7 922000B5  STS	RS485_status,R2
(0207) 			}
    01A9 C047      RJMP	0x01F1
(0208) 		else
(0209) 			{
(0210) 			RS485_status=0x01;
    01AA E081      LDI	R24,1
    01AB 938000B5  STS	RS485_status,R24
(0211) 			}
(0212) 		}
    01AD C043      RJMP	0x01F1
(0213) 	else if(RS485_status==0x01)
    01AE 918000B5  LDS	R24,RS485_status
    01B0 3081      CPI	R24,1
    01B1 F439      BNE	0x01B9
(0214) 		{
(0215) 		robotDatLen=UDR;
    01B2 B02C      IN	R2,0x0C
    01B3 922000B2  STS	robotDatLen,R2
(0216) 		RS485_status=0x02;
    01B5 E082      LDI	R24,2
    01B6 938000B5  STS	RS485_status,R24
(0217) 		}
    01B8 C038      RJMP	0x01F1
(0218) 	else if(RS485_status==0x02)
    01B9 918000B5  LDS	R24,RS485_status
    01BB 3082      CPI	R24,2
    01BC F4C9      BNE	0x01D6
(0219) 		{
(0220) 		robotDatBuf[robotDatCount]=UDR;
    01BD EA88      LDI	R24,0xA8
    01BE E090      LDI	R25,0
    01BF 91E000A7  LDS	R30,robotDatCount
    01C1 27FF      CLR	R31
    01C2 0FE8      ADD	R30,R24
    01C3 1FF9      ADC	R31,R25
    01C4 B02C      IN	R2,0x0C
    01C5 8220      STD	Z+0,R2
(0221) 		robotDatCount++;
    01C6 918000A7  LDS	R24,robotDatCount
    01C8 5F8F      SUBI	R24,0xFF
    01C9 938000A7  STS	robotDatCount,R24
(0222) 		if(robotDatCount==robotDatLen)
    01CB 902000B2  LDS	R2,robotDatLen
    01CD 1582      CP	R24,R2
    01CE F511      BNE	0x01F1
(0223) 			{
(0224) 			RS485_status=0x03;
    01CF E083      LDI	R24,3
    01D0 938000B5  STS	RS485_status,R24
(0225) 			robotDatCount=0;
    01D2 2422      CLR	R2
    01D3 922000A7  STS	robotDatCount,R2
(0226) 			}
(0227) 		}
    01D5 C01B      RJMP	0x01F1
(0228) 	else if(RS485_status==0x03)
    01D6 918000B5  LDS	R24,RS485_status
    01D8 3083      CPI	R24,3
    01D9 F4B9      BNE	0x01F1
(0229) 		{
(0230) 		robotDatEnd=UDR;
    01DA B02C      IN	R2,0x0C
    01DB 922000A5  STS	robotDatEnd,R2
(0231) 		if(robotDatEnd!=0x16)
    01DD 2D82      MOV	R24,R2
    01DE 3186      CPI	R24,0x16
    01DF F039      BEQ	0x01E7
(0232) 			{
(0233) 			RS485_validFrame=FALSE;
    01E0 918000A2  LDS	R24,bit_flag
    01E2 7F87      ANDI	R24,0xF7
    01E3 938000A2  STS	bit_flag,R24
(0234) 			PORTC|=0x02;
    01E5 9AA9      SBI	0x15,1
(0235) 			}
    01E6 C00A      RJMP	0x01F1
(0236) 		else
(0237) 			{
(0238) 			RS485_validFrame=TRUE;
    01E7 918000A2  LDS	R24,bit_flag
    01E9 6088      ORI	R24,0x8
    01EA 938000A2  STS	bit_flag,R24
(0239) 			RS485_status=0x00;
    01EC 2422      CLR	R2
    01ED 922000B5  STS	RS485_status,R2
(0240) 			PORTC=0x01;
    01EF E081      LDI	R24,1
    01F0 BB85      OUT	0x15,R24
(0241) 			}
(0242) 		}
    01F1 9029      LD	R2,Y+
    01F2 BE2F      OUT	0x3F,R2
    01F3 91F9      LD	R31,Y+
    01F4 91E9      LD	R30,Y+
    01F5 9199      LD	R25,Y+
    01F6 9189      LD	R24,Y+
    01F7 9029      LD	R2,Y+
    01F8 9518      RETI
(0243)  	}
(0244) void Uart_SendByte(void)
(0245) {
(0246)  while(!(UCSRA&(1<<UDRE)));
_Uart_SendByte:
    01F9 9B5D      SBIS	0x0B,5
    01FA CFFE      RJMP	_Uart_SendByte
(0247)  UDR=(*Uart_send_ptr);
    01FB 91E000A3  LDS	R30,Uart_send_ptr
    01FD 91F000A4  LDS	R31,Uart_send_ptr+1
    01FF 8020      LDD	R2,Z+0
    0200 B82C      OUT	0x0C,R2
    0201 9508      RET
_Uart_SendPacket:
  BufferAddress        --> R22
  len                  --> R20
    0202 940E052E  CALL	push_gset2
    0204 01B9      MOVW	R22,R18
    0205 2F40      MOV	R20,R16
(0248) }
(0249) void Uart_SendPacket(Uchar len, Uchar *BufferAddress)
(0250)  {
(0251)  	Uart_send_ptr=BufferAddress;
    0206 937000A4  STS	Uart_send_ptr+1,R23
    0208 936000A3  STS	Uart_send_ptr,R22
    020A C00B      RJMP	0x0216
(0252) 	while(len>0)
(0253) 		{
(0254) 		Uart_SendByte();
    020B DFED      RCALL	_Uart_SendByte
(0255) 		len--;
    020C 954A      DEC	R20
(0256) 		Uart_send_ptr++;
    020D 918000A3  LDS	R24,Uart_send_ptr
    020F 919000A4  LDS	R25,Uart_send_ptr+1
    0211 9601      ADIW	R24,1
    0212 939000A4  STS	Uart_send_ptr+1,R25
    0214 938000A3  STS	Uart_send_ptr,R24
    0216 2422      CLR	R2
    0217 1624      CP	R2,R20
    0218 F390      BCS	0x020B
    0219 940E0525  CALL	pop_gset2
    021B 9508      RET
(0257) 		}
(0258) }
(0259) 
(0260) void ADC_init(void)
(0261) {
(0262) 	ADCSRA=0x00;
_ADC_init:
    021C 2422      CLR	R2
    021D B826      OUT	0x06,R2
(0263) 	ADMUX=0x40;
    021E E480      LDI	R24,0x40
    021F B987      OUT	0x07,R24
(0264) 	ACSR|=(1<<ACD);
    0220 9A47      SBI	0x08,7
(0265) 	ADCSRA=(1<<ADEN)|0x06;//不使能中断
    0221 E886      LDI	R24,0x86
    0222 B986      OUT	0x06,R24
(0266) 	SFIOR=0x00;
    0223 BE20      OUT	0x30,R2
(0267) 	PORTA=0x00;
    0224 BA2B      OUT	0x1B,R2
    0225 9508      RET
_Read_Adc:
  Msbtemp              --> Y+10
  Lsbtemp              --> Y+0
  i                    --> R16
    0226 9764      SBIW	R28,0x14
(0268) }
(0269) void Read_Adc(void)
(0270)  	{
(0271)  	unsigned char i;
(0272) 	unsigned char Lsbtemp[10],Msbtemp[10];
(0273) 
(0274) 	Lsb_light=0;
    0227 2422      CLR	R2
    0228 9220006F  STS	Lsb_light,R2
(0275) 	Msb_light=0;
    022A 92200070  STS	Msb_light,R2
(0276) 	 for(i=0;i<1;i++)
    022C 2700      CLR	R16
    022D C013      RJMP	0x0241
(0277) 	 	{
(0278) 	 	ADCSRA|=(1<<ADSC);
    022E 9A36      SBI	0x06,6
(0279) 	 	while((ADCSRA&(1<<ADIF))==0);
    022F 9B34      SBIS	0x06,4
    0230 CFFE      RJMP	0x022F
(0280) 	 	Lsbtemp[i]=ADCL;
    0231 01CE      MOVW	R24,R28
    0232 2FE0      MOV	R30,R16
    0233 27FF      CLR	R31
    0234 0FE8      ADD	R30,R24
    0235 1FF9      ADC	R31,R25
    0236 B024      IN	R2,0x04
    0237 8220      STD	Z+0,R2
(0281) 		Msbtemp[i]=ADCH;
    0238 01CE      MOVW	R24,R28
    0239 960A      ADIW	R24,0xA
    023A 2FE0      MOV	R30,R16
    023B 27FF      CLR	R31
    023C 0FE8      ADD	R30,R24
    023D 1FF9      ADC	R31,R25
    023E B025      IN	R2,0x05
    023F 8220      STD	Z+0,R2
    0240 9503      INC	R16
    0241 3001      CPI	R16,1
    0242 F358      BCS	0x022E
(0282) 	 	}
(0283) 	 for(i=0;i<1;i++)
    0243 2700      CLR	R16
    0244 C018      RJMP	0x025D
(0284) 	 	{
(0285) 	 	Lsb_light+=Lsbtemp[i];
    0245 01CE      MOVW	R24,R28
    0246 2FE0      MOV	R30,R16
    0247 27FF      CLR	R31
    0248 0FE8      ADD	R30,R24
    0249 1FF9      ADC	R31,R25
    024A 8020      LDD	R2,Z+0
    024B 9030006F  LDS	R3,Lsb_light
    024D 0C32      ADD	R3,R2
    024E 9230006F  STS	Lsb_light,R3
(0286) 		Msb_light+=Msbtemp[i];
    0250 01CE      MOVW	R24,R28
    0251 960A      ADIW	R24,0xA
    0252 2FE0      MOV	R30,R16
    0253 27FF      CLR	R31
    0254 0FE8      ADD	R30,R24
    0255 1FF9      ADC	R31,R25
    0256 8020      LDD	R2,Z+0
    0257 90300070  LDS	R3,Msb_light
    0259 0C32      ADD	R3,R2
    025A 92300070  STS	Msb_light,R3
    025C 9503      INC	R16
    025D 3001      CPI	R16,1
    025E F330      BCS	0x0245
(0287) 	 	}
(0288) 	 Lsb_light=Lsb_light/1;
    025F 9020006F  LDS	R2,Lsb_light
    0261 9220006F  STS	Lsb_light,R2
(0289) 	 Msb_light=Msb_light/1;
    0263 90200070  LDS	R2,Msb_light
    0265 92200070  STS	Msb_light,R2
(0290) 	 voltage_light=Msb_light;
    0267 2433      CLR	R3
    0268 92300072  STS	voltage_light+1,R3
    026A 92200071  STS	voltage_light,R2
(0291) 	 voltage_light=(unsigned int)voltage_light<<8|Lsb_light;
    026C 9020006F  LDS	R2,Lsb_light
    026E 90400071  LDS	R4,voltage_light
    0270 90500072  LDS	R5,voltage_light+1
    0272 2C34      MOV	R3,R4
    0273 92300072  STS	voltage_light+1,R3
    0275 92200071  STS	voltage_light,R2
    0277 9664      ADIW	R28,0x14
    0278 9508      RET
_IntVector:
    0279 940E0550  CALL	push_lset
FILE: E:\PROGRAMS\controller\salvo-M32\salvo\isr.c
(0001) /************************************************************ 
(0002) Copyright (C) 1995-2002 Pumpkin, Inc. and its
(0003) Licensor(s). Freely distributable.
(0004) 
(0005) $Source: C:\\RCS\\d\\salvo\\tut\\tu1\\isr.c,v $
(0006) $Author: aek $
(0007) $Revision: 3.24 $
(0008) $Date: 2004-02-21 17:41:57-08 $
(0009) 
(0010) Source for tutorial programs. Contains the interrupt service
(0011) routine and other interrupt-associated code for all of
(0012) the tutorials. Organized by compiler and target (SYS*).
(0013) 
(0014) ************************************************************/
(0015) 
(0016) #include "isr.h"
(0017) #include <salvo.h>
(0018) 
(0019) #if   defined(USE_INTERRUPTS)
(0020) 
(0021) #if   defined(SYSA) || defined(SYSH) || defined(SYSF) \
(0022)  ||   defined(SYSP)
(0023) 
(0024) #if   defined(SYSA) || defined(SYSH) || defined(SYSF) 
(0025) void interrupt IntVector( void )
(0026) #elif defined(SYSP)
(0027) #pragma vector=0x08
(0028) __interrupt void IntVector( void )
(0029) #endif
(0030) {
(0031)     if ( T0IE && T0IF ) {
(0032)         T0IF = 0;    
(0033)         TMR0 -= TMR0_RELOAD;
(0034)          
(0035)         OSTimer();

⌨️ 快捷键说明

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