Você está na página 1de 7

ESCUELA POLITCNICA NACIONAL

FACULTAD DE INGENIERA ELCTRICA Y ELCTRNICA


LABORATORIO DE SISTEMAS DIGITALES

PREPARATORIO:
SISTEMAS MICROPROCESADOS
Prctica #: 09

Tema: UTILIZACIN DE INTERRUPCIONES, PARQUEADERO

Fecha de Realizacin: 23/05 /2014


da mes ao

Realizado por:

Alumno (s): Alexandra Tituaa Andrade

(Espacio Reservado)
Fecha de entrega: ____ /____ /____
da
mes
ao

Grupo: 6B

Calificacin:

f.___________________
Recibido por
Comentarios:
_______________________________________________________________________
_

CONTROL DE UN PARQUEADERO UTILIZANDO INTERRUPCIONES DEL


MICROCONTROLADOR ATMEL MEGA 164p
.
1. OBJETIVO:
Implementar un circuito que permita contar el nmero de vehculos que ingresan o salen de un
parqueadero.
2. PREPARATORIO
Disear un circuito que permita contar el ingreso y la salida de vehculos de un parqueadero, se
podr seleccionar que el circuito muestre el total de vehculos que han ingresado, el total de
vehculos que han salido y el nmero de vehculos que estn en el parqueadero, para lo cual se
dispondr n de 3 display de 7 segmentos que sern manejados utilizando la tcnica de barrido.
Mediante 2 interruptores (dip switch) se seleccionar la informacin a ser mostrada en los
display.
Para la deteccin del ingreso/salida de vehculos se utilizarn 2 barreras pticas (optoacopladores
interrumpibles) cuyas seales deben ser ingresadas por los pines de interrupcin externa INT0 e
INT1. El circuito dispone adems de ocho interruptores adicionales (dip switch) con los que se
puede ingresar la capacidad total del parqueadero. Tiene dos LED, uno verde que se enciende
cuando hay espacio en el parqueadero (cuando el nmero de vehculos en el interior del
parqueadero es menor que el mximo indicado por los 8 interruptores) y uno rojo que se
enciende para indicar que no hay mas espacios libres. Cuando se enciende el LED rojo se inhibe
la cuenta de vehculos que entran, mientras sigue contando los que salen. Tambin tiene un
pulsante colocado en la interrupcin PCINTx, cuando se pulsa una vez y se suelta se enciende el
LED rojo para indicar que no se va a permitir el ingreso de mas vehculos, tambin inhibe la
cuenta de vehculos que entran, pero sigue contando los que salen. Si se pulsa otra vez y se suelta
debe volver a funcionar normalmente.
Escribir un programa en Assembler de AVR Studio que permita cumplir la tarea solicitada
usando obligatoriamente interrupciones. Sin importar que informacin se muestre en los display,
el circuito nunca debe dejar de totalizar vehculos y de calcular el total que hay en el
parqueadero.
.include"m164pdef.inc"
.def
.def
.def
.def
.def
.def
.def
.def
.def

tempo= R16
cont=R17
aux=r18
stop=R19
up=R1
down=R2
dig0=R20
dig1=R21
dig2=R22

.org 0x0
rjmp inicio
.org 0x2
rjmp conteo_up
.org 0x4
rjmp conteo_down
.org 0x24
rjmp conteo_out
inicio:
ldi tempo,0xf
out ddra,tempo
ldi tempo,0x7f
out ddrc,tempo
clr tempo
out ddrb,tempo
out ddrd,tempo
; pull up
in tempo,mcucr
andi tempo,0b11111011
out mcucr,tempo
ser tempo
out portc,tempo
out portd,tempo
ldi tempo,0xf0
out porta,tempo
ldi tempo,0b1000000
out portc,tempo
; stack

ldi tempo, high(ramend)


out sph,tempo
ldi tempo,low(ramend)
out spl,tempo
; ingeso de datos
datos:
in tempo,pinb
sts 0x60,tempo
sbic portc,7
rjmp salida
rjmp datos
salida:
ldi tempo,0b00001010
out mcucr,tempo
ldi tempo,0b01000000
out mcucsr,tempo
ldi tempo,0b11100000
out gifr,tempo
sei
reinicio:
clr cont

clr stop
lazo:
mov tempo,stop
sbrs tempo,0
rjmp normal
rjmp pasado
normal:
in tempo,gifr
sbrs tempo,7
rjmp pasado
ldi tempo,0b11100000
out gifr,tempo
lds tempo,0x60
cp tempo,cont
brcc pasado
sbi
porta,6
cbi porta,7
rjmp display
pasado:
ldi tempo,0b01100000
out gifr,tempo
cbi porta,6
sbi porta,7
cpi cont,0
brcs reinicio
rjmp display
display:
sbis porta,4
rjmp continue1
sbis porta,5
rjmp continue2
rjmp continue3
continue1:
lds tempo,0x61
rjmp barrido
continue2:
lds tempo,0x62
rjmp barrido
continue3:
mov tempo,cont
rjmp barrido
barrido:
rcall bin_bcd
mov tempo,dig0
rcall bcd_7seg
out portc,tempo
ldi tempo,0b11111110
out porta,tempo
rcall retardo

ser tempo
out porta,tempo
mov tempo,dig1
rcall bcd_7seg
out portc,tempo
ldi tempo,0b11111101
out porta,tempo
rcall retardo
ser tempo
out porta,tempo
mov tempo,dig2
rcall bcd_7seg
out portc,tempo
ldi tempo,0b11111011
out porta,tempo
rcall retardo
ser tempo
out porta,tempo
rjmp lazo
bin_bcd:
ldi dig2,0
lazo_100:
subi tempo,100
brcs decenas
inc dig2
rjmp lazo_100
decenas:
ldi aux,100
add tempo,aux
ldi dig1,0
lazo_10:
subi tempo,10
brcs unidades
inc dig1
rjmp lazo_10
unidades:
ldi aux,10
add tempo,aux
mov dig0,tempo
ret
bcd_7seg:
ldi zl,low(tabla*2)
ldi zh,high(tabla*2)
add zl,tempo
clr tempo
adc zh,tempo
lpm tempo,z
ret
retardo:

lazo_ret:
ldi tempo,255
nop
nop
nop
dec tempo
brne lazo_ret
ret
tabla:

.db
.db
.db
.db
.db

0b00111111,0b00000110
0b01011011,0b01001111
0b01100110,0b01101101
0b01111101,0b00000111
0b01111111,0b01101111

conteo_up:
push tempo
push dig0
push dig1
push dig2
push aux
in tempo,sreg
push tempo
inc cont
inc up
sts 0x61,up
pop tempo
out sreg,tempo
pop aux
pop dig2
pop dig1
pop dig0
pop tempo
reti
conteo_down:
push tempo
push dig0
push dig1
push dig2
push aux
in tempo,sreg
push tempo
dec cont
inc down
sts 0x62,down
pop tempo
out sreg,tempo
pop aux
pop dig2
pop dig1
pop dig0
pop tempo
reti

;0,1
;2,3
;4,5
;6,7
;8,9

conteo_out:
push tempo
push dig0
push dig1
push dig2
push aux
in tempo,sreg
push tempo
inc stop
pop tempo
out sreg,tempo
pop aux
pop dig2
pop dig1
pop dig0
pop tempo
reti

BIBILOGRAFIA:

Apuntes de clase de Ing. Csar Astudillo, 2012.

Você também pode gostar