/******************************************************************** TIMER.C prikaz uporabe Timer0 AT89C2051 ===================================================================== Verzija Datum Avtor 1 1-2-1999 ===================================================================== OPIS: LED1 utripa s periodo 1s. Zakasnitev je generirana s podprogramom s pomocjo casovnika0. ********************************************************************/ #pragma SMALL REGISTERBANK(0) ROM(SMALL) CODE #include // konfiguracijska datoteka void delay(unsigned char); // zakasnitev za char msek. void bigDelay(unsigned char); // zakasnitev za char*100 msek void hugeDelay(unsigned char); // zakasnitev za char sekund #define LED1 P3_0 #define MILI_SEC 0x033E /******************************************************************** glavni program ********************************************************************/ void main(void) { TMOD=0x01; // inicializacija T0 za 16 bitni casovnik // notranja kontrola while(1) { // neskoncna zanka hugeDelay(10); // zakasnitev za 0.5 sek LED1=~LED1; // stanje LED1 se invertira } // konec neskoncne while zanke } // konec funkcije main /************************************************************** void delay(unsigned char cas) zakasnitev za cas milisekund uporablja stevec T0, ki steje strojne cikle (1,2 usek) za cas 1 msek mora presteti 833 strojnih ciklov **************************************************************/ void delay(unsigned char cas) { unsigned char stevec; unsigned int initTimer; initTimer=0xffff-MILI_SEC; // 65535-830 TR0=0; // ustavi T0 TF0=0; // brisi morebitno zastavico T0 for (stevec = cas; stevec > 0 ; stevec--) { TL0=(unsigned char)(initTimer & 0x00ff); TH0=(unsigned char)(initTimer >> 8);// initTimer v L&H zloga T0 TR0=1; // start T0 while (TF0==0) { // cakaj na konec stetja // (TF0=1) stevec=stevec; } TF0=0; } } /************************************************************** void bigDelay(unsigned char cas) zakasnitev za cas*100 milisekund **************************************************************/ void bigDelay(unsigned char cas) { unsigned char stevec; for (stevec=0;stevec++ < cas;delay(50)); for (stevec=0;stevec++ < cas;delay(50)); } /************************************************************** void hugeDelay(unsigned char cas) zakasnitev za cas sekund **************************************************************/ void hugeDelay(unsigned char cas) { unsigned char stevec; for (stevec=0;stevec++ < cas;bigDelay(10)); }