Вы находитесь на странице: 1из 9

ESCUELA POLITCNICA NACIONAL

FACULTAD DE INGENIERA ELCTRICA Y


ELECTRNICA
LABORATORIO DE SISTEMAS

PREPARATORIO
Prctica N 7

Tema: Barrido de Display.

Fecha de realizacin: 24/06/2016. Fecha de


entrega: 24/06/2016.

Realizado por:
Alumno(s):
Geovanna
Erazo

Semestre: 2016 A.

Prctica N7: Barrido de Display.


Objetivo: Disear un circuito y el software asociado para manejar 4 display de 7 segmentos
usando la tcnica de barrido.
Trabajo Preparatorio:
1) Escribir una subrutina para convertir de binario a BCD. Considerar que el nmero
Mximo a convertir es 9999.
;Rutina de binario a bcd
bin_bcd:
push r16
in r16,sreg
push r16
push r17
push r18
push r19
push r20
push r21
ldi zl,low(valores<<1)
ldi zh,high(valores<<1)
ldi xl,low(segmentos)
ldi xh,high(segmentos)
lds r16,resultado
lds r17,resultado+1
ldi r18,3
valor:
lpm r20,z+
lpm r21,z+
restar:
sub r16,r20
sbc r17,r21
brcs restaurar
inc r19
rjmp restar
restaurar:
st -x,r19
clr r19
add r16,r20
adc r17,r21
dec r18
brne valor
st -x,r16

;r16 LSB
;r17 MSB

pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
out sreg,r16
pop r16
ret
;Fin de la rutina binario a bcd

2) Escribir una subrutina que permita realizar el barrido de 4 displays 7 Segmentos.

;rutina de barrido de displays


barrido:
push r16
in r16,sreg
push r16
push r17
push r18
push r19
push r20
push r21
ldi xl,low(segmentos)
ldi xh,high(segmentos)
ldi r16,4
ldi r17,0b11111110
ldi r18,0b10000000
ldi r19,0b11111111
out porta,r18
out portc,r19
barrido1:
ld r18,x+
out porta,r18
out portc,r17
call retardo
ldi r18,0b10000000
ldi r19,0b11111111
out porta,r18
out portc,r19
sec
rol r17
dec r16
brne barrido1
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
out sreg,r16

;apagar segmentos
;apagar displays

pop r16
ret
retardo:
ldi r20,0x43
retar0: ldi r21,0xc6
retar1: dec r21
brne retar1
dec r20
brne retar0
nop
ret
;fin de rutina barrido de displays

3) Escribir un programa que permita multiplicar dos nmeros que son


ingresados por medio de interruptores a dos puertos; cada uno de los
nmeros puede variar de 0 a 99. Adicionalmente conectar un interruptor, el
cual si est en 0L, debe mostrar en base 10 en los dos primeros display el
primer nmero a multiplicar, en los dos restantes el otro nmero. Si el
interruptor est en 1L debe mostrar el resultado de la multiplicacin en base 10
ocupando los 4 diplay. Utilizar las subrutinas anteriores.

*
* Created: 18/06/2016 16:23:16
* Author: Geovanna Erazo
*/
.include "m164pdef.inc"
.def tempo=r16
.def aux=r17
.def aux1=r18
.dseg
.org 0x100
numero1:
.byte 1
numero2:
.byte 1
ingresado
resultado: .byte 2
bcd:
.byte 4
BCD
segmentos: .byte 4
segmentos

;reservar 1 byte para almacenar primer nmero ingresado


;reservar 1 byte para almacenar segundo nmero
;reservar 2 bytes para almacenar resultado de la operacin
;reservar 4 bytes para almacenar conversin de binario a
;reservar 4 bytes para almacenar la decodificacin a 7

.cseg
.org 0x00
;Configuracin de puertos
;Puerto A salida a 7 segmentos, el bit MSB como entrada se conecta a interruptor
ldi tempo,0b01111111
out ddra,tempo
ldi tempo,0b10000000
out porta,tempo
;Puerto C 4bits LSB salida a transistores para el barrido, los 4 bits MSB como entrada

ldi tempo,0b00001111
out ddrc,tempo
ldi tempo,0b11111111
out portc,tempo
;Puertos B y D como entrada para ingresar los 2 numeros maximo hasta 99
ldi tempo,0b00000000
out ddrb,tempo
out ddrd,tempo
ldi tempo,0b11111111
out portb,tempo
out portd,tempo
;actibacin del pull-up global
;bit PUD en 0L
in tempo,mcucr
andi tempo,0b11101111
out mcucr,tempo
;configuracin del stack point
ldi tempo,high(ramend)
out sph,tempo
ldi tempo,low(ramend)
out spl,tempo
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%
;inicio del programa
;leer el nmero ingresado en el puerto B y D
ingresar_numeros:
in tempo,pinb
in aux,pind
;si se pasa de 99 cargar 99 como mximo
cpi tempo,99
brsh lim1
comparar1:
cpi aux,99
brsh lim2
rjmp seleccion
lim1:
ldi tempo,99
rjmp comparar1
lim2:
ldi aux,99

;leer estado de interruptor


; si est en 1L mostrar producto
; si esta en 0L mostrar factores
seleccion:
sbis pina,7
rjmp mostrar_factores
mostrar_producto:
mul tempo,aux
sts resultado,r0
sts resultado+1,r1
rjmp llamar_rutinas

;Rutina de mostrar multiplicacin


mostrar_factores:
ldi aux1,100
mul aux1,tempo
add aux,r0
clr tempo
adc tempo,r1
sts resultado,aux
sts resultado+1,tempo
llamar_rutinas:
call bin_bcd
call bcd_segmentos
call barrido
rjmp ingresar_numeros
;/////////////////////////////////////////////////
;=================================================
;Rutina de binario a bcd
bin_bcd:
push r16
in r16,sreg
push r16
push r17
push r18
push r19
push r20
push r21
ldi zl,low(valores<<1)
ldi zh,high(valores<<1)
ldi xl,low(segmentos)
ldi xh,high(segmentos)
lds r16,resultado
lds r17,resultado+1
ldi r18,3
valor:

restar:

lpm r20,z+
lpm r21,z+
sub r16,r20
sbc r17,r21
brcs restaurar
inc r19
rjmp restar

restaurar:
st -x,r19
clr r19
add r16,r20
adc r17,r21
dec r18
brne valor
st -x,r16

;r16 LSB
;r17 MSB

pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
out sreg,r16
pop r16
ret
;Fin de la rutina binario a bcd
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
;rutina de bcd a siete segmentos
bcd_segmentos:
push r16
in r16,sreg
push r16
push r17
ldi r17,4
ldi xl,low(bcd)
ldi xh,high(bcd)
ldi yl,low(segmentos)
ldi yh,high(segmentos)
convertir:
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
ld r16,x+
add zl,r16
clr r16
adc zh,r16
lpm r16,z
st y+,r16
dec r17
brne convertir
pop r17
pop r16
out sreg,r16
pop r16
ret
;fin de rutina bcd a siete segmentos
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
;rutina de barrido de displays
barrido:
push r16
in r16,sreg
push r16
push r17
push r18
push r19
push r20
push r21
ldi xl,low(segmentos)
ldi xh,high(segmentos)
ldi r16,4
ldi r17,0b11111110
ldi r18,0b10000000
ldi r19,0b11111111
out porta,r18
out portc,r19
barrido1:
ld r18,x+
out porta,r18
out portc,r17
call retardo
ldi r18,0b10000000
ldi r19,0b11111111
out porta,r18
out portc,r19
sec
rol r17
dec r16
brne barrido1
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
out sreg,r16
pop r16
ret
retardo:
ldi r20,0x43
retar0: ldi r21,0xc6
retar1: dec r21
brne retar1
dec r20
brne retar0
nop
ret
;fin de rutina barrido de displays

;apagar segmentos
;apagar displays

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
valores:

.db 0xe8,0x3,100,0,10,0

tabla: .db 0b10111111, 0b10000110 ; CDIGOS 0 y 1


.db 0b11011011, 0b11001111 ; CDIGOS
.db 0b11100110, 0b11101101 ; CDIGOS
.db 0b11111101, 0b10000111 ; CDIGOS
.db 0b11111111, 0b11101111 ; CDIGOS

2
4
6
8

y
y
y
y

3
5
7
9

4) Armar el hardware necesario para probar el programa del numeral anterior;


considerar los lmites de corriente de los pines del microcontrolador.