You are on page 1of 3

PRCTICA 2. Manejo de interrupciones externas INT0 e INT1.

OBJETIVO:AprenderautilizarlasinterrupcionesexternasINT0eINT1enelmicrocontrolador,yutilizarlasen
tareasrelacionadasconaplicacionesdecontrol.
DESARROLLO:
1. Implementeelsiguientecircuito,elcualrepresentaelfuncionamientodeunsemforo.

Programealmicrocontroladorconelsiguientecdigo.

#define F_CPU 14745600


#include <avr/io.h>
#include <util/delay.h>
void ports_setup();
void ports_setup()
{
DDRC = 0xFF;
PORTC = 0x00;
}
int main(void)
{
ports_setup();
while(1)
{
PORTC = 0x21;
_delay_ms(8000);
PORTC = 0x22;
_delay_ms(2000);
PORTC = 0xC;

Prctica14
_delay
y_ms(8000)
);
PORTC = 0x14;
_delay
y_ms(2000)
);
}
}

2. Impleementeelsigguientecircuitto,paraelmaanejodelasin
nterrupcionesINT0eINT1
1.

Progrramealmicro
ocontroladorconelsiguientecdigo.

//Este cd
/
digo consis
ste en inc
crementar el
e puerto C al activ
varse la interrupci
i
n 0 y
/
//decremen
ntar el pue
erto C al activarse la interr
rupcin 1
#include <avr/io.h>
#
<
#
#include
<
<avr/interr
rupt.h>

/
//Libreria
a para el manejo
m
de Interrupci
iones

void Ports
v
s_Setup(); //Protot
tipo de la funcin p
para configurar puer
rtos
v
void
Exter
rnal_Interr
rupts_Setu
up(); //P
Prototipo para
p
configurar las interrupciones
void Ports
v
s_Setup()
{
DDRD = 0x00; //
/Se configura el pue
erto D como entrada
DDRC = 0xFF; //
/Se configura el pue
erto C como salida
PORTC = 0x00; //
/Limpiamos el puerto
o C
}
void Exter
v
rnal_Interr
rupts_Setu
up()
{
EICRA = (1<<ISC1
//La int
11)|(0<<ISC
C10)|(1<<I
ISC01)|(0<<
<ISC00);
terrupcin 0 es
//config
gurada para sensar flancos
f
de bajada, la
l interrup
pcin
//1 se configura
c
para sensa
ar flancos de bajada
a
EIMSK = (1<<INT1
1)|(1<<INT0
0);
//L
Las interru
upciones 0 y 1 son habilitada
h
s
EIFR = (0<<INTF1
1)|(0<<INTF
F0);
//L
Las bandera
as de inte
errupciones
s son borradas
PCICR = (0<<PCIE
E2)|(0<<PCI
IE1)|(0<<P
PCIE0);
/
//Son
desha
abilitadas
s las
//interr
rupciones externas tipo
t
"Pin-Change"

Prctica14
PCIFR = (0<<PCIF2)|(0<<PCIF1)|(0<<PCIF0);
//Son borradas las
//interrupciones tipo "Pin-Change"
PCMSK2 = 0x00; //Se deshabilitan las interrupciones Pin-Change
PCMSK1 = 0x00; //Se deshabilitan las interrupciones Pin-Change
PCMSK0 = 0x00; //Se deshabilitan las interrupciones Pin-Change

banderas de las
para PCINT[23:16]
para PCINT[14:8]
para PCINT[7:0]

}
ISR(INT0_vect,ISR_NAKED)
{
PORTC++;
//Se muestra el valor del puerto C y despus se incrementa su valor
reti();
//Regreso de la interrupcion
}
ISR(INT1_vect,ISR_NAKED)
{
PORTC--;
//Se muestra el valor del Puerto C y despus decrementa su valor
reti();
//Regreso de la interrupcion
}
int main(void)
{
Ports_Setup();
External_Interrupts_Setup();
sei();
while(1)
{
}
}

3. Modifiqueelcdigoparaeliminarlosrebotesenelfuncionamientodelcircuito.
4. Modifiqueelcdigoparaqueelfuncionamientoseaelsiguiente:
a. Inicieelconteoen0.
b. AlactivarlainterrupcinINT0,elcontadorcomienzaacontarautomticamenteenforma
ascendente,cada250ms.
c. AlactivarlainterrupcinINT1,elcontadorcambiadedireccindeconteo,esdecir,
descendente,conelmismointervalodetiempo.CadaqueseactiveINT1,seinvierteelsentido
deconteo.
d. AlactivarnuevamentelainterrupcinINT0,sedetieneelconteo,sinperderlacuentaniel
sentidodecuenta.Paracontinuarelconteo,sedebevolveraactivarINT0.
5. InvestigueyreportelosregistrosqueestnrelacionadosconlasinterrupcionesINT0eINT1,ydescriba
lafuncionalidaddecadaunodeellos,ascomodelosbitinvolucradosenlosregistros.

You might also like