📄 gas2.c
字号:
EECON2 = 0xAA;
EECON1bits.WR = 1;
Nop();
INTCONbits.GIEL = 1;
INTCONbits.GIEH = 1;
}
EECON1bits.WREN = 0;
}
void PJ_TIMING(void)
{
CAL_PY_STATUS();
ACC_PYMK();
CAL_SPEED();
CAL_PQYC();
PZ_COME.AllBits=0;
PZ_OVER.AllBits=0;
EXE_PZ0();
EXE_PZ1();
EXE_PZ2();
EXE_PZ3();
EXE_PZ4();
EXE_PZ5();
EXE_PQ_TIMER();
//PORTD=0xC0 | (PORTC &0x3F);
if(GAS_FLAG.onebit.SPEED_OK)
PORTD=0xc0 | PQ_REG.AllBits;
else
PORTD=0;
}
//============================cal signed pqyc=====================================
void CAL_PQYC(void)
{
if(SPEED_LEVEL>0x17)
SPEED_LEVEL=0x17;
else
SPEED_LEVEL=SPEED_LEVEL;
int_d=ZKYL_LEVEL;
int_addr=int_addr+int_d & 0x00ff;
int_addr=int_addr+ 0x0002;
if(int_addr>=0x300)int_addr=0x2FF;
//PQ_PERCENT=SPEED_PQYC_TABLE[int_addr];
//PQ_PERCENT=20;
if(PQ_PERCENT>=0x80){
PERCENT_FLAG.onebit.sign=1;
PQ_PERCENT=~PQ_PERCENT +1;
}
else{
PERCENT_FLAG.onebit.sign=0;
}
int_d=PQ_PERCENT;
if(int_d>=0x64)
PQ_PERCENT=0x63;
return;
PERCENT_BIT=PQ_PERCENT;
PERCENT_BIT=PERCENT_BIT+(PQ_PERCENT>>2);
PERCENT_BIT=PERCENT_BIT+(PQ_PERCENT>>5);
if(PERCENT_BIT>128)
PERCENT_BIT=127;
PERCENT_FLAG.AllBits=(PERCENT_FLAG.AllBits&0x80)+PERCENT_BIT;
int_d=PYMK;
int_d=(int_d<<8);
PQYC_TIME=0;
if(PERCENT_FLAG.onebit.v2==1){
PQYC_TIME=PQYC_TIME+(int_d>>1);
}
if(PERCENT_FLAG.onebit.v4==1){
PQYC_TIME=PQYC_TIME+(int_d>>2);
}
if(PERCENT_FLAG.onebit.v8==1){
PQYC_TIME=PQYC_TIME+(int_d>>3);
}
if(PERCENT_FLAG.onebit.v16==1){
PQYC_TIME=PQYC_TIME+(int_d>>4);
}
if(PERCENT_FLAG.onebit.v32==1){
PQYC_TIME=PQYC_TIME+(int_d>>5);
}
if(PERCENT_FLAG.onebit.v64==1){
PQYC_TIME=PQYC_TIME+(int_d>>6);
}
if(PERCENT_FLAG.onebit.v128==1){
PQYC_TIME=PQYC_TIME+(int_d>>7);
}
PQYC_TIME=(PQYC_TIME>>8);
if(PQYC_TIME>=0x80)PQYC_TIME=0x7f;
if(PQYC_TIME==0)PQYC_TIME=1;
PQYC=PQYC_TIME;
}
//=========================cal speed=================================================
void CAL_SPEED(void)
{
//计算周期
if(PZ0_PERIOD==0xffff)
{
PZ_PERIOD_OVFL.onebit.PZ0=1;
}
else
{
PZ_PERIOD_OVFL.onebit.PZ0=0;
PZ0_PERIOD++;
}
//喷油10秒计数器
if(PZ_COME.onebit.PZ0){
MONITOR_FLAG.onebit.PULSE_EXIST=0x01;
PULSE_DOG_CNT=0x0a;
PZ_PERIOD=PZ0_PERIOD;
PZ0_PERIOD=0x0000;
PERIOD_ADDR=(PZ_PERIOD>>1)&0x7fff;
if(!PULSE_FLAG.onebit.S1)
{
PERIOD_ADDR=(PERIOD_ADDR>>1)&0x7fff;
if(!PULSE_FLAG.onebit.S0)
PERIOD_ADDR=(PERIOD_ADDR>>1)&0x7fff;
}
if(PERIOD_ADDR>0xFD)PERIOD_ADDR=0xFD;
SPEED_LEVEL=PERIOD_LEVEL_TABLE[PERIOD_ADDR + 0x02];
if(SPEED_LEVEL>0x17)SPEED_LEVEL=0x17;
}
}
//==========================exe pz===================================
void EXE_PZ0(void)
{
if(PZ_COME.onebit.PZ0){
if(PERCENT_FLAG.onebit.sign){
PQ_CUT.onebit.PZ0=1;
PZ0_PQYC=PQYC;
}
else
PQ_REG.onebit.PZ0=1;
}
if(PZ_OVER.onebit.PZ0){
if(PERCENT_FLAG.onebit.sign){
PQ_REG.onebit.PZ0=0;
}
else {
PQ_REG.onebit.PZ0=1;
PQ_LAST.onebit.PZ0=1;
PZ0_PQYC=PQYC;
}
}
if(PQ_LAST.onebit.PZ0)
{
if(PZ0_PQYC!=0x00)
PZ0_PQYC=PZ0_PQYC-1;
else
{
PQ_LAST.onebit.PZ0 =0;
PQ_REG.onebit.PZ0=0;
}
}
if(PQ_CUT.onebit.PZ0)
if(PZ0_PQYC==0)
{
PQ_CUT.onebit.PZ0=0;
PQ_REG.onebit.PZ0=1;
}
else
PZ0_PQYC--;
}
void EXE_PZ1(void)
{
if(PZ_COME.onebit.PZ1){
if(PERCENT_FLAG.onebit.sign){
PQ_CUT.onebit.PZ1=1;
PZ1_PQYC=PQYC;
}
else
PQ_REG.onebit.PZ1=1;
}
if(PZ_OVER.onebit.PZ1){
if(PERCENT_FLAG.onebit.sign){
PQ_REG.onebit.PZ1=0;
}
else {
PQ_REG.onebit.PZ1=1;
PQ_LAST.onebit.PZ1=1;
PZ1_PQYC=PQYC;
}
}
if(PQ_LAST.onebit.PZ1)
{
if(PZ1_PQYC!=0x00)
PZ1_PQYC=PZ1_PQYC-1;
else
{
PQ_LAST.onebit.PZ1 =0;
PQ_REG.onebit.PZ1=0;
}
}
if(PQ_CUT.onebit.PZ1)
if(PZ1_PQYC==0)
{
PQ_CUT.onebit.PZ1=0;
PQ_REG.onebit.PZ1=1;
}
else
PZ1_PQYC--;
}
void EXE_PZ2(void)
{
if(PZ_COME.onebit.PZ2){
if(PERCENT_FLAG.onebit.sign){
PQ_CUT.onebit.PZ2=1;
PZ2_PQYC=PQYC;
}
else
PQ_REG.onebit.PZ2=1;
}
if(PZ_OVER.onebit.PZ2){
if(PERCENT_FLAG.onebit.sign){
PQ_REG.onebit.PZ2=0;
}
else {
PQ_REG.onebit.PZ2=1;
PQ_LAST.onebit.PZ2=1;
PZ2_PQYC=PQYC;
}
}
if(PQ_LAST.onebit.PZ2)
{
if(PZ2_PQYC!=0x00)
PZ2_PQYC=PZ2_PQYC-1;
else
{
PQ_LAST.onebit.PZ2 =0;
PQ_REG.onebit.PZ2=0;
}
}
if(PQ_CUT.onebit.PZ2)
if(PZ2_PQYC==0)
{
PQ_CUT.onebit.PZ2=0;
PQ_REG.onebit.PZ2=1;
}
else
PZ2_PQYC--;
}
void EXE_PZ3(void)
{
if(PZ_COME.onebit.PZ3){
if(PERCENT_FLAG.onebit.sign){
PQ_CUT.onebit.PZ3=1;
PZ3_PQYC=PQYC;
}
else
PQ_REG.onebit.PZ3=1;
}
if(PZ_OVER.onebit.PZ3){
if(PERCENT_FLAG.onebit.sign){
PQ_REG.onebit.PZ3=0;
}
else {
PQ_REG.onebit.PZ3=1;
PQ_LAST.onebit.PZ3=1;
PZ3_PQYC=PQYC;
}
}
if(PQ_LAST.onebit.PZ3)
{
if(PZ3_PQYC!=0x00)
PZ3_PQYC=PZ3_PQYC-1;
else
{
PQ_LAST.onebit.PZ3 =0;
PQ_REG.onebit.PZ3=0;
}
}
if(PQ_CUT.onebit.PZ3)
if(PZ3_PQYC==0)
{
PQ_CUT.onebit.PZ3=0;
PQ_REG.onebit.PZ3=1;
}
else
PZ3_PQYC--;
}
void EXE_PZ4(void)
{
if(PZ_COME.onebit.PZ4){
if(PERCENT_FLAG.onebit.sign){
PQ_CUT.onebit.PZ4=1;
PZ4_PQYC=PQYC;
}
else
PQ_REG.onebit.PZ4=1;
}
if(PZ_OVER.onebit.PZ4){
if(PERCENT_FLAG.onebit.sign){
PQ_REG.onebit.PZ4=0;
}
else {
PQ_REG.onebit.PZ4=1;
PQ_LAST.onebit.PZ4=1;
PZ4_PQYC=PQYC;
}
}
if(PQ_LAST.onebit.PZ4)
{
if(PZ4_PQYC!=0x00)
PZ4_PQYC=PZ4_PQYC-1;
else
{
PQ_LAST.onebit.PZ4 =0;
PQ_REG.onebit.PZ4=0;
}
}
if(PQ_CUT.onebit.PZ4)
if(PZ4_PQYC==0)
{
PQ_CUT.onebit.PZ4=0;
PQ_REG.onebit.PZ4=1;
}
else
PZ4_PQYC--;
}
void EXE_PZ5(void)
{
if(PZ_COME.onebit.PZ5){
if(PERCENT_FLAG.onebit.sign){
PQ_CUT.onebit.PZ5=1;
PZ5_PQYC=PQYC;
}
else
PQ_REG.onebit.PZ5=1;
}
if(PZ_OVER.onebit.PZ5){
if(PERCENT_FLAG.onebit.sign){
PQ_REG.onebit.PZ5=0;
}
else {
PQ_REG.onebit.PZ5=1;
PQ_LAST.onebit.PZ5=1;
PZ5_PQYC=PQYC;
}
}
if(PQ_LAST.onebit.PZ5)
{
if(PZ5_PQYC!=0x00)
PZ5_PQYC=PZ5_PQYC-1;
else
{
PQ_LAST.onebit.PZ5 =0;
PQ_REG.onebit.PZ5=0;
}
}
if(PQ_CUT.onebit.PZ5)
if(PZ5_PQYC==0)
{
PQ_CUT.onebit.PZ5=0;
PQ_REG.onebit.PZ5=1;
}
else
PZ5_PQYC--;
}
//===========================喷气脉宽看门狗=======================================
void EXE_PQ_TIMER(void)
{
if(PQ_REG.onebit.PZ0)
if(PQ0_TIMER>=350)
PQ_REG.onebit.PZ0=0;
else
PQ0_TIMER++;
else
PQ0_TIMER=0;
if(PQ_REG.onebit.PZ1)
if(PQ1_TIMER>=350)
PQ_REG.onebit.PZ1=0;
else
PQ1_TIMER++;
else
PQ1_TIMER=0;
if(PQ_REG.onebit.PZ2)
if(PQ2_TIMER>=350)
PQ_REG.onebit.PZ2=0;
else
PQ2_TIMER++;
else
PQ2_TIMER=0;
if(PQ_REG.onebit.PZ3)
if(PQ3_TIMER>=350)
PQ_REG.onebit.PZ3=0;
else
PQ3_TIMER++;
else
PQ3_TIMER=0;
if(PQ_REG.onebit.PZ4)
if(PQ4_TIMER>=350)
PQ_REG.onebit.PZ4=0;
else
PQ4_TIMER++;
else
PQ4_TIMER=0;
if(PQ_REG.onebit.PZ5)
if(PQ5_TIMER>=350)
PQ_REG.onebit.PZ5=0;
else
PQ5_TIMER++;
else
PQ5_TIMER=0;
}
//=============================喷油脉宽累加=============================================
void ACC_PYMK()
{
if(PZ_OLD.onebit.PZ0)
{
if(PZ0_PYMK<0xFD)
PZ0_PYMK++;
}
if(PZ_OVER.onebit.PZ0){
PYMK=PZ0_PYMK;
PZ0_PYMK=0;
}
if(PZ_OLD.onebit.PZ1)
{
if(PZ1_PYMK<0xFD)
PZ1_PYMK++;
}
if(PZ_OLD.onebit.PZ2)
{
if(PZ2_PYMK<0xFD)
PZ2_PYMK++;
}
if(PZ_OLD.onebit.PZ3)
{
if(PZ3_PYMK<0xFD)
PZ3_PYMK++;
}
if(PZ_OLD.onebit.PZ4)
{
if(PZ4_PYMK<0xFD)
PZ4_PYMK++;
}
if(PZ_OLD.onebit.PZ5)
{
if(PZ5_PYMK<0xFD)
PZ5_PYMK++;
}
}
//===========================喷油状态====================================================
void CAL_PY_STATUS(void)
{
PZ_NEW.AllBits=PORTC;
PZ_STATUS.AllBits=PZ_OLD.AllBits ^ PZ_NEW.AllBits;
PZ_OLD.AllBits=PZ_NEW.AllBits;
PZ_COME.AllBits=PZ_STATUS.AllBits & PZ_OLD.AllBits;
PZ_OVER.AllBits=PZ_STATUS.AllBits & (~PZ_OLD.AllBits);
}
#pragma code
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -