Está en la página 1de 4

Ao de la Diversificacin Productiva y del Fortalecimiento de la

Educacin

LABORATORIO N 7

CONTADOR DE EVENTOS EXTERNOS


OBJETIVO:
Aprender el manejo de Arrays (arreglos) aplicado a un contador de eventos externos.
Los arreglos permiten almacenar vectores y matrices.

EJERCICIO:
Realizar un programa para obtener un contador de eventos de 3 dgitos.
Programa:
#include <avr/io.h>
#include <util/delay.h>
int contador=0;
int unidades, decenas,centenas,i;
int pulsador=1;
//Se declara un vector de longitud 10 que contenga los
//valores para formar los digitos, acomodados en orden
//segn su posicin del 0 al 9
int numeros[10]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};
int main(void) //Inicio del programa
{
1313220392
DDRB=0xFF;
DDRD=0x07;
while(1){
//-----------------------------------------------------------------------------if(bit_is_clear(PIND,PD5)&(pulsador==1)) //Verifica si PD5=0, si es
verdad...
{
_delay_ms(40); //Espera a que finalice los rebotes
if(bit_is_clear(PIND,PD5)&(pulsador==1)) //Verifica si PB0=0
y Pulsador=1
{
contador++; //Incrementa el valor de la variable
contador
unidades=contador%10; //Al dividir un valor entre 10
el residuo nos
//da las unidades
decenas=(contador%100)/10; //Se obtiene la decena
dividiendo el numero
//entre 10
centenas=contador/100;

VENTOS EXTERNOS

Laboratorio N7 de Arquitec

if (contador > 999) //Si llega a 99, hace contador igual


a CERO
{contador=0;}
pulsador=0; //Carga un CERO en la variable pulsador
}
}
//-----------------------------------------------------------------------------if(bit_is_set(PIND,PD5)) //Verifica si PD5=1, y si es verdadero...
{
pulsador=1; //Carga un UNO en la variable pulsador
}
//-----------------------------------------------------------------------------//Visualizacion de conteo en Display
//-----------------------------------------------------------------------------PORTD=0x04;
PORTB=numeros[centenas];
_delay_ms(20);
PORTD=0x02; //Se activa el transistor de las unidades
PORTB=numeros[unidades]; //Se asigna al PORTB el dato de la
columna unidades
//del Array nmeros
_delay_ms(20);
PORTD=0x01; //Se activa el transistor de las decenas
PORTB=numeros[decenas]; //Se asigna al PORTB el dato de la
columna decenas
//del Array nmeros
_delay_ms(20);
//-----------------------------------------------------------------------------}//Llave de cierre de While(1)
}//Llave de cierre de de main

Simulacin en ISIS:

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

R1

Q1
BC548

1k

R2

Q2
BC548

1k

R4

Q3
BC548

1k

R3(1)

R3
5k

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1
R3(1)

R3
5k

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

R1
1k

Q1
BC548

R2
1k

Q2
BC548

R4
1k

Q3
BC548

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1
R3(1)

R3
5k

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

R1
1k

Q1
BC548

R2
1k

Q2
BC548

R4
1k

Q3
BC548