📄 timer1.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 + -