Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema: Timers.
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdlib.h>
#include "Timer0.h"
#include "MyDefs.h"
///variables///
unsigned char digito1,digito2,digito3,digito4;
unsigned char m[3], s[3];
volatile char cont_1=0 ,cont_2=0;//contadores
volatile char zeta_1=0,zeta_2 = 0;//avanzar o disminuir los contadores
volatile int i = 0;
ISR(INT6_vect){
if(TestBit(PINE,6)==0){ //si está apretado el pulsador 6
zeta_1 = 1; //empieza a avanzar segundo
}else{ zeta_1=0;//no avanza cont
}}
ISR(INT5_vect){
if(TestBit(PINE,5)==0){//si está apretado el pulsador 5
zeta_2 = 1;//empieza a avanzar minutos
}else{ zeta_2 = 0;//no avanza
}}
ISR(INT7_vect){
if(TestBit(PINE,7)==0){//si está apretado el pulsador7
zeta_1 = -1; //empieza a disminuir
LED4_ON; //al empezar enciende el led 4
}else{
LED7_OFF;
zeta_1=0; //ambos se detienen tanto el cont de seg y min
zeta_2 = 0; } }
int main(void){
DDRA=0xFF;
DDRE=0;
DDRD|=(1<<7)|(1<<4);
PORTD|=(1<<7)|(1<<4);
Timer0_init(CTC,Timer0_Prescaler_32,Toggle_On_Comp_Match);
OCR0=250;
TIMER0_COMP_Interrupt_ON;
//habilitó la interrupciones
EICRB|=(1<<ISC50)|(1<<ISC60)|(1<<ISC70);
EIMSK|=(1<<INT5)|(1<<INT6)|(1<<INT7);
sei(); //habilitación global
while(1){
if (cont_1<60){//segundo
snprintf(s, sizeof(s), "%2d", cont_1);
digito3 = s[0];
digito4 = s[1]; //dígito va contener las cifras de cont_1
cont_1 = cont_1 + zeta_1;
_delay_ms(5); }else{
cont_1 = 0; }
if(cont_2<60){//minutos
snprintf(m,sizeof(m),"%2d",cont_2);
digito1 = m[0]; //cada m contiene las cifras de cont_2
digito2 = m[1];
_delay_ms(5);
cont_2 = cont_2 + zeta_2;}
if(cont_1 == 00 && TestBit(PINE,7)==0 && cont_2!=00){
//cada vez que segundos llegue a cero,cont_1 va a iniciar a nuevamente 59
snprintf(s, sizeof(s), "%2d", cont_1);
digito3 = s[0];//s contiene la cifras de cont_1
digito4 = s[1];
_delay_ms(5);
cont_1 = 59;
cont_2--;//disminuyo minutos
zeta_2 = 0; }
if(TestBit(PINE,5)==0 && TestBit(PINE,6)==0){
//si ambos pulsadores están apretados entonces se reinicia el contador
cont_1=0;
cont_2 =0; }