#if defined(__PCM__)#include <16F690.h>#include <math.h>//#DEVICE (ADC=10)#fuses INTRC,NOWDT,NOPROTECT,NOMCLR#use delay(clock=8000000)#endifvoid main(){ double temps, t_minuts, temporitzacio_max, tempo, preescaler, bits_resol, TMRZ, freq_uc, x, y; int i, i_e, i_f, timerz; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT); // t_minuts = 0,1; freq_uc = 8; //en Mhz segun tengo entendido preescaler = 256; bits_resol = 256; temps = t_minuts * 60 * pow(10, 6); TMRZ = 0; x = 4 * (1/freq_uc); // quise hacerlo de forma general para futuros proyectos, // pero me daba error de que faltaba un identificador, asi que las // siguientes formulas os las encontrareis particionadas temporitzacio_max = x * preescaler * bits_resol; i = temps / temporitzacio_max; i_f = modf(i, &i_e); // separa la parte entera de la fraccionaria del parametro "i" x = (temps - i_e * temps) * freq_uc; // le quito al tiempo total las vueltas que deberá hacer el timer para quedarme con la carga final de TMR0 y = x / (4 * preescaler); TMRZ = y + bits_resol; output_high(PIN_C0); //simplemente me sirve como indicacion para empezar el conteo con un cronometro de reloj de mano delay_ms(1000); output_low(PIN_C0); set_timer0(TMRZ); //inicia el timer en la carga inicial calculada previamente for(i=i_e; i>=0; i--) { timerz = get_timer0(); while(timerz!=255) { timerz = get_timer0(); //comprovación botón emergencia //comprovación temperatura } } output_high(PIN_C0); // indica que ha llegado al final que es cuando paro el cronometro de mano para saber qué tiempo real ha tardado. // El problema es que nunca llega al final.}