Нормально опишите алгоритм
Нормально опишите алгоритм
Код: Выделить всё
b=key2; //а было key1
if(b!=c) count1=500000;
if(count1){
count1--;
pump_on;
}
else{
pump_off;
}
c=b;Код: Выделить всё
#define key1 (bit_is_set(PINC, PC0))
#define TIME_OUT 500000L
//**********************************************************************************************************************//
void pump(void){
static struct{unsigned start:1; unsigned cur:1; unsigned pre:1; unsigned long count;}mPomp={0,0,0,TIME_OUT};
if(!mPomp.start){mPomp.start=1; mPomp.pre = key1;}
mPomp.cur=key1;
if(mPomp.cur!=mPomp.pre) mPomp.count=TIME_OUT;
if(mPomp.count){
mPomp.count--;
pump_off;
}
else{
pump_on;
}
mPomp.pre=mPomp.cur;
}
//**********************************************************************************************************************//
//**********************************************************************************************************************//
int main(void)
{
................
................
while (1) {
pump();
}
}
//**********************************************************************************************************************//
Код: Выделить всё
#define key1 PINC.0
unsigned char mode=PIN_NULL;
//---------------------------
if(count>500000){ //Период опроса
count=0; //
switch(mode){
//---------- состояние на выводе 0-----------
case PIN_NULL:{
if(key1==1){ //На выводе поймали 1 значит произошёл переход с 0 в 1
mode=PIN_ONE; //Переключаемся в "единичное" состояние
}
//=================
//Тут можно запускать обработчик "нулевого" состояния
break;
}
//--------Текущее состояние на выводе 1-------------
case PIN_ONE:{
if(key1==0){ //На выводе поймали 0 значит произошёл переход с 0 в 1
mode=PIN_NULL; //Переключаемся в "нулевое" состояние
}
//=================
//Тут можно запускать обработчик "единичного" состояния
break;
}
}
}