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

📄 inject.lst

📁 一个6缸发动机的ECU控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0114) void timer1_compa_isr(void)
(0115) {
(0116)  //compare occured TCNT1=OCR1A
(0117)  switch(ActFlag1)
     2B6 9100 0128 LDS	R16,ActFlag1
     2B8 2711      CLR	R17
     2B9 3000      CPI	R16,0
     2BA 0701      CPC	R16,R17
     2BB F031      BEQ	0x02C2
     2BC 3001      CPI	R16,1
     2BD E0E0      LDI	R30,0
     2BE 071E      CPC	R17,R30
     2BF F409      BNE	0x02C1
     2C0 C090      RJMP	0x0351
     2C1 C0AC      RJMP	0x036E
(0118)  {
(0119)    case 0:
(0120)      {
(0121) 	 if(HighByte1 == 0)	
     2C2 9020 0116 LDS	R2,HighByte1
     2C4 2022      TST	R2
     2C5 F009      BEQ	0x02C7
     2C6 C081      RJMP	0x0348
(0122) 	  {
(0123) 	   if((SSpray1Num>0)||(Spray1Num==0))
     2C7 E080      LDI	R24,0
     2C8 E090      LDI	R25,0
     2C9 E0A0      LDI	R26,0
     2CA E0B0      LDI	R27,0
     2CB 9040 011E LDS	R4,SSpray1Num+2
     2CD 9050 011F LDS	R5,SSpray1Num+3
     2CF 9020 011C LDS	R2,SSpray1Num
     2D1 9030 011D LDS	R3,SSpray1Num+1
     2D3 1628      CP	R2,R24
     2D4 0639      CPC	R3,R25
     2D5 064A      CPC	R4,R26
     2D6 065B      CPC	R5,R27
     2D7 F491      BNE	0x02EA
     2D8 E080      LDI	R24,0
     2D9 E090      LDI	R25,0
     2DA E0A0      LDI	R26,0
     2DB E0B0      LDI	R27,0
     2DC 9040 0102 LDS	R4,Spray1Num+2
     2DE 9050 0103 LDS	R5,Spray1Num+3
     2E0 9020 0100 LDS	R2,Spray1Num
     2E2 9030 0101 LDS	R3,Spray1Num+1
     2E4 1628      CP	R2,R24
     2E5 0639      CPC	R3,R25
     2E6 064A      CPC	R4,R26
     2E7 065B      CPC	R5,R27
     2E8 F009      BEQ	0x02EA
     2E9 C084      RJMP	0x036E
(0124) 	     //喷油器控制引脚置高
(0125) 		 //Spray1Num--;
(0126) 		{ 
(0127) 		  PORTB = PORTB |(1<<PB2);
     2EA 9A2A      SBI	0x05,2
(0128) 		  PORTB = PORTB |(1<<PB3);
     2EB 9A2B      SBI	0x05,3
(0129) 		  PORTB = PORTB |(1<<PB4);
     2EC 9A2C      SBI	0x05,4
(0130) 		  PORTB = PORTB |(1<<PB1);
     2ED 9A29      SBI	0x05,1
(0131) 		  PORTD = PORTD |(1<<PD4);
     2EE 9A5C      SBI	0x0B,4
(0132) 		  PORTD = PORTD |(1<<PD5);
     2EF 9A5D      SBI	0x0B,5
(0133) 	
(0134) 		 OCR1A = TCNT1 + CSpray1On;    //喷油器关定时
     2F0 9020 0108 LDS	R2,CSpray1On
     2F2 9030 0109 LDS	R3,CSpray1On+1
     2F4 9040 0084 LDS	R4,0x0084
     2F6 9050 0085 LDS	R5,0x0085
     2F8 0C42      ADD	R4,R2
     2F9 1C53      ADC	R5,R3
     2FA 9250 0089 STS	0x0089,R5
     2FC 9240 0088 STS	0x0088,R4
(0135) 		 if (Spray1Num>0)
     2FE E080      LDI	R24,0
     2FF E090      LDI	R25,0
     300 E0A0      LDI	R26,0
     301 E0B0      LDI	R27,0
     302 9040 0102 LDS	R4,Spray1Num+2
     304 9050 0103 LDS	R5,Spray1Num+3
     306 9020 0100 LDS	R2,Spray1Num
     308 9030 0101 LDS	R3,Spray1Num+1
     30A 1628      CP	R2,R24
     30B 0639      CPC	R3,R25
     30C 064A      CPC	R4,R26
     30D 065B      CPC	R5,R27
     30E F0C1      BEQ	0x0327
(0136) 		 SSpray1Num--;
     30F E081      LDI	R24,1
     310 E090      LDI	R25,0
     311 E0A0      LDI	R26,0
     312 E0B0      LDI	R27,0
     313 9040 011E LDS	R4,SSpray1Num+2
     315 9050 011F LDS	R5,SSpray1Num+3
     317 9020 011C LDS	R2,SSpray1Num
     319 9030 011D LDS	R3,SSpray1Num+1
     31B 1A28      SUB	R2,R24
     31C 0A39      SBC	R3,R25
     31D 0A4A      SBC	R4,R26
     31E 0A5B      SBC	R5,R27
     31F 9230 011D STS	SSpray1Num+1,R3
     321 9220 011C STS	SSpray1Num,R2
     323 9250 011F STS	SSpray1Num+3,R5
     325 9240 011E STS	SSpray1Num+2,R4
(0137) 		 if(Spray1Num <= 0)
     327 E080      LDI	R24,0
     328 E090      LDI	R25,0
     329 E0A0      LDI	R26,0
     32A E0B0      LDI	R27,0
     32B 9040 0102 LDS	R4,Spray1Num+2
     32D 9050 0103 LDS	R5,Spray1Num+3
     32F 9020 0100 LDS	R2,Spray1Num
     331 9030 0101 LDS	R3,Spray1Num+1
     333 1628      CP	R2,R24
     334 0639      CPC	R3,R25
     335 064A      CPC	R4,R26
     336 065B      CPC	R5,R27
     337 F461      BNE	0x0344
(0138) 	       Spray1Num = 0;
     338 E080      LDI	R24,0
     339 E090      LDI	R25,0
     33A E0A0      LDI	R26,0
     33B E0B0      LDI	R27,0
     33C 9390 0101 STS	Spray1Num+1,R25
     33E 9380 0100 STS	Spray1Num,R24
     340 93B0 0103 STS	Spray1Num+3,R27
     342 93A0 0102 STS	Spray1Num+2,R26
(0139) 	   //T1COMPA = OCR1A;
(0140) 	     ActFlag1 = 1;   //转换到下一动作
     344 E081      LDI	R24,1
     345 9380 0128 STS	ActFlag1,R24
(0141) 		}
(0142) 	  }
     347 C026      RJMP	0x036E
(0143) 	 else
(0144) 	   {
(0145) 	     HighByte1 --;
     348 9180 0116 LDS	R24,HighByte1
     34A 5081      SUBI	R24,1
     34B 9380 0116 STS	HighByte1,R24
(0146) 	     ActFlag1= 0;   //转换到下一动作
     34D 2422      CLR	R2
     34E 9220 0128 STS	ActFlag1,R2
(0147) 	   }
(0148)        break;
     350 C01D      RJMP	0x036E
(0149) 	 }
(0150)    case 1:
(0151)      {
(0152) 	      
(0153) 		  PORTB = PORTB &~(1<<PB2);
     351 982A      CBI	0x05,2
(0154) 		  PORTB = PORTB &~(1<<PB3);
     352 982B      CBI	0x05,3
(0155) 		  PORTB = PORTB &~(1<<PB4);
     353 982C      CBI	0x05,4
(0156) 		  PORTB = PORTB &~(1<<PB1);
     354 9829      CBI	0x05,1
(0157) 		  PORTD = PORTD &~(1<<PD4);
     355 985C      CBI	0x0B,4
(0158) 		  PORTD = PORTD &~(1<<PD5);
     356 985D      CBI	0x0B,5
(0159) 	    //if(HighByte1 == 0)	
(0160) 	   { 
(0161) 	     OCR1A = TCNT1 + ( unsigned int )CSpray1Cyc - CSpray1On ;
     357 9020 0104 LDS	R2,CSpray1Cyc
     359 9030 0105 LDS	R3,CSpray1Cyc+1
     35B 9040 0084 LDS	R4,0x0084
     35D 9050 0085 LDS	R5,0x0085
     35F 0C42      ADD	R4,R2
     360 1C53      ADC	R5,R3
     361 9020 0108 LDS	R2,CSpray1On
     363 9030 0109 LDS	R3,CSpray1On+1
     365 1842      SUB	R4,R2
     366 0853      SBC	R5,R3
     367 9250 0089 STS	0x0089,R5
     369 9240 0088 STS	0x0088,R4
(0162) 	     ActFlag1= 0;   //转换到下一动作
     36B 2422      CLR	R2
     36C 9220 0128 STS	ActFlag1,R2
(0163) 	   }
(0164) 	  // else
(0165) 	  // {
(0166) 	  //   HighByte1 --;
(0167) 	  //  ActFlag1= 1;   //转换到下一动作
(0168) 	  // }
(0169) 	   break;	 
(0170) 	 }
(0171)    default:
(0172) 	   break;	
     36E 90B9      LD	R11,Y+
     36F 90A9      LD	R10,Y+
     370 9009      LD	R0,Y+
     371 BE0F      OUT	0x3F,R0
     372 91E9      LD	R30,Y+
     373 91B9      LD	R27,Y+
     374 91A9      LD	R26,Y+
     375 9199      LD	R25,Y+
     376 9189      LD	R24,Y+
     377 9139      LD	R19,Y+
     378 9129      LD	R18,Y+
     379 9119      LD	R17,Y+
     37A 9109      LD	R16,Y+
     37B 9099      LD	R9,Y+
     37C 9089      LD	R8,Y+
     37D 9059      LD	R5,Y+
     37E 9049      LD	R4,Y+
     37F 9039      LD	R3,Y+
     380 9029      LD	R2,Y+
     381 9019      LD	R1,Y+
     382 9009      LD	R0,Y+
     383 9518      RETI
FILE: C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\main.c
(0001) //ICC-AVR application builder : 2007-4-24 9:11:17
(0002) // Target : M88
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom88v.h>
(0006) #include <macros.h>
(0007) #include <uart.c>
(0008) #include <timer1.c>
(0009) //#include <stdlib.h>
(0010) 
(0011) //extern char _bss_end;
(0012) //ADC initialize
(0013) // Conversion time:128 prescale 208uS,free running,AVCC
(0014) //unsigned char AdcIntrCnt = 0;
(0015) 
(0016) /*void adc_init(void)
(0017) {
(0018)  ADCSRA = 0x00; //disable adc
(0019)  ADMUX = 0x42;  //select adc input 2,REF = AVCC
(0020)  ACSR  = 0x80;
(0021)  ADCSRB = 0x00;
(0022)  DIDR0 = 0x04;   //禁用ADC2数字输入缓冲
(0023)  ADCSRA = 0xEF;
(0024) 
(0025) }*/
(0026) 
(0027) /*#pragma interrupt_handler adc_isr:iv_ADC
(0028) void adc_isr(void)
(0029) {
(0030)  //conversion complete, read value (int) using...
(0031) 
(0032)    int value;
(0033)    int pressure;
(0034)    char *ptr;
(0035)    float cal;
(0036) 
(0037)    value=ADCL;            //Read 8 low bits first (important)
(0038)    value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0039) 
(0040)  if(++AdcIntrCnt > 100)
(0041)  {
(0042) //   PORTB = PORTB ^( 1<<PB3);  //debug
(0043)    AdcIntrCnt = 0;
(0044)    
(0045) //   putchar(ADCL);   //debug
(0046) //   putchar(ADCH);   //debug
(0047) 
(0048)    // 进行相应转换,并发送
(0049) //   if(value > 204)        //电压应该大于1v
(0050)    {
(0051)      cal = value * 20/ 1023;   //Ima,R = 250ohm
(0052)      cal = (cal - 4) / 16 * 350 ;   //pressure/bar
(0053)      pressure = (int)cal;
(0054)      ptr = (char*)&pressure;
(0055)      putchar(*ptr);        //传送压力低字节
(0056)      putchar(*(ptr + 1));    //传送压力高字节
(0057)    }
(0058) 
(0059)  }
(0060) }*/
(0061) 
(0062) 
(0063) 
(0064) void port_init(void)
(0065) {
(0066)  PORTB = 0x00;
_port_init:
     384 2422      CLR	R2
     385 B825      OUT	0x05,R2
(0067)  DDRB  = 0x1E;
     386 E18E      LDI	R24,0x1E
     387 B984      OUT	0x04,R24
(0068)  PORTC = 0x00; //m103 output only
     388 B828      OUT	0x08,R2
(0069)  DDRC  = 0x00;
     389 B827      OUT	0x07,R2
(0070)  PORTD = 0x08;
     38A E088      LDI	R24,0x8
     38B B98B      OUT	0x0B,R24
(0071)  DDRD  = 0x38;
     38C E388      LDI	R24,0x38
     38D B98A      OUT	0x0A,R24
     38E 9508      RET
(0072) }
(0073) 
(0074) //call this routine to initialize all peripherals
(0075) void init_devices(void)
(0076) {
(0077)  //stop errant interrupts until set up
(0078)  CLI(); //disable all interrupts
_init_devices:
     38F 94F8      BCLR	7
(0079)  port_init();
     390 DFF3      RCALL	_port_init
(0080)  timer1_init();
     391 DEF3      RCALL	_timer1_init
(0081)  uart0_init();
     392 DCD8      RCALL	_uart0_init
(0082)  //timer0_init();
(0083)  //adc_init();
(0084) 
(0085)  MCUCR = 0x00;
     393 2422      CLR	R2
     394 BE25      OUT	0x35,R2
(0086)  EICRA = 0x00; //extended ext ints
     395 9220 0069 STS	0x0069,R2
(0087)  EIMSK = 0x00;
     397 BA2D      OUT	0x1D,R2
(0088) 
(0089)  TIMSK0 = 0x06; //timer 0 interrupt sources
     398 E086      LDI	R24,6
     399 9380 006E STS	0x006E,R24
(0090)  TIMSK1 = 0x07; //timer 1 interrupt sources
     39B E087      LDI	R24,7
     39C 9380 006F STS	0x006F,R24
(0091)  TIMSK2 = 0x00; //timer 2 interrupt sources
     39E 9220 0070 STS	0x0070,R2
(0092) 
(0093)  PCMSK0 = 0x00; //pin change mask 0
     3A0 9220 006B STS	0x006B,R2
(0094)  PCMSK1 = 0x00; //pin change mask 1
     3A2 9220 006C STS	0x006C,R2
(0095)  PCMSK2 = 0x00; //pin change mask 2
     3A4 9220 006D STS	0x006D,R2
(0096)  PCICR = 0x00; //pin change enable
     3A6 9220 0068 STS	0x0068,R2
(0097)  PRR = 0x00; //power controller
     3A8 9220 0064 STS	0x0064,R2
(0098)  SEI(); //re-enable interrupts
     3AA 9478      BSET	7
     3AB 9508      RET
(0099)  //all peripherals are now initialized
(0100) }
(0101) 
(0102) 
(0103) 
(0104) void main(void)
(0105) {
(0106)  unsigned int waitFlag = 0;      //串口通讯等待时间计数
_main:
  frameLength          --> R22
  waitFlag             --> R20
  i                    --> R10
     3AC 2744      CLR	R20
     3AD 2755      CLR	R21
(0107)  unsigned char frameLength = 12;  //帧长度
     3AE E06C      LDI	R22,0xC
(0108)  char i = 0;
     3AF 24AA      CLR	R10
(0109)  
(0110) // _NewHeap(&_bss_end + 1,&_bss_end+40);
(0111)  //初始化外围器件
(0112)  init_devices();
     3B0 DFDE      RCALL	_init_devices
     3B1 C02A      RJMP	0x03DC
(0113) 
(0114)  while(1)
(0115)  {
(0116)    if(FrameHead0 > 0)      //帧接收中
     3B2 E080      LDI	R24,0
     3B3 9020 0161 LDS	R2,FrameHead0
     3B5 1582      CP	R24,R2
     3B6 F528      BCC	0x03DC
(0117)     {
(0118) 		 TCCR1B = 0x00;        //关定时器1,准备接收数据
     3B7 2422      CLR	R2
     3B8 9220 0081 STS	0x0081,R2
(0119) 		 //ADCSRA = ADCSRA & ~(1<<ADIE);        //disable adc interrupt
(0120) 	     putchar(IDLE);       //为和数据区分开,采用两字节的控制命令
     3BA EF0D      LDI	R16,0xFD
     3BB DD7F      RCALL	_putchar
(0121) 		 putchar(IDLE);
     3BC EF0D      LDI	R16,0xFD
     3BD DD7D      RCALL	_putchar
(0122) 		 i = 1;
     3BE 24AA      CLR	R10
     3BF 94A3      INC	R10
     3C0 C019      RJMP	0x03DA
(0123)      while(i)
(0124) 	 {	
(0125) 	  if(rx_counter0 == frameLength)   //缓冲区收到规定字符数
     3C1 9020 0163 LDS	R2,rx_counter0
     3C3 1626      CP	R2,R22
     3C4 F431      BNE	0x03CB
(0126) 	   {
(0127) 	     //处理缓冲区数据
(0128) 		 DisposeBufDatas();
     3C5 DDA8      RCALL	_DisposeBufDatas
(0129) //		 FlashRxBuf();     //debug
(0130) 		 waitFlag = 0;
     3C6 2744      CLR	R20
     3C7 2755      CLR	R21
(0131) 		 timer1_init();    //开定时器
     3C8 DEBC      RCALL	_timer1_init
(0132) 		 //ADCSRA = ADCSRA | (1<<ADIE);        //enable adc interrupt
(0133) 		 i = 0;
     3C9 24AA      CLR	R10
(0134) 		
(0135) 	   }
     3CA C00F      RJMP	0x03DA
(0136)       else
(0137) 	   {
(0138) 	     waitFlag++;
     3CB 5F4F      SUBI	R20,0xFF
     3CC 4F5F      SBCI	R21,0xFF
(0139) 		 if(waitFlag == 0xFFFF)     //等待超时,刷新缓冲区
     3CD 3F4F      CPI	R20,0xFF
     3CE EFEF      LDI	R30,0xFF
     3CF 075E      CPC	R21,R30
     3D0 F449      BNE	0x03DA
(0140) 		  {
(0141) 		    waitFlag = 0;
     3D1 2744      CLR	R20
     3D2 2755      CLR	R21
(0142) 			FlashRxBuf();
     3D3 DC8D      RCALL	_FlashRxBuf
(0143) 	        putchar(250);  //回传超时标志 debug
     3D4 EF0A      LDI	R16,0xFA
     3D5 DD65      RCALL	_putchar
(0144)             putchar(250);  //回传chongfa曛

⌨️ 快捷键说明

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