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

Título de la práctica: Barrido de display

Objetivos de la práctica:

1.- Diseñar un circuito y el software asociado para manejar 4 display de 7 segmentos


usando la técnica de barrido.

Trabajo preparatorio:

1.- Escribir una subrutina para convertir de binario a BCD para 4 dígitos. Considerar
que el número máximo a convertir es 9999.

bin_bcd:
; es necesario tener el valor a transformar
push r16 ; la información es almacenada en la memoria ram
in r16,sreg ; se conserva el status register
push r16
push r17
push r22
push r23
push r24
push r25
; es necesario tener tablas con los valores adecuados para la
transformacion
ldi zl,low(tablav<<1)
ldi zh,high(tablav<<1) ;mediante punteros se puede manipular los datos de
las tablas
ldi yl,low(cambiobcd)
ldi yh,high(cambiobcd) ; es necesario trabajar con espacios de memoria
para almacenar informacion que se requiere después
lds r23,operacion
lds r24,operacion+1
ldi r22,3
nuevo:
clr r25
lpm r16,z+
lpm r17,z+
restar:
sub r23,r16
sbc r24,r17
brcs restaurar
inc r25
rjmp restar
restaurar:; es necesario recomponer
add r23,r16
adc r24,r17
st y+,r25
dec r22
brne nuevo
st y,r23
; los datos regresan de la memoria ram para dar paso a nuevos números o
repetir la acción con los mismos
pop r25
pop r24
pop r23
pop r22
pop r17
pop r16
out sreg,r16
pop r16
ret ;finaliza la subrutina
tablav: .db 0xe8,0x3,100,0,10,0
2.- Escribir una subrutina que permita realizar el barrido de 4 displays 7 Segmentos.

barrido:
; el barrido funciona de tal manera que la vista es engañada, la velocidad
a la que se activan los displays garantizan lecturas optimas los datos ya
transformados previamente son descompuestos y guardados en la memoria ram
push r16
in r16,sreg
push r16
push r17
push r22
push r23
push r24
push r25
;es importante manejar la información en espacios de memoria definidos
ldi xl,low(seg)
ldi xh,high(seg)
;al implementar el circuito con 4 display es importante hacer el barrido
con cuatro combinaciones
ldi r23,4
; mientras 1 se activa el resto no
ldi r22,0b11110111
;los números están cincronizdos para mostrar el numero correspondiente en
cada display
ldi r16,0b10000000
ldi r17,0b11111111
out porta,r16
out portc,r17
barrido1:
ld r17,x+
out porta,r17
out portc,r22
call retardo
ldi r16,0b10000000
ldi r17,0b11111111
out porta,r16
out portc,r17
sec
ror r22
dec r23
ser r17
out portc,r17
brne barrido1
;regresan los números para dar paso a un nuevos ciclo
;sea que el numero haya cambiado o se mantengan los mismos
pop r25
pop r24
pop r23
pop r22
pop r17
pop r16
out sreg,r16
pop r16
ret ;finaliza la subrutina

3.- Escribir un programa que permita ingresar dos números de 8 bits cada uno en
binario, por dos puertos del microcontrolador. El programa realizará la multiplicación
de los dos números y el resultado debe mostrarlo en base 10 en 4 displays de 7
segmentos en el circuito de barrido construido. El programa detectará si el resultado
es demasiado grande para mostrarla en 4 display, en cuyo caso mostrará el patrón
“gran”( el máximo a mostar es 9999). Utilizar las subrutinas de los numerales 4.1 y 4.2

.include "m164pdef.inc"
.def aux1=r16
.def dig1=r17
.def dig2=r18
.dseg
; aparto bits en la memoria (diferentes propósitos)
operacion: .byte 2 ;almacenar resultado de la operación
cambiobcd: .byte 4 ;almacenar conversión de binario a BCD
seg: .byte 4 ;almacenar la decodificación a 7 segmentos para los 4
displays

.cseg
.org 0x00
;puertos salida
ldi aux1, 0b00001111
out ddrc,aux1
ser aux1
out portc,aux1
ser aux1
out ddra,aux1
clr aux1
out porta,aux1
;puertos de entrada
clr aux1
out ddrb,aux1
out ddrd,aux1
ser aux1
out portb,aux1
out portd,aux1
;pull up global
in aux1,mcucr
andi aux1,0b11101111
out mcucr,aux1
;stack point
ldi aux1,high(ramend)
out sph,aux1
ldi aux1,low(ramend)
out spl,aux1

inicio:
;ingreso de numeros
in dig1,pinb
in dig2,pind

multiplicacion:
mul dig1,dig2 ; multiplica y guarda en r0 y r1

;seleccion mayores de 9999


ldi dig1,low(10000)
ldi dig2,high(10000)
mov r2,r0
mov r3,r1
sub r2,dig1
sbc r3,dig2
brcc error

sts operacion,r0
sts operacion+1,r1
call bin_bcd
call bcd_segmentos
call barrido
rjmp inicio
; conformacion del mensaje "gran"
error:
ldi aux1,0b00000010 ;mostrar G
sts seg,aux1
ldi aux1,0b00101111 ;mostrar r
sts seg+1,aux1
ldi aux1,0b00001000 ;mostrar a
sts seg+2,aux1
ldi aux1,0b01001000 ;solo se disponen 3 letras en este punto el display no
se activa
sts seg+3,aux1
call barrido
rjmp inicio

;Rutina de binario a bcd


bin_bcd:
push r16
in r16,sreg
push r16
push r17
push r22
push r23
push r24
push r25

ldi zl,low(tablav<<1)
ldi zh,high(tablav<<1)

ldi yl,low(cambiobcd)
ldi yh,high(cambiobcd)

lds r23,operacion
lds r24,operacion+1

ldi r22,3

nuevo:
clr r25
lpm r16,z+
lpm r17,z+

restar:
sub r23,r16
sbc r24,r17
brcs restaurar
inc r25
rjmp restar

restaurar:
add r23,r16
adc r24,r17
st y+,r25
dec r22
brne nuevo
st y,r23

pop r25
pop r24
pop r23
pop r22
pop r17
pop r16
out sreg,r16
pop r16

ret

bcd_segmentos:
push r16
in r16,sreg
push r16
push r17

ldi r17,4
ldi yl,low(cambiobcd)
ldi yh,high(cambiobcd)
ldi xl,low(seg)
ldi xh,high(seg)

convertir:
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
ld r16,y+
add zl,r16
clr r16
adc zh,r16
lpm r16,z
st x+,r16
dec r17
brne convertir
pop r17
pop r16
out sreg,r16
pop r16

ret

; barrido de displays
barrido:
push r16
in r16,sreg
push r16
push r17
push r22
push r23
push r24
push r25

ldi xl,low(seg)
ldi xh,high(seg)

ldi r23,4

ldi r22,0b11110111

ldi r16,0b10000000
ldi r17,0b11111111
out porta,r16
out portc,r17
barrido1:
ld r17,x+
out porta,r17
out portc,r22
call retardo
ldi r16,0b10000000
ldi r17,0b11111111
out porta,r16
out portc,r17
sec
ror r22
dec r23
ser r17
out portc,r17
brne barrido1
pop r25
pop r24
pop r23
pop r22
pop r17
pop r16
out sreg,r16
pop r16

ret

retardo:; varia velocidad con la que el mensaje es visto


ldi r25,0xC8
retar0:
ldi r24,0x1F
retar1:
dec r24
brne retar1
dec r25
brne retar0
nop
ret

tablav:
.db 0xe8,0x3,100,0,10,0
;tablas para elementos tipo ánodo común
tabla:
;gfedcba gfedcba
.db 0b11000000,0b11111001 ;0,1
.db 0b10100100,0b10110000 ;2,3
.db 0b10011001,0b10010010 ;4,5
.db 0b10000010,0b11111000 ;6,7
.db 0b10000000,0b10010000 ;8,9
4.- Armar el hardware necesario para probar el programa del numeral anterior;
considerar los límites de corriente de los pines del microcontrolador. Tomar en
consideración que este circuito de barrido se usará en las siguientes prácticas por lo
que se recomienda construirlo de modo que no se desarme. Es posible construirlo en
baquelita de considerarlo conveniente.

Bibliografía:

1.- Cuaderno de trabajo

Вам также может понравиться