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

📄 inject.lst

📁 一个6缸发动机的ECU控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
     171 9403      INC	R0
     172 8208      STD	Y+0,R0
(0151)  if((SREG & 0x80) == 0x00)  //I之前是否置位
     173 B62F      IN	R2,0x3F
     174 FC27      SBRC	R2,7
     175 C002      RJMP	0x0178
(0152)    IisOn = 0;
     176 2400      CLR	R0
     177 8208      STD	Y+0,R0
(0153)  
(0154)  if(rx_error0)                 //接收错误
     178 9020 0162 LDS	R2,rx_error0
     17A 2022      TST	R2
     17B F059      BEQ	0x0187
(0155)   {
(0156)    CLI();
     17C 94F8      BCLR	7
(0157)    putchar(SENDAGAIN);
     17D EF0E      LDI	R16,0xFE
     17E DFBC      RCALL	_putchar
(0158)    putchar(SENDAGAIN);
     17F EF0E      LDI	R16,0xFE
     180 DFBA      RCALL	_putchar
(0159)    if(IisOn)	
     181 8008      LDD	R0,Y+0
     182 2000      TST	R0
     183 F409      BNE	0x0185
     184 C0F2      RJMP	0x0277
(0160)      SEI();
     185 9478      BSET	7
(0161)   } 
     186 C0F0      RJMP	0x0277
(0162)  else
(0163)  { 
(0164)    spray1NumL = getchar();
     187 DF60      RCALL	_getchar
     188 830D      STD	Y+5,R16
(0165)    spray1NumH = getchar();
     189 DF5E      RCALL	_getchar
     18A 830E      STD	Y+6,R16
(0166)    tSpray1On = getchar();
     18B DF5C      RCALL	_getchar
     18C 2EA0      MOV	R10,R16
     18D 82AA      STD	Y+2,R10
(0167)    tSpray1Cyc = getchar();
     18E DF59      RCALL	_getchar
     18F 2EA0      MOV	R10,R16
     190 2C2A      MOV	R2,R10
     191 2433      CLR	R3
     192 823C      STD	Y+4,R3
     193 822B      STD	Y+3,R2
(0168)    tPump1Cyc = getchar();
     194 DF53      RCALL	_getchar
     195 2EA0      MOV	R10,R16
     196 82A9      STD	Y+1,R10
(0169)    tPump1On = getchar();
     197 DF50      RCALL	_getchar
     198 2EA0      MOV	R10,R16
(0170)    
(0171)    spray2NumL = getchar();
     199 DF4E      RCALL	_getchar
     19A 2EC0      MOV	R12,R16
(0172)    spray2NumH = getchar();
     19B DF4C      RCALL	_getchar
     19C 2EE0      MOV	R14,R16
(0173)    //tSpray2On = getchar();
(0174)    //tSpray2Cyc = getchar();
(0175)    //tPump2Cyc = getchar();
(0176)    //tPump2On = getchar();
(0177)    
(0178) /************debug*****************/
(0179)      //putchar(sprayNumL);   //debug
(0180) 	 //putchar(sprayNumH);   //debug
(0181) 	// putchar(tPump1Cyc);   //debug
(0182) 	 //putchar(tSprayOn);   //debug
(0183) 	 //putchar(tSprayCyc);   //debug
(0184) 	 //putchar(tPivDelay);   //debug
(0185) 
(0186) //**********************************/   
(0187)    
(0188)    //转换数据
(0189)    Pump1Num = (int)spray1NumL + ((int)spray1NumH << 8);
     19D 802E      LDD	R2,Y+6
     19E 2433      CLR	R3
     19F 2C32      MOV	R3,R2
     1A0 2422      CLR	R2
     1A1 804D      LDD	R4,Y+5
     1A2 2455      CLR	R5
     1A3 0C42      ADD	R4,R2
     1A4 1C53      ADC	R5,R3
     1A5 0112      MOVW	R2,R4
     1A6 2444      CLR	R4
     1A7 FC37      SBRC	R3,7
     1A8 9440      COM	R4
     1A9 2455      CLR	R5
     1AA FC47      SBRC	R4,7
     1AB 9450      COM	R5
     1AC 9230 010B STS	Pump1Num+1,R3
     1AE 9220 010A STS	Pump1Num,R2
     1B0 9250 010D STS	Pump1Num+3,R5
     1B2 9240 010C STS	Pump1Num+2,R4
(0190)    PPump1Num = Pump1Num;
     1B4 9230 0119 STS	PPump1Num+1,R3
     1B6 9220 0118 STS	PPump1Num,R2
     1B8 9250 011B STS	PPump1Num+3,R5
     1BA 9240 011A STS	PPump1Num+2,R4
(0191)    Spray1Num = Pump1Num ;
     1BC 9230 0101 STS	Spray1Num+1,R3
     1BE 9220 0100 STS	Spray1Num,R2
     1C0 9250 0103 STS	Spray1Num+3,R5
     1C2 9240 0102 STS	Spray1Num+2,R4
(0192)    SSpray1Num = Spray1Num;
     1C4 9040 0102 LDS	R4,Spray1Num+2
     1C6 9050 0103 LDS	R5,Spray1Num+3
     1C8 9020 0100 LDS	R2,Spray1Num
     1CA 9030 0101 LDS	R3,Spray1Num+1
     1CC 9230 011D STS	SSpray1Num+1,R3
     1CE 9220 011C STS	SSpray1Num,R2
     1D0 9250 011F STS	SSpray1Num+3,R5
     1D2 9240 011E STS	SSpray1Num+2,R4
(0193)    CPump1Cyc = tPump1Cyc * 1000-370;//修正0.37ms
     1D4 8129      LDD	R18,Y+1
     1D5 2733      CLR	R19
     1D6 EE08      LDI	R16,0xE8
     1D7 E013      LDI	R17,3
     1D8 D205      RCALL	empy16s
     1D9 01C8      MOVW	R24,R16
     1DA 5782      SUBI	R24,0x72
     1DB 4091      SBCI	R25,1
     1DC 9390 010F STS	CPump1Cyc+1,R25
     1DE 9380 010E STS	CPump1Cyc,R24
(0194)    CPump1CycH = (CPump1Cyc >> 8);
     1E0 011C      MOVW	R2,R24
     1E1 2C23      MOV	R2,R3
     1E2 2433      CLR	R3
     1E3 9230 0111 STS	CPump1CycH+1,R3
     1E5 9220 0110 STS	CPump1CycH,R2
(0195)    CSpray1On = (unsigned int)(tSpray1On  * 100 );
     1E7 E684      LDI	R24,0x64
     1E8 800A      LDD	R0,Y+2
     1E9 9D80      MUL	R24,R0
     1EA 9210 0109 STS	CSpray1On+1,R1
     1EC 9200 0108 STS	CSpray1On,R0
(0196)    CSpray1Cyc = (unsigned long )tSpray1Cyc * 1000 ;
     1EE 802B      LDD	R2,Y+3
     1EF 803C      LDD	R3,Y+4
     1F0 2444      CLR	R4
     1F1 2455      CLR	R5
     1F2 EE48      LDI	R20,0xE8
     1F3 E053      LDI	R21,3
     1F4 E060      LDI	R22,0
     1F5 E070      LDI	R23,0
     1F6 925A      ST	R5,-Y
     1F7 924A      ST	R4,-Y
     1F8 923A      ST	R3,-Y
     1F9 922A      ST	R2,-Y
     1FA 018A      MOVW	R16,R20
     1FB 019B      MOVW	R18,R22
     1FC D1F1      RCALL	empy32u
     1FD 9310 0105 STS	CSpray1Cyc+1,R17
     1FF 9300 0104 STS	CSpray1Cyc,R16
     201 9330 0107 STS	CSpray1Cyc+3,R19
     203 9320 0106 STS	CSpray1Cyc+2,R18
(0197)    CPump1On = tPump1On * 1000;
     205 2D2A      MOV	R18,R10
     206 2733      CLR	R19
     207 EE08      LDI	R16,0xE8
     208 E013      LDI	R17,3
     209 D1D4      RCALL	empy16s
     20A 9310 0113 STS	CPump1On+1,R17
     20C 9300 0112 STS	CPump1On,R16
(0198)    CPump1OnH = (CPump1On >> 8);
     20E 0118      MOVW	R2,R16
     20F 2C23      MOV	R2,R3
     210 2433      CLR	R3
     211 9230 0115 STS	CPump1OnH+1,R3
     213 9220 0114 STS	CPump1OnH,R2
(0199)    
(0200)    Spray2Num = (int)spray2NumL + ((int)spray2NumH << 8);
     215 2C2E      MOV	R2,R14
     216 2433      CLR	R3
     217 2C32      MOV	R3,R2
     218 2422      CLR	R2
     219 2C4C      MOV	R4,R12
     21A 2455      CLR	R5
     21B 0C42      ADD	R4,R2
     21C 1C53      ADC	R5,R3
     21D 0112      MOVW	R2,R4
     21E 2444      CLR	R4
     21F FC37      SBRC	R3,7
     220 9440      COM	R4
     221 2455      CLR	R5
     222 FC47      SBRC	R4,7
     223 9450      COM	R5
     224 9230 012B STS	Spray2Num+1,R3
     226 9220 012A STS	Spray2Num,R2
     228 9250 012D STS	Spray2Num+3,R5
     22A 9240 012C STS	Spray2Num+2,R4
(0201)    Pump2Num = Spray2Num;
     22C 9230 0135 STS	Pump2Num+1,R3
     22E 9220 0134 STS	Pump2Num,R2
     230 9250 0137 STS	Pump2Num+3,R5
     232 9240 0136 STS	Pump2Num+2,R4
(0202)    PPump2Num = Pump2Num;
     234 9040 0136 LDS	R4,Pump2Num+2
     236 9050 0137 LDS	R5,Pump2Num+3
     238 9020 0134 LDS	R2,Pump2Num
     23A 9030 0135 LDS	R3,Pump2Num+1
     23C 9230 0143 STS	PPump2Num+1,R3
     23E 9220 0142 STS	PPump2Num,R2
     240 9250 0145 STS	PPump2Num+3,R5
     242 9240 0144 STS	PPump2Num+2,R4
(0203)    SSpray2Num = Spray2Num;
     244 9040 012C LDS	R4,Spray2Num+2
     246 9050 012D LDS	R5,Spray2Num+3
     248 9020 012A LDS	R2,Spray2Num
     24A 9030 012B LDS	R3,Spray2Num+1
     24C 9230 0147 STS	SSpray2Num+1,R3
     24E 9220 0146 STS	SSpray2Num,R2
     250 9250 0149 STS	SSpray2Num+3,R5
     252 9240 0148 STS	SSpray2Num+2,R4
(0204)    //Pump2Num =  Pump1Num;
(0205)    //CPump2Cyc = tPump2Cyc * 1000 -350;
(0206)    //CPump2Cyc = CPump1Cyc;
(0207)    //CPump2CycH = (CPump2Cyc >> 8);
(0208)    //CPump2CycH =CPump1CycH ;
(0209)    //CSpray2On = (unsigned int)(tSpray2On  * 100 );
(0210)    //CSpray2Cyc = (unsigned long )tSpray2Cyc * 1000 ;
(0211)    //CPump2On = tPump2On * 1000 -200;
(0212)    //CPump2On = CPump1On;
(0213)    //CPump2OnH = (CPump2On >> 8);
(0214)    //CPump2OnH = CPump1OnH;
(0215) 	 HighByte1 = (unsigned char )(CSpray1Cyc >> 16);
     254 9040 0106 LDS	R4,CSpray1Cyc+2
     256 9050 0107 LDS	R5,CSpray1Cyc+3
     258 9020 0104 LDS	R2,CSpray1Cyc
     25A 9030 0105 LDS	R3,CSpray1Cyc+1
     25C 0112      MOVW	R2,R4
     25D 2444      CLR	R4
     25E 2455      CLR	R5
     25F 9220 0116 STS	HighByte1,R2
(0216) 	 HighByte2 = (unsigned char )(CSpray2Cyc >> 16);
     261 9040 0130 LDS	R4,CSpray2Cyc+2
     263 9050 0131 LDS	R5,CSpray2Cyc+3
     265 9020 012E LDS	R2,CSpray2Cyc
     267 9030 012F LDS	R3,CSpray2Cyc+1
     269 0112      MOVW	R2,R4
     26A 2444      CLR	R4
     26B 2455      CLR	R5
     26C 9220 0140 STS	HighByte2,R2
(0217)  
(0218)   
(0219)    CLI();                //禁止中断,保证以下发送的两字节连续
     26E 94F8      BCLR	7
(0220)    putchar(REVSUCCEED);  //回传接收成功标志
     26F EF0C      LDI	R16,0xFC
     270 DECA      RCALL	_putchar
(0221)    putchar(REVSUCCEED);  //回传接收成功标志
     271 EF0C      LDI	R16,0xFC
     272 DEC8      RCALL	_putchar
(0222) 
(0223)    if(IisOn)
     273 8008      LDD	R0,Y+0
     274 2000      TST	R0
     275 F009      BEQ	0x0277
(0224)      SEI();
     276 9478      BSET	7
(0225)  }
(0226)  FlashRxBuf(); 
     277 DDE9      RCALL	_FlashRxBuf
     278 9627      ADIW	R28,7
     279 C1A4      RJMP	pop_xgsetF0FC
FILE: C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.c
(0001) #include <iom88v.h>
(0002) #include <macros.h>
(0003) #include <uart.h>
(0004) #include <timer1.h>
(0005) 
(0006) 
(0007) //TIMER0 initialize - prescale:8
(0008) // WGM:  Normal
(0009) // desired value: 1Hz
(0010) // actual value: 1953.125Hz (99.9%)
(0011) void timer0_init(void)
(0012) {
(0013)  TCCR0B = 0x00; //stop
_timer0_init:
     27A 2422      CLR	R2
     27B BC25      OUT	0x25,R2
(0014)  TCNT0 = 0x00; //set count
     27C BC26      OUT	0x26,R2
(0015)  TCCR0A = 0x00; 
     27D BC24      OUT	0x24,R2
(0016)  TCCR0B = 0x02; //start timer
     27E E082      LDI	R24,2
     27F BD85      OUT	0x25,R24
(0017)  OCR0B = 0x60;
     280 E680      LDI	R24,0x60
     281 BD88      OUT	0x28,R24
(0018)  OCR0A = 0x03;
     282 E083      LDI	R24,3
     283 BD87      OUT	0x27,R24
     284 9508      RET
(0019) }
(0020) 
(0021) //TIMER1 initialize - prescale:8
(0022) // WGM: 0) Normal, TOP=0xFFFF
(0023) // desired value: 1MHz
(0024) // actual value: Out of range
(0025) void timer1_init(void)
(0026) {
(0027)  TCCR1B = 0x00; //stop
_timer1_init:
     285 2422      CLR	R2
     286 9220 0081 STS	0x0081,R2
(0028)  TCNT1H = 0x00 /*INVALID SETTING*/; //setup
     288 9220 0085 STS	0x0085,R2
(0029)  TCNT1L = 0x00 /*INVALID SETTING*/;
     28A 9220 0084 STS	0x0084,R2
(0030)  OCR1AH = 0x00 /*INVALID SETTING*/;
     28C 9220 0089 STS	0x0089,R2
(0031)  OCR1AL = 0x20 /*INVALID SETTING*/;
     28E E280      LDI	R24,0x20
     28F 9380 0088 STS	0x0088,R24
(0032)  OCR1BH = 0x02 /*INVALID SETTING*/;
     291 E082      LDI	R24,2
     292 9380 008B STS	0x008B,R24
(0033)  OCR1BL = 0xFF /*INVALID SETTING*/;
     294 EF8F      LDI	R24,0xFF
     295 9380 008A STS	0x008A,R24
(0034)  ICR1H  = 0x00 /*INVALID SETTING*/;
     297 9220 0087 STS	0x0087,R2
(0035)  ICR1L  = 0x00 /*INVALID SETTING*/;
     299 9220 0086 STS	0x0086,R2
(0036)  TCCR1A = 0x00;
     29B 9220 0080 STS	0x0080,R2
(0037)  TCCR1B = 0x02; //start Timer
     29D E082      LDI	R24,2
     29E 9380 0081 STS	0x0081,R24
     2A0 9508      RET
_timer1_compa_isr:
     2A1 920A      ST	R0,-Y
     2A2 921A      ST	R1,-Y
     2A3 922A      ST	R2,-Y
     2A4 923A      ST	R3,-Y
     2A5 924A      ST	R4,-Y
     2A6 925A      ST	R5,-Y
     2A7 928A      ST	R8,-Y
     2A8 929A      ST	R9,-Y
     2A9 930A      ST	R16,-Y
     2AA 931A      ST	R17,-Y
     2AB 932A      ST	R18,-Y
     2AC 933A      ST	R19,-Y
     2AD 938A      ST	R24,-Y
     2AE 939A      ST	R25,-Y
     2AF 93AA      ST	R26,-Y
     2B0 93BA      ST	R27,-Y
     2B1 93EA      ST	R30,-Y
     2B2 B60F      IN	R0,0x3F
     2B3 920A      ST	R0,-Y
     2B4 92AA      ST	R10,-Y
     2B5 92BA      ST	R11,-Y
(0038) }
(0039) /*#pragma interrupt_handler timer0_compb_isr:iv_TIM0_COMPA
(0040) void timer0_compb_isr(void) ///wy修改
(0041) {
(0042)   if(Pump1Flag == 1)
(0043)   {
(0044)     if(Cyc1H== 0)
(0045) 	{ 
(0046) 	  if((PPump1Num>0)||(Pump1Num==0))
(0047) 	  { 
(0048) 	    PORTB |= (1 << PB4); //开启油泵1
(0049) 		if (Pump1Num>0)
(0050) 		PPump1Num--;
(0051) 	    OCR0B = TCNT0 + CPump1On;//定时油泵关闭
(0052) 	    Pump1Flag = 0;
(0053) 	    On1H = CPump1OnH;
(0054) 	  }
(0055) 	  
(0056) 	}
(0057) 	else                        //动作应该为关闭油泵1
(0058) 	  Cyc1H--;
(0059)    }
(0060) 	  
(0061)  else
(0062)    {
(0063) 	  if(On1H == 0)
(0064)      {
(0065) 	  PORTB &= ~(1 << PB4); //关闭油泵1
(0066) 	  OCR0B = TCNT0 + CPump1Cyc - CPump1On;
(0067) 	  Pump1Flag = 1;
(0068) 	  Cyc1H = CPump1CycH - CPump1OnH;
(0069) 	 }
(0070) 	 else                        //动作应该为关闭油泵1
(0071) 	  On1H--;
(0072)     }
(0073)  }
(0074) */
(0075) /*#pragma interrupt_handler timer0_compa_isr:iv_TIM0_COMPB
(0076) void timer0_compa_isr(void)
(0077) {
(0078)  //compare TCNT0=OCR0B
(0079)     if(Pump2Flag == 1)           //动作应该为开启油泵2
(0080) 	{
(0081) 	 if(Cyc2H== 0)
(0082) 	{ 
(0083) 	if((PPump2Num>0)||(Pump2Num==0))
(0084) 	  { 
(0085) 	  PORTD |= (1 << PD4);   //开启油泵2      
(0086) 	 if(Pump2Num>0)        
(0087) 	 PPump2Num--;
(0088) 	  //定时油泵关闭
(0089) 	  OCR0A = TCNT0 + CPump2On;
(0090) 	  Pump2Flag = 0;
(0091) 	   On2H = CPump2OnH;
(0092) 	  }
(0093) 	}
(0094) 	 else                        
(0095) 	  Cyc2H--;
(0096)     }
(0097) 
(0098) 	else                        //动作应该为关闭油泵
(0099) 	{
(0100) 	  if(On2H == 0)
(0101)      {
(0102) 	  PORTD &= ~(1 << PD4);//关闭油泵
(0103)       //OCR0A = TCNT0 + 100; 
(0104) 	  OCR0A = TCNT0 + CPump2Cyc - CPump2On; 
(0105) 	  Pump2Flag = 1;
(0106) 	  Cyc2H = CPump2CycH - CPump2OnH; 
(0107) 	 }
(0108) 	 else                      
(0109) 	  On2H--;
(0110)     }
(0111)  }*/
(0112) 
(0113) #pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPA

⌨️ 快捷键说明

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