Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <16F876.h>
- #use delay(clock=1000000) //reloj de 4MHz
- int16 tiempo;
- int16 count; //count es ahora la FRECUENCIA de pulsos a visualizar
- int display; //indica el dígito a visualizar
- const int tabla[10]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
- const int16 factor[4]={1000,100,10,1};
- #int_EXT
- void llega_pulso(void) {
- tiempo=get_timer1();
- set_timer1(0); //reinicia para nuevo pulso
- }
- #INT_TIMER0
- void refresco_display(void){
- output_A(0); //apaga todos los dígitos
- output_c(~tabla[count/factor[display]%10]); //pone los segmentos
- switch(display) { /////recorre los cuatro dígitos
- case 0: output_high(PIN_A0); //enciende decenas
- break;
- case 1: {output_high(PIN_A1); //enciende unidades y punto decimal
- output_low(PIN_C7);
- } //fin de case 1
- break;
- case 2: output_high(PIN_A2);
- break;
- case 3: output_high(PIN_A3);
- break;
- } //////fin del switch
- if(++display==4) display=0;
- delay_ms(5); /////tiempo que se mantiene encendido cada dígito
- output_high(PIN_C7); ////apaga el punto decimal
- }
- void main() {
- //Configuramos temporizadores e interrupciones:
- setup_timer_0(T0_INTERNAL | T0_DIV_8);//va a cambiar de dígito cada 8,2 ms aprox.
- setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); //prescaler máximo para llegar a
- //medir frecuencias bajas
- enable_interrupts(INT_TIMER0);
- ext_int_edge(L_TO_H);//por defecto ya es así
- enable_interrupts(INT_EXT);
- enable_interrupts(GLOBAL);
- while (TRUE) {
- delay_ms(10); //actualizamos la medida cada 200ms
- count=100000000/((int32)tiempo * 32); //frecuencia en Hz*100
- } //fin del while
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement