Program PIC12F1840: #include //vložit hlavičkový soubor htc.h #include //vložit hlavičkový soubor stdlib.h //základní konfigurace __CONFIG (FOSC_INTOSC & WDTE_ON & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_ON & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF); __CONFIG (WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_LO & LVP_OFF); //konfigurace portů #define B LATAbits.LATA0 // LED modrá #define G LATAbits.LATA1 // LED zelená #define BZU LATAbits.LATA2 // Bzučák #define Napeti PORTAbits.RA4 // měření napětí #define TRAN LATAbits.LATA5 // zapínání spínacího tranzistoru // definování proměných unsigned long blik,mezi,tma,U,pocet,i; // definování podprogramů void Cas(unsigned long b); void PICinit(); //************************************************************************** // INICIACE PICu void PICinit() //začátek programu { TRISA=0b00011000; // nastavení vstupů, 0=výstup, 1=vstup ANSELA=0b00010000; // nastavení digitálních a analogových kanálů, 0=digi, 1=analog PORTA=0; // vynulování výstopů LATA=0; // vynulování vstopů OSCCON=0b01011010; // 1 MHz interní oscilátor WDTCON=0b00011000; // Nezakousávající pes 4s ADCON1=0b10000000; // nastavení zarovnání vpravo, frekvence konverze FOSC/2, reference VDD ADCON0=0b00001101; // nastavit kanál RA4=AN3, zapnutí ADC modulu } //CASOVACÍ PODPROGRAM void Cas(unsigned long b) // zacátek programu { for(;b>0;b--); // cykluj do té doby dokud bude "b" větší než 0 } //************************************************************************** // HLAVNÍ PROGRAM void main() // začátek hlavního programu { PICinit(); // jdi na PICinit Cas(10000); //cekej 10000 cyklů blik=500; // LED sviti 500 cyklu mezi=5000; // 5000 cyklu mezi bliknutim LED tma=10000; // 10000 cyklu mezi dalsim merenim while(1) //cykluj do nekonecna { ADCON0=0b00001111; // nastavit kanál RA4=AN3, zapnutí ADC modulu while(ADCON0==0b00001111); // čekej dokud ADCON0 nebude nadefinován U=((ADRESH*256)+ADRESL)*3.22266; // 10bitový výsledek *3300 mV napájecí napětí/1024 if(U<1000) // jestlize je napeti mensi nez 1000 mV { TRAN=1; // zapni tranzistor if(U<250) pocet=1; // jestlize je napeti mensi nez 250 mV, blikej 1x if(U>=250 && U<500) pocet=2; // jestlize je napeti 250 - 500 mV, blikej 2x if(U>=500 && U<750) pocet=3; // jestlize je napeti 500 - 750 mV, blikej 3x if(U>=750 && U<1000) pocet=4; // jestlize je napeti 750 - 1000 mV, blikej 4x for(i=0;i=1000 && U<2000) { TRAN=1; if(U<1250) pocet=1; if(U>=1250 && U<1500) pocet=2; if(U>=1500 && U<1750) pocet=3; if(U>=1750 && U<2000) pocet=4; for(i=0;i=2000 && U<2700) { TRAN=1; if(U<2250) pocet=1; if(U>=2250 && U<2500) pocet=2; if(U>=2500 && U<2700) pocet=3; for(i=0;i=2700) // jestlize je napeti vetsi nez 2700 mV { TRAN=0; // vypni tranzistor BZU=1; // zapni bzucak Cas(mezi); // cekej BZU=0; // vypni bzucak Cas(mezi); // cekej } asm("CLRWDT"); // resetovat hlidaciho psa } //004D,0059,0053,0021=MYS! }