Sunteți pe pagina 1din 8

Ejemplo 1. Timer 1 modo temporizador. Se incrementa la cuenta en el display aproximadamente cada segundo.

#include<pic.h> #include<htc.h> __CONFIG(0x3f31); void main(){ const int numeros[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98}; int i,c; c=0; T1CKPS1=0; T1CKPS0=0; TMR1CS=0; TMR1L=0; TMR1H=0; TMR1ON=1; TRISD=0; while (1==1) { c=0; while(c<=9){ PORTD=numeros[c]; // se muestra un dgito en el display i=1; while(i<=15){ while (TMR1IF==0){;} TMR1IF = 0; i++;} c=c+1; } } } // prescaler de 0 // modo temporizador // valor inicial 0 del timer 1 // timer 1 encendido // puerto D como salida

// i es el numero de desbordamientos // el programa se pausa por aproximadamente 1 seg

// se incrementa la cuenta

Prof. Daniel Martnez

Pgina 1

Ejemplo 2. Pausa del programa mediante el timer 1 y una funcin. #include<pic.h> #include<htc.h> __CONFIG(0x3f31);

void retardo(){ int i; i=1; while(i<=15){ while (TMR1IF==0){;} TMR1IF = 0; i++;} }

// funcion que realiza una pausa de aprox. 1 seg

void main(){ const int numeros[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98}; int i,c; c=0; T1CKPS1=0; T1CKPS0=0; TMR1CS=0; TMR1L=0; TMR1H=0; TRISD=0; TMR1ON=1; while (1==1) { c=0; while(c<=9){ PORTD=numeros[c]; retardo(); c=c+1; } } }

// timer 1 en modo temporizador

Prof. Daniel Martnez

Pgina 2

Ejemplo 3. Pausa del programa mediante el timer 1 y una funcin. #include<pic.h> #include<htc.h> __CONFIG(0x3f31);

void retardo(int seg){ int i,c; c=1; while(c<=seg){ i=1; while(i<=15){ while (TMR1IF==0){;} TMR1IF = 0; i++;} c=c+1;} }

// funcion que pausa el programa una cantidad de segundos

void main(){ const int numeros[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98}; int i,c,tiempo; c=0; tiempo=2; T1CKPS1=0; T1CKPS0=0; TMR1CS=0; TMR1L=0; TMR1H=0; TRISD=0; TMR1ON=1; while (1==1) { c=0; while(c<=9){ PORTD=numeros[c]; // se muestran los dgitos en el display retardo(tiempo); c=c+1; } } } // prescaler de 1 // modo temporizador // valor inicial 0 del timer 1

// timer 1 encendido

Prof. Daniel Martnez

Pgina 3

Ejemplo 4. Timer 1 en modo temporizador usando la interrupcin por desbordamiento. Timer 0 en modo temporizador. Aproximadamente cada segundo se incrementa la cuenta en el display, usando la interrupcin del timer 1. Al pulsar el botn conectado a RC1 se reinicia la cuenta. #include<pic.h> #include<htc.h> __CONFIG(0x3f31); int k=0,c=0; void retardo(int milisegundos){ int i,j; j=1; while(j<=milisegundos){ i=1; while(i<=2){ TMR0=6; while(TMR0IF==0){;} TMR0IF=0; i=i+1;} j=j+1;} return;} void interrupt servicio_interrupciones(void){ GIE=0; // se deshabilitan todas las interrupciones para que no ocurra otra interrupcin //mientras se encuentra el programa en esta rutina if(TMR1IF==1){ // se verifica la fuente de interrupcin, la condicin se cumple // si se produjo una interrupcin por desbordamiento del timer 1 // k cuenta el numero de desbordamientos del timer 1 // cuando son 15 ha transcurrido aproximadamente 1 seg // incrementa el ndice del arreglo para mostrar otro nmero en el display // funcin retardo que tiene como argumento una cantidad de // milisegundos

k=k+1; if(k==15){ c=c+1; if(c==10){c=0;} k=0; } TMR1IF=0; GIE=1; } return; }

// se limpia la bandera de interrupcin para poder detectar otra interrupcin // durante la ejecucin del programa // habilita todas las interrupciones para poder detectar otra interrupcin // fin de la funcin interrupt

void main(){ const int numeros[]={0b11000000}; // arreglo de los nmeros del display, se debe completar c=0; T0CS=0; // Seleccin de los pulsos provenientes del cristal de cuarzo Foscilador/4 PSA=0; // Timer0 con prescaler PS0=0; // PS1=0; //de 2

Prof. Daniel Martnez

Pgina 4

PS2=0; GIE=1; PEIE=1; TMR1IF=0; TMR1IE=1; T1CKPS1=0; T1CKPS0=0; TMR1CS=0; TMR1L=0; TMR1H=0; TRISD=0; TMR1ON=1; TRISC1=1; while (1==1) { // al presionar el pulsador // tiempo a esperar para que desaparezcan los rebotes del pulsador y vuelva a la //posicin original c=0;} // se inicializa la cuenta en el display PORTD=numeros[c]; // Se muestra el numero en el display } } if(RC1==0){ retardo(200); // se habilitan todas las interrupciones // se habilitan las interrupciones de los perifricos timer1, timer2, etc. // bit de indicacin de desbordamiento en 0 // se habilita la interrupcin del timer 1 // prescaler de 1 para el timer 1 // modo temporizador del timer 1 // el valor inicial del timer 1 es 0 // Puerto D como salida // timer 1 encendido // pin RC1 como entrada (pulsador)

Prof. Daniel Martnez

Pgina 5

Ejemplo 5. Timer 1 modo contador. Cada 10 pulsos se incrementa en 1 la cuenta en el display, mediante un pulsador en se reinicia la cuenta. Timer 0 en modo temporizador.
#include<pic.h> #include<htc.h> __CONFIG(0x3f31); int c=0; void retardo(int milisegundos){ int i,j; j=1; while(j<=milisegundos){ i=1; while(i<=2){ TMR0=6; while(TMR0IF==0){;} TMR0IF=0; i=i+1;} j=j+1;} return;} // funcin retardo

void interrupt servicio_interrupciones(void){ GIE=0; // se deshabilitan todas las interrupciones if(TMR1IF==1){ c=c+1; if(c==10){c=0;} // se verifica la fuente de interrupcin, la condicin se cumple // si se produjo una interrupcin por desbordamiento del timer 1 // accin a realizar por la interrupcin

TMR1IF=0;

// se limpia la bandera de interrupcin para poder detectar otra interrupcin //durante la ejecucin del programa

TMR1L=0b11110110; TMR1H=0b11111111; GIE=1; // habilita todas las interrupciones para detectar otra interrupcin } return; }

// fin de la funcin interrupt

void main(){ const int numeros[]={0b11000000}; c=0; T0CS=0; PSA=0; PS0=0; PS1=0; PS2=0;

// arreglo para mostrar digitos en el display, se debe completar

// Seleccin de los pulsos provenientes del cristal de cuarzo para el timer0. Foscilador/4 // Timer0 con prescaler // // Seleccin del prescaler de 2.

Prof. Daniel Martnez

Pgina 6

GIE=1; // se habilitan todas las interrupciones PEIE=1; // se habilitan las interrupciones de los perifricos TMR1IE=1; // se habilita la interrupcin del timer 1 TMR1IF=0; // bit de indicacin de interrupcin por desbordamiento en 0 T1CKPS1=0; // prescaler de 0 para el timer 1 T1CKPS0=0; T1OSCEN=0; // no hay oscilador entre los pines 15 y 16 TMR1CS=1; // modo contador, los pulsos entran por el pin RC0/T1CKI TMR1L=0b11110110; // valor inicial del timer 1, en decimal es 65526 TMR1H=0b11111111; TMR1ON=1; // timer 1 encendido TRISC1=1; // pin RC1 como entrada, pulsador TRISC0=1; // pin RC0 como entrada, pulsador TRISD=0; // puerto D como salida while (1==1) { if(RC1==0){ retardo(200); c=0;} PORTD=numeros[c]; } } // al presionar el pulsador en RC1 se reinicia la cuenta // pausa para esperar a que desaparezcan los rebotes del pulsador y a que // regrese a su posicin original // se muestra un numero en el display

Prof. Daniel Martnez

Pgina 7

Prctica 7. Realice un programa que por cada 12 pulsos en el pin RC0/T1CKI, se incremente en 1 la cuenta en los display, utilice un prescaler de 4 para el timer 1 en modo contador. Al presionar un pulsador en el pin RC1 se debe reiniciar la cuenta, utilice la funcin realizada en la prctica 6 para mostrar la cuenta en los display.

Prctica 8. Configure el timer 1 en modo temporizador y el timer 0 en modo contador (el timer 0 se incrementa mediante pulsos aplicados al pin RA4/T0CKI, pin 6 del PIC, conecte un pulsador en este pin). Con la interrupcin del timer 1 habilitada, el programa principal se debe interrumpir cada 10 segundos, para mostrar en los display el nmero de pulsos que se aplicaron al pin RA4/T0CKI, este numero de pulsos est almacenado en TMR0. Para mostrar el nmero de pulsos cada 10 segundos utilice la funcin que realiz en la prctica 6, colquela en la funcin principal.

Prof. Daniel Martnez

Pgina 8

S-ar putea să vă placă și