/******************************************************************** * CENT_REG.CP * *-------------------------------------------------------------------* * programiral:Slavko Murko * * prevedeno z (PICC - CCS PCM verz.2.542) * *********************************************************************/ /* 1999-03-07 centr_r01.cp - program je prevelik za 84,uspeçno preveden za 63 1999-03-07 centr_r02.cp - za 84 91% 1999-03-07 centr_r03.cp - tabela,ki jo zaporedoma bere na lcd 1999-03-14 centr_r04.cp - koraki1 in 2,uvedena sprem. temperatura 1999-03-16 centr_r05.cp - Led_lestv- 6 led diod potrebno krmiljenje dveh diod na enkrat-rutina naj dela z biti,vh.parameter 0,(1),2,(3),,10 - za neparne vrednosti gorijo obe-leva in desna. ,nastavitev §el.temperature v EE. 1999-04-20 centr_r06.cp verzija za seminarko ¦umer in Jakomini 1999-10-29 centr_r10.cp -namesto Led_lestv je 2x7-seg LED displej,dela prek IRQ 1999-10-29 centr_r11.cp -na led prikazuje temperaturo,ki jo meri PREDLOG1: Za regulator uporabi PD , I pa je §e v motorju. 1999-11-01 centr_r12.cp - tipke delajo. Probleme ima Print_led v trenutku ko tipko spustis,od nekod pobere Ÿuden zmak. 1999-11-01 centr_12a.cp - tipke delajo preblem reçen z PUSH lokacija 0x0C v IRQ 1999-11-01 centr_13.cp - prikazuje temperaturo,ki je iz lung skrajçana v int 1999-11-02 centr_13a.cp - ven vr§eno mno§enje in deljenje,skrajçana koda 1999-11-05 centr_13b.cp - predelava za tisk ¦UMER 1999-11-05 centr_13b.cp - predelava za tisk ¦UMER 1999-11-06 centr_14.cp -nazaj na exp.pl., poenostavljeno:PD_REG,zasuk[sek],itd PREDLOG2:-temperatura naj bo (BYTE)[-10 do +100stC] po koraku 0.5 -10C=0;0C=20;100C=220;to naj reçuje Print_temp(BYTE) -ali pa razçiri na signed long 1999-11-07 centr_14a.cp -dela vnos §el.vr in RO¬NO, 1999-11-07 centr_14b.cp -PREDLOG2 je reçen (ostalo 6 bajtov ROMa 1999-11-09 centr_15.cp -skrajçana V_7_seg in predelano za Tisk_zumer PREDLOG3:-pregulator naj aktivira tudi sprememba §elene vrednosti za veŸ kot 3 st. zasuk_ventila mora biti long ker je drugaŸe owerflow 1999-11-14 cent_15a -> cent_15x - reg.se aktivira po nast.zel vredn. 1999-11-14 cent_15b POSKUS Z long ki pa ni uspel -(nekaj pametnih idej za skarajçavo) 1999-11-14 cent_15y -zasuk_ventila je long -Y=(epsilon[0.5st.]+gradient[0.5st.]*2)*2 [deset.sekunde] 1999-11-14 cent_16 -E0 -izpad sonde ne resetira PICa ampak dela dalje in omogoŸa zapiranje in odpiranje roŸno *** ODDANO KRI¦ANCU 17.11.1999 1999-11-26 cent_17 za tisk REG.TEMP. //vstavljen je kvarz 3MHz - porihtaj pozneje NAJBOLæE KUPI 4MHZ DRUGA¬E PREVE¬ UTRIPA led */ /***************************************/ /* P O G O J N O _ P R E V A J A N J E */ /***************************************/ #define PIC 84 //#define UPORABLJAM_LCD #define DS1820_SINGLE #define LED_DISPLAY #define TISK_ZUMER #if PIC == 84 #define IRQ_POENOSTAVLJEN //priçpara RAM in ROM - NE USTREZA PICu 63 #endif #case // Da loŸi male in velike Ÿrke #id CHECKSUM #USE FAST_IO(A) #USE FAST_IO(B) #ZERO_RAM // Briçe RAM po startu programa /***********************************/ /*******************************************/ /* D E F I N I C I J E _ V _ I _ P I N O V */ /*******************************************/ //============================ #if PIC==84 //============================ #include <16f84.h> #include #ifdef TISK_TEMP_REG //DEJANSKO je kvarz 3MHz - porihtaj pozneje #define KVARC 3 /*Mhz*/ #include "tiskR_T.icp" ********* tisk REG.TEMP. narisal Slavko Murko #endif #ifdef TISK_ZUMER #define KVARC 4 /*Mhz*/ #include "tiskR_T.icp" ********* tisk REG.TEMP. narisal Slavko Murko //#include "tisk_zum.icp" ********* uporabljen predelan tisk seminarske zumer #else #include "F84_exp5.icp" ********* na eksperimentalni ploçŸici z LCD #endif #ifdef LED_LESTVICA #include "cen_exp1.icp" *********na eksperimentalni ploçŸici z LED lestvico #endif #USE DELAY (CLOCK=4000000) #fuses XT,WDT,PUT,NOPROTECT #endif //============================ #if PIC==63 //============================ #include <16c63.h> #include //#include "UK63_h06.icp" //moja ploçŸica #include "UK63_h07.icp" //ærokova ploçŸica z malim trafom #define KVARC 20 /*Mhz*/ #USE DELAY (CLOCK=20000000) #USE FAST_IO(C) #fuses HS,WDT,PUT,BROWNOUT,NOPROTECT #endif /***********************************/ /* L A S T N O S T I _ S T R O J A */ /***********************************/ #define HIST 2*2 //+-2stopinje /*********************************/ /* V S E B I N A _ E E P R O M A */ /*********************************/ #define TEMP_ZELENA 1 #define KONEC_EE TEMP_ZELENA+2 /***********************************************/ /* G L O B A L N E _ S P R E M E N L J I V K E */ /***********************************************/ signed long temperatura; #ifdef DELAY_IRQJEV BOOLEAN cakaj_irq; #endif #ifdef LED_DISPLAY BOOLEAN Led_enice_na_vrsti; BYTE Led_enice; BYTE Led_desetice; BOOLEAN Sonda_prisotna; #endif BYTE Ti_sp_gor; BYTE Ti_sp_dol; BOOLEAN Flag_rocno; BYTE Stevec_desetink; BYTE Timer_tipka_pritisnjena,Timer_tipka_spuscena; unsigned int stot_sek0,stot_sek; unsigned int stot_sek1; //,stot_sek2,stot_sek3,stot_sek4; unsigned int stot_sekX; //stot_sekY; //unsigned int desY; unsigned long desY; unsigned int sekX; //sekY; unsigned int minX,minY; //urY; unsigned int stot_sek_ds1820; //unsigned long stot_sekLong; /*******************/ /* F U N K C I J E */ /*******************/ void Print_led(signed int stevilo); BYTE Ascii_v_7seg(BYTE bcd_cifra); void Inicializacija_periferije () { set_tris_a (_TRIS_A); set_tris_b (_TRIS_B); OPTION = WDT_1152MS | RTCC_INTERNAL ; // W-Dog: 2x, RTCC: int. clock//WDT_2304MS//OPTION.7=0 > Rb poll up so vkljuŸeni za tipkovnico //ta komanda briçe TMR0 in zmoti IRQ,paçe dolga je zato ni primerna--> setup_counters(RTCC_INTERNAL,WDT_1152MS); enable_interrupts(RTCC_ZERO); enable_interrupts(GLOBAL); // INTCON = GLOBAL | RTCC_ZERO; // OmogoŸi prekinitve za RTCC } /*****************/ /* I N C L U D E */ /*****************/ #include #include "ds1820.icp" #inline void Error(int stev) { Print_led(stev); Led_desetice=Ascii_v_7seg('E'); while(1); //Ÿaka na wdt_reset } BYTE Ascii_v_7seg(BYTE bcd_cifra) { //krajçe za 20 bajtov od if varjanjante #if 1 //¬E BI RAD æE SKTAJæAL JIH NAPIæI V TABELO IN KLI¬I Z INDEKSOM 1,2,3 ITD. //takrat bo RETLW priçparal bos pri vsaki vrednosti 2 bajta //krajçe za 41 bajtov od switch varjanjte BYTE indeks; BYTE const Kode_7_seg[19] = { 0b00111111, //'0' 0b00000110, //'1' 0b01011011, //'2' 0b01001111, //'3' 0b01100110, //'4' 0b01101101, //'5' 0b01111101, //'6' 0b00000111, //'7' 0b01111111, //'8' 0b01101111, //'9' 0b01111001, //'E' =10 0b01010000, //'r' =11 // 0b10111110, //U. // 0b11110001, //F. // 0b10111111, //O. 0b01001001, //'=' =12 //E brez pokonŸne Ÿrte 0b01100011, //'*' =13 //mali o zgoraj 0b01011100, //'_' =14 //mali o spodaj 0b01000000, //'-' =15 minus 0b00000000, //SPACE, ugasnjen }; indeks = 16; //SPACE if (bcd_cifra>='0' && bcd_cifra<='9') indeks=bcd_cifra-'0'; if (bcd_cifra == 'E') indeks=10; if (bcd_cifra == 'r') indeks=11; if (bcd_cifra == '=') indeks=12; if (bcd_cifra == '*') indeks=13; if (bcd_cifra == '_') indeks=14; if (bcd_cifra == '-') indeks=15; return(~Kode_7_seg[indeks]); #else //krajçe za 20 bajtov od if varjanjante switch (bcd_cifra) { case '1': return(~0b00000110); case '2': return(~0b01011011); case '3': return(~0b01001111); case '4': return(~0b01100110); case '5': return(~0b01101101); case '6': return(~0b01111101); case '7': return(~0b00000111); case '8': return(~0b01111111); case '9': return(~0b01101111); case '0': return(~0b00111111); case 'E': return(~0b01111001); // case 'r': return(~0b01010000); // // case 'U': return(~0b10111110); //U. // case 'F': return(~0b11110001); //F. // case 'O': return(~0b10111111); //O. case '=': return(~0b01001001); // //E brez pokonŸne Ÿrte case '*': return(~0b01100011); // //mali o zgoraj case '_': return(~0b01011100); // //mali o spodaj case '-': return(~0b01000000); // default: return(~0b00000000); //SPACE, ugasnjen } #endif } void Print_led(signed int stevilo) { short vodil_0; BYTE cifra[2]; BYTE i,ost,cifer_tmp; signed int stev_malo; signed int tmp; vodil_0 = 1; cifer_tmp = 2; if (stevilo>99 || stevilo<-9) { Led_desetice= Ascii_v_7seg('E'); Led_enice= Ascii_v_7seg('r'); return; } if (stevilo < 0) { stevilo = 0-stevilo; Led_desetice= Ascii_v_7seg('-'); Led_enice= Ascii_v_7seg(stevilo+'0'); } else { #if 0 stev_malo=stevilo/10; #else //krajse za 34 bajtov stev_malo=0; tmp = stevilo; while (tmp>=10) { tmp -= 10; stev_malo++; } #endif if (stev_malo == 0) Led_desetice= Ascii_v_7seg(' '); else Led_desetice= Ascii_v_7seg(stev_malo+'0'); #if 0 Led_enice= Ascii_v_7seg(stevilo-stev_malo*10+'0'); #else //novo krajçe za 48 bajtov tmp = stev_malo<<2; tmp += stev_malo; //mnozeno z 5 tmp <<=1; //mnozeno z 2 (5*2=10) Led_enice= Ascii_v_7seg(stevilo-tmp+'0'); #endif } } /*****************/ /* S C A N K E Y */ /*****************/ #define MAX_MED_NASTAVLJANJEM 40 /*desetink sekunde*/ #define PREHOD_V_ROCNO 40 /*desetink sekunde*/ #define _PLUS_ 28 #define _MINUS_ 8 //#define _ESC_ 27 BYTE Scankey(void) { BYTE tmp = 0; #if 1 if (!Ti_sp_gor && Ti_sp_dol) tmp =_PLUS_; else if (Ti_sp_gor && !Ti_sp_dol) tmp =_MINUS_; if (tmp) Timer_tipka_spuscena = MAX_MED_NASTAVLJANJEM; else Timer_tipka_pritisnjena = PREHOD_V_ROCNO; return(tmp); // if (!Ti_sp_gor && !Ti_sp_dol) return(_ESC_); #endif } BYTE Newkey(void) { static BYTE old_scan; BYTE new_scan; new_scan = Scankey(); if (old_scan == new_scan) new_scan=0; else old_scan = new_scan; return(new_scan); } void Print_led_temp(void) { if (Sonda_prisotna) Print_led((signed int)(temperatura>>1)); else { Led_desetice=Ascii_v_7seg('E'); Led_enice=Ascii_v_7seg('0'); } } #inline void Run(void) { BYTE korak0,korak1,korak2,korak3; signed long temp_stara; signed int temp_zelena,temp_zelena_stara,temp_epsilon,temp_gradient; signed long zasuk_ventila; BOOLEAN pogon_ventil; unsigned int cas_rotacije; //unsigned int interval_reg; #define interval_reg 5 //min BYTE tmp; korak0 = 1; //korak0 = merejenje temperature korak1 = 0; //korak1 = nadzor temperature -çtartajo jih koraki0 korak2 = 1; //korak2 = nadzor Ÿasa odpiranja ventila korak3 = 1; //korak3 = nastavljanje §elene vrednosti // interval_reg = 5; //5min temp_zelena = read_eeprom(TEMP_ZELENA); // temp_zelena_stara=temp_zelena; while (1) { Inicializacija_periferije(); //za vsak primer Ÿe bi se kaj pokvarilo restart_wdt(); //----- zaŸetek korakov0 #if 1 if (korak0 == 1) { Start_meritve_ds1820(); stot_sek0 = 250; plpl_korak0: ++korak0; continue; } if (korak0 == 2) { if (Konec_meritve_ds1820()) { stot_sek0 = 250; goto plpl_korak0; } } if (korak0 == 3) { if (Beri_temp_ds1820()) { temperatura = temp_ds1820; // Ÿe je uspeçno prebral Sonda_prisotna=1; if (korak1==0) korak1++; //çele ko prviŸ uspeçno prebereç temp.idi v reg. stot_sek0 = 250; korak0 = 1; } if (!stot_sek0) { //Ÿe v 2.5s ni naslednjega koraka0 javi da ni sonde Sonda_prisotna=0; // while(1); //Ÿaka na wdt_reset // Error(3); } } #endif //----- zaŸetek korakov1 if (!Flag_rocno) { //ko je roŸno zaprto ali odprto do konca regulator ne sme delovati #define PD_REG #ifdef PD_REG if (korak1 == 1) { temp_stara=temperatura; minX=interval_reg; plpl_korak1: ++korak1; continue; } if (korak1 == 2) { temp_epsilon=(signed int)(temperatura-((signed long)temp_zelena<<1)); temp_gradient=(signed int)(temperatura-temp_stara); // if ((!minX || abs(temp_gradient)>6 ) && !pogon_ventil) { /*|| abs(temp_zelena-temp_zelena_stara)>3*/ if ((!minX ) && !pogon_ventil) { /*|| abs(temp_zelena-temp_zelena_stara)>3*/ /*Ÿe je poteklo 10 min ,ali se je temp. sprmenila za veŸ kot 3 stopinje in je ventil zaznal prejçnji ukaz*/ zasuk_ventila =((signed long)temp_epsilon+(signed long)temp_gradient<<1)<<1; //pozitivno çtevilo pomeni zapiraj toplo vodo // zasuk_ventila =(temp_epsilon+temp_gradient<<1); //pozitivno çtevilo pomeni zapiraj toplo vodo /*npr. temperatura je previsoka in naraçŸa -ODPIRAJ MRZLO VODO 0.5st.=1sek.*/ pogon_ventil = 1; //spro§i sukanje ventila temp_stara=temperatura; minX=interval_reg; //iz tega koraka ne gre dalje ampak samo to ponavlja } } #endif //----- konec korakov1 //----- zaŸetek korakov2 #if 1 if (korak2 == 1) { if (pogon_ventil) { plpl_korak2: ++korak2; continue; } } if (korak2 == 2) { output_low(RELE_ZAPIRAJ); output_low(RELE_ODPIRAJ); if (zasuk_ventila > 0) { //pozitivno çtevilo pomeni zapiraj toplo vodo output_high(RELE_ZAPIRAJ); desY= zasuk_ventila; //potrebno je dati eno veŸ kot hoŸeç } else { // (zasuk_ventila < 0) output_high(RELE_ODPIRAJ); desY= -zasuk_ventila; //potrebno je dati eno veŸ kot hoŸeç } // desY= abs(zasuk_ventila)+1; //potrebno je dati eno veŸ kot hoŸeç pogon_ventil = 0; //javi da je sprejel dogodek pogon ventil goto plpl_korak2; } if (korak2 == 3) { if (desY == 0) { output_low(RELE_ODPIRAJ); output_low(RELE_ZAPIRAJ); korak2 = 1; } } #endif //----- konec korakov2 } //KONEC if (!Flag_rocno) { //ko je roŸno zaprto ali odprto do konca regulator ne sme delovati#if 1 //----- zaŸetek korakov3 if (korak3 == 1) { Print_led_temp(); if (Newkey()) { //GOR ali DOL plpl_korak3: ++korak3; continue; } } #define TEMP_MAX 99 #define TEMP_MIN -9 if (korak3 == 2) { if (bit_test(Stevec_desetink,1)) Print_led(temp_zelena); else Led_desetice=Led_enice=Ascii_v_7seg(' '); tmp = Newkey(); if (tmp == _PLUS_) { if (temp_zelena TEMP_MIN) temp_zelena--; vpisi_v_ee: write_eeprom(TEMP_ZELENA,temp_zelena); } if (Timer_tipka_pritisnjena == 0) { //tipka je §e dolgo pritisnjena tmp = Scankey(); //nese v korak3 Stevec_desetink=0; goto plpl_korak3; } if (Timer_tipka_spuscena == 0) { minX = 0; // po popravljanju §elene vrednosti aktiviraj ragulator korak3 = 1; } } if (korak3 == 3) { Flag_rocno = 1; if (!bit_test(Stevec_desetink,5)) { Led_desetice= Ascii_v_7seg('='); output_low(RELE_ZAPIRAJ); output_low(RELE_ODPIRAJ); if (tmp==_PLUS_) { output_high(RELE_ODPIRAJ); Led_enice= Ascii_v_7seg('*'); //mali o zgoraj } if (tmp==_MINUS_) { output_high(RELE_ZAPIRAJ); Led_enice= Ascii_v_7seg('_'); //mali o spodaj } } else Print_led_temp(); if (Newkey() || !tmp) { //!tmp za primer Ÿe bi scankey iz korajkov 2 prinesel 0 output_low(RELE_ODPIRAJ); output_low(RELE_ZAPIRAJ); Flag_rocno = 0; korak3 = 1; } } //----- konec korakov3 #endif } // konec zanke while 1 } //konec funkcije RUN void main() { signed int i; PORTA=0; PORTB=0; #ifdef _TRIS_C //C port je uporabljen PORTC=0; #endif while (1) { //***** Inicializacijski blok ki se izvede ob startu in po koncu Vnos ali Run Inicializacija_periferije(); //da se odprejo izhodni tris ponovi: #if 0 for (i=9;i<=11;++i) { Print_led(i); restart_wdt(); #define T 500 delay_ms(T); output_low(RELE_ZAPIRAJ); output_high(RELE_ODPIRAJ); restart_wdt(); #define T 500 delay_ms(T); output_low(RELE_ODPIRAJ); output_high(RELE_ZAPIRAJ); } #endif Run(); } // konec while 1 } // konec main /*************************************/ /* P R E K I N I T E V _ T I M E R 0 */ /*************************************/ unsigned int interrupt_counter; #if KVARC != 4 //idi v IRQ samo vsakiŸ ŸetrtiŸ da dobiç 4Mhz BYTE deli_irq; //globalna spremenljivka #endif #ifdef IRQ_POENOSTAVLJEN BYTE W_TEMP,STATUS_TEMP,C_TEMP; //globalna spremenljivka #ifdef TISK_ZUMER BYTE Led_tmp; //globalna spremenljivka #endif //#define V_IRQ_SE_UPORABLJA_CASE_IN_POLJA #ifdef V_IRQ_SE_UPORABLJA_CASE_IN_POLJA BYTE FSR_TEMP; //globalna spremenljivka #endif #int_global #else #INT_RTCC #endif //IRQ_POENOSTAVLJEN void Prekinitev_timer0(void) { #if KVARC != 4 //idi v IRQ samo vsakiŸ ŸetrtiŸ da dobiç 4Mhz if (!(deli_irq--)) { //zaklepaj je tik pred RETFIE deli_irq = KVARC/4-1; #endif // KVARC == 4 vsakih 1us*256 = 256us se izvaja rutina #ifdef IRQ_POENOSTAVLJEN //-------------------------------------- #asm MOVWF W_TEMP SWAPF STATUS,W MOVWF STATUS_TEMP MOVF 0x0C,W //spremenljivka za argumente funkcij MOVWF C_TEMP #ifdef V_IRQ_SE_UPORABLJA_CASE_IN_POLJA MOVF FSR,W MOVWF FSR_TEMP #endif BCF RP0 // Preklopi na osnovno banko #endasm //-------------------------------------- #endif //IRQ_POENOSTAVLJEN #ifdef DELAY_IRQJEV cakaj_irq = 0; //oznaŸi da je irq izveden, za Delay_irqjev #endif if (interrupt_counter==1) {// vsakih 10ms //PREBERI TIPKE output_low(LED_DISPL_DESETICE); output_low(LED_DISPL_ENICE); TRISB = TRIS_ZA_TIPKE; delay_us(100); CARRY = GOR_INPUT; // shift_left(&Ti_sp_gor,1,GOR_INPUT); #asm RLF Ti_sp_gor,F #endasm CARRY = DOL_INPUT; // shift_left(&Ti_sp_dol,1,DOL_INPUT); #asm RLF Ti_sp_dol,F #endasm TRISB = _TRIS_B; //PRI¦GI NOVI DISPLEY Led_enice_na_vrsti = !Led_enice_na_vrsti; if(Led_enice_na_vrsti) { // output_low(LED_DISPL_DESETICE); #ifdef TISK_ZUMER Led_tmp = Led_enice; #else LED_DISPL_PORT=Led_enice; #endif output_high(LED_DISPL_ENICE); } else { // output_low(LED_DISPL_ENICE); #ifdef TISK_ZUMER Led_tmp = Led_desetice; #else LED_DISPL_PORT=Led_desetice; #endif output_high(LED_DISPL_DESETICE); } #ifdef TISK_ZUMER output_bit(LED_DISPL_A,bit_test(Led_tmp,0)); output_bit(LED_DISPL_B,bit_test(Led_tmp,1)); output_bit(LED_DISPL_C,bit_test(Led_tmp,2)); output_bit(LED_DISPL_D,bit_test(Led_tmp,3)); output_bit(LED_DISPL_E,bit_test(Led_tmp,4)); output_bit(LED_DISPL_F,bit_test(Led_tmp,5)); output_bit(LED_DISPL_G,bit_test(Led_tmp,6)); #endif } //TIMERJI ZA PROCESE if (interrupt_counter==0) {// vsakih 10ms // if(stot_sekLong!=0) // --stot_sekLong; if(++stot_sek>=10) { stot_sek=0; Stevec_desetink++; if(desY!=0) --desY; //za sasuk ventila if(Timer_tipka_spuscena!=0) Timer_tipka_spuscena--;// 0.1 sek if(Timer_tipka_pritisnjena!=0) Timer_tipka_pritisnjena--;// 0.1 sek } if(stot_sek_ds1820!=0) --stot_sek_ds1820; if(stot_sek0 != 0) --stot_sek0; if(stot_sek1!=0) --stot_sek1; #ifdef stot_sek2 if(stot_sek2 != 0) stot_sek2--; #endif if(stot_sekX!=0) --stot_sekX; else { if (sekX != 0) { //nastaviti je potrebno 1 veŸ kot moraç Ÿakati --sekX; stot_sekX=100+1; } else { if (minX != 0) { --minX; sekX=60+1; } } } #ifdef stot_sekY if(stot_sekY!=0) --stot_sekY; else { if (sekY != 0) { //nastaviti je potrebno 1 veŸ kot moraç Ÿakati --sekY; stot_sekY=100+1; } else { if (minY != 0) { --minY; sekY=60+1; } else { if (urY != 0) { --urY; minY=60+1; } } } } #endif #if 0 // ni uporabljeno if(stot_sek4!=0) stot_sek4--; /* zmanjçuje stot_sek */ #endif interrupt_counter=30; // 1/100 sek// KERje vstavljen 3MHz kvarc //za 4MHz interrupt_counter=39; //39*256us je 99.84ms = 1/100 sek } else interrupt_counter--; #ifdef IRQ_POENOSTAVLJEN //-------------------------------------- #asm BCF RTIF // Briçe zahtevo za prekinitev RTCC #ifdef V_IRQ_SE_UPORABLJA_CASE_IN_POLJA MOVF FSR_TEMP,W MOVWF FSR #endif MOVF C_TEMP,W MOVWF 0x0C SWAPF STATUS_TEMP,W // Nalo§i registre glavnega programa MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W //je §e avtomatssko na koncu INT_GLOBAL; RETFIE #endasm //-------------------------------------- #endif //IRQ_POENOSTAVLJEN #if KVARC != 4 //idi v IRQ samo vsakiŸ ŸetrtiŸ da dobiç 4Mhz } #endif }