/******************************************************************** SENS.C senzoriranje z AT89C2051 ===================================================================== Verzija Datum Avtor 1 7-2-1999 ===================================================================== OPIS: Program bere stanje na P3_6 (AOUT), ki je izhod analognega komparatorja. V primeru, da je na tem izhodu kontinuirano 10 sekund 1log, prizge LED1. LED1 ugasne, ko je na tem izhodu kontinuirano 10 sekund log0. Obdobja 10 sekund merimo s pomocjo prekinitev Timerja1. ********************************************************************/ #pragma SMALL REGISTERBANK(0) ROM(SMALL) CODE #include // konfiguracijska datoteka void clockInt(void); // prekinitveni program #define LED1 P3_0 #define LED8 P1_2 #define MAXTIME 1017 unsigned int log0Time, log1Time; // spremenljivki za stetje /******************************************************************** glavni program ********************************************************************/ void main(void) { TMOD=0x00; // inicializacija T1 za 13 bitni casovnik // notranja kontrola EA=1; // generalna dovolitev prekinitve ET1=1; // dovolitev prekinitve Timer1 TR1=1; // start Timer1 LED1=1; // LED1 ne gori log0Time=0; log1Time=0; // inicializacija stevcev while(1) { // neskoncna zanka if (AOUT) { // pogoj za vklop LED1 LED8=0; // orientacija log0Time=0; if (log1Time >= MAXTIME) { // ze 10 sec LED1=0; // prizgi LED1 log1Time=0; // reset stevca } else log1Time=(log1Time==0) ? 1 : log1Time; // inicializiraj cikel vklopa } else { // pogoj za izklop LED1 LED8=1; // orientacija log1Time=0; if (log0Time >= MAXTIME) { // ze 10 sec LED1=1; // ugasni LED1 log0Time=0; // reset stevca } else log0Time=(log0Time==0) ? 1 : log0Time; // inicializiraj cikel izklopa } } } /******************************************************************* void clockInt(void) uporablja reg banko 1, stevec 1 Prekinitveni program, ki vsakih 9.83 ms poveca stevce, ce so ti vecji od 0. Ce so enaki 0, jih ne poveca. Ko nastopi pogoj za vklop ali izklop LED1, mora funkcija, ki to preverja, postaviti log1Time ali log0Time na 1. Nato caka toliko iteracij, da se stevec poveca do zelene vrednosti MAXTIME in po tem vklopi ali izklopi LED1. ********************************************************************/ void clockInt(void) interrupt 3 using 2 { log0Time = (log0Time > 0) ? ++log0Time : 0; log1Time = (log1Time > 0) ? ++log1Time : 0; }