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

📄 timer1.c

📁 一个6缸发动机的ECU控制程序
💻 C
字号:
#include <iom88v.h>
#include <macros.h>
#include <uart.h>
#include <timer1.h>


//TIMER0 initialize - prescale:8
// WGM:  Normal
// desired value: 1Hz
// actual value: 1953.125Hz (99.9%)
void timer0_init(void)
{
 TCCR0B = 0x00; //stop
 TCNT0 = 0x00; //set count
 TCCR0A = 0x00; 
 TCCR0B = 0x02; //start timer
 OCR0B = 0x60;
 OCR0A = 0x03;
}

//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1MHz
// actual value: Out of range
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x00 /*INVALID SETTING*/; //setup
 TCNT1L = 0x00 /*INVALID SETTING*/;
 OCR1AH = 0x00 /*INVALID SETTING*/;
 OCR1AL = 0x20 /*INVALID SETTING*/;
 OCR1BH = 0x02 /*INVALID SETTING*/;
 OCR1BL = 0xFF /*INVALID SETTING*/;
 ICR1H  = 0x00 /*INVALID SETTING*/;
 ICR1L  = 0x00 /*INVALID SETTING*/;
 TCCR1A = 0x00;
 TCCR1B = 0x02; //start Timer
}
/*#pragma interrupt_handler timer0_compb_isr:iv_TIM0_COMPA
void timer0_compb_isr(void) ///wy修改
{
  if(Pump1Flag == 1)
  {
    if(Cyc1H== 0)
	{ 
	  if((PPump1Num>0)||(Pump1Num==0))
	  { 
	    PORTB |= (1 << PB4); //开启油泵1
		if (Pump1Num>0)
		PPump1Num--;
	    OCR0B = TCNT0 + CPump1On;//定时油泵关闭
	    Pump1Flag = 0;
	    On1H = CPump1OnH;
	  }
	  
	}
	else                        //动作应该为关闭油泵1
	  Cyc1H--;
   }
	  
 else
   {
	  if(On1H == 0)
     {
	  PORTB &= ~(1 << PB4); //关闭油泵1
	  OCR0B = TCNT0 + CPump1Cyc - CPump1On;
	  Pump1Flag = 1;
	  Cyc1H = CPump1CycH - CPump1OnH;
	 }
	 else                        //动作应该为关闭油泵1
	  On1H--;
    }
 }
*/
/*#pragma interrupt_handler timer0_compa_isr:iv_TIM0_COMPB
void timer0_compa_isr(void)
{
 //compare TCNT0=OCR0B
    if(Pump2Flag == 1)           //动作应该为开启油泵2
	{
	 if(Cyc2H== 0)
	{ 
	if((PPump2Num>0)||(Pump2Num==0))
	  { 
	  PORTD |= (1 << PD4);   //开启油泵2      
	 if(Pump2Num>0)        
	 PPump2Num--;
	  //定时油泵关闭
	  OCR0A = TCNT0 + CPump2On;
	  Pump2Flag = 0;
	   On2H = CPump2OnH;
	  }
	}
	 else                        
	  Cyc2H--;
    }

	else                        //动作应该为关闭油泵
	{
	  if(On2H == 0)
     {
	  PORTD &= ~(1 << PD4);//关闭油泵
      //OCR0A = TCNT0 + 100; 
	  OCR0A = TCNT0 + CPump2Cyc - CPump2On; 
	  Pump2Flag = 1;
	  Cyc2H = CPump2CycH - CPump2OnH; 
	 }
	 else                      
	  On2H--;
    }
 }*/

#pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPA
void timer1_compa_isr(void)
{
 //compare occured TCNT1=OCR1A
 switch(ActFlag1)
 {
   case 0:
     {
	 if(HighByte1 == 0)	
	  {
	   if((SSpray1Num>0)||(Spray1Num==0))
	     //喷油器控制引脚置高
		 //Spray1Num--;
		{ 
		  PORTB = PORTB |(1<<PB2);
		  PORTB = PORTB |(1<<PB3);
		  PORTB = PORTB |(1<<PB4);
		  PORTB = PORTB |(1<<PB1);
		  PORTD = PORTD |(1<<PD4);
		  PORTD = PORTD |(1<<PD5);
	
		 OCR1A = TCNT1 + CSpray1On;    //喷油器关定时
		 if (Spray1Num>0)
		 SSpray1Num--;
		 if(Spray1Num <= 0)
	       Spray1Num = 0;
	   //T1COMPA = OCR1A;
	     ActFlag1 = 1;   //转换到下一动作
		}
	  }
	 else
	   {
	     HighByte1 --;
	     ActFlag1= 0;   //转换到下一动作
	   }
       break;
	 }
   case 1:
     {
	      
		  PORTB = PORTB &~(1<<PB2);
		  PORTB = PORTB &~(1<<PB3);
		  PORTB = PORTB &~(1<<PB4);
		  PORTB = PORTB &~(1<<PB1);
		  PORTD = PORTD &~(1<<PD4);
		  PORTD = PORTD &~(1<<PD5);
	    //if(HighByte1 == 0)	
	   { 
	     OCR1A = TCNT1 + ( unsigned int )CSpray1Cyc - CSpray1On ;
	     ActFlag1= 0;   //转换到下一动作
	   }
	  // else
	  // {
	  //   HighByte1 --;
	  //  ActFlag1= 1;   //转换到下一动作
	  // }
	   break;	 
	 }
   default:
	   break;	
 }
}

/*#pragma interrupt_handler timer1_compb_isr:iv_TIM1_COMPB
void timer1_compb_isr(void)
{
 switch(ActFlag2)
 {
   case 0:
     {
	 if(HighByte2 == 0)	
	  {
	   if((SSpray2Num>0)||(Spray2Num==0))
	     //喷油器2控制引脚置高
		{
		 PORTD = PORTD |(1<<PD5);
		 OCR1B = TCNT1 + CSpray2On;    //喷油器2关定时
		  if (Spray2Num>0)
		 SSpray2Num--;
		if(Spray2Num < 0)
	       Spray2Num = 0;
	   //T1COMPA = OCR1A;
	     ActFlag2 = 1;   //转换到下一动作
	   }
	   }
	 else
	   {
	     HighByte2 --;
	     ActFlag2= 0;   //转换到下一动作
	   } 
       break;
	 }
   case 1:
     {
	   PORTD = PORTD&~(1<<PD5);
	    //if(HighByte2 == 0)	
	   { 
	     OCR1B = TCNT1 + ( unsigned int )CSpray2Cyc - CSpray2On ;
		 
	     ActFlag2= 0;   //转换到下一动作
	   }
	   
	   //else
	   //{
	   //  HighByte2 --;
	   
	 // ActFlag2= 0;   //转换到下一动作
	 //  }
	   break;	 
	 }
  default:
	   break;	
 }
}
*/


⌨️ 快捷键说明

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