Anda di halaman 1dari 5

Código comentado:

Ejercicio 1:
.include "m32def.inc"
rjmp Start

Start:

declapuertos:
ldi r17,0xff; cargar el valor 0xff al registro r17
out ddrd, r17; configurar como salida el puerto d
ldi r17,0x00; cargar el valor 0x00 al registro r17
bucle:
sbis pinb,0; saltar si el bit 0 está recibiendo 1 logico
rjmp asc1; saltar asc1
rjmp des1; saltar des1
asc1:
ldi zh,high(display7seg1<<1) ;señalar el estado alto de nuestra tabla y guardarla en zh
ldi zl,low(display7seg1<<1) ;señalar el estado bajo de nuestra tabla y guardarla en zl
mov r19, r17; hacemos una copia del nuestro dato para que no sea afectado
andi r19,0x0f; el dato lo ponemos en el nible inferior
add zl, r19; sumamos el zl con el registro 19
clr r19; limpiamos el registro 19
adc zh, r19; sumamos el zh con el acarreo y el registro 19
lpm r19, z; recuperamos los dos registros de z y guardamos en r19
out portd, r19; exportamos el registro r19 en el puerto D
inc r17; incrementamos el registro 17
delay:
ldi r21, 11; cargamos el valor 11 al r21
ldi r22, 38; cargamos el valor 38 al r22
ldi r23, 94; cargamos el valor 94 al r23
L1: dec r23 ;decrementamos el r23
brne L1; preguntamos si la bandera de cero se activo
dec r22; decrementamos el r22
brne L1; preguntamos si la bandera de cero se activo
dec r21 ;decrementamos el r21
brne L1; preguntamos si la bandera de cero se activo
rjmp PC+1; saltamos al contador de programa +1
rjmp bucle; saltamos a bucle
des1:
ldi zh,high(display7seg1<<1) ;señalar el estado alto de nuestra tabla y guardala en zh
ldi zl,low(display7seg1<<1) ;señalar el estado bajo de nuestra tabla y guardala en zl
dec r17; decrementamos el registro r17
mov r19, r17; acemos una copia del nuestro dato para que no sea afectado
andi r19,0x0f; el dato lo ponemos en el nible inferior
add zl, r19; sumamos el zl con el registro 19
clr r19; limpiamos el registro 19
adc zh, r19; sumamos el zh con el acarreo y el registro 19
lpm r19, z; recuperamos los dos registros de z y guardamos en r19
out portd, r19; exportamos el registro r19 en el puerto D
delay2:
ldi r24, 11; cargamos el valor 11 al r24
ldi r25, 38; cargamos el valor 38 al r25
ldi r26, 94; cargamos el valor 94 al r26
L2: dec r26; decrementamos el r23
brne L2; preguntamos si la bandera de cero se activo
dec r25; decrementamos el r23
brne L2; preguntamos si la bandera de cero se activo
dec r24; decrementamos el r23
brne L2; preguntamos si la bandera de cero se activo
rjmp PC+1; saltamos al contador de programa +1
rjmp bucle; saltamos a bucle

display7seg1:
.db 0b00111111, 0b00000110
.db 0b01011011, 0b01001111
.db 0b01100110, 0b01101101
.db 0b01111101, 0b00000111
.db 0b01111111, 0b01101111
.db 0b01110111, 0b01111100
.db 0b00111001, 0b01011110
.db 0b01111001, 0b01110001

Esquemático:
Ejercicio 2:
.include "m32def.inc" ; incluimos la librería para utilizar nombres ya no direcciones

Declarar puertos:
ldi r17,0x00; cargamos al registro 17 con el valor de cero
out ddra,r17; configuramos el puerto a como entrada
ldi r17,0xff; cargamos al registro 17 con ek valor de 255
out ddrd,r17; configuramos el puerto d como salida
out ddrb,r17; configuramos el puerto b como salida
ldi r17,0x00; cargamos al registro 17 con el valor de cero
ldi r18,0x00; cargamos al registro 18 con el valor de cero
bucle:
sbis pinb,0; saltamos si existe uno lógico en el pin 1 del portb
sbis pinb,1; saltamos si existe uno lógico en el pin 2 del portb
rjmp asc1; saltamos a la etiqueta asc1
rjmp des1; saltamos a la etiqueta des1
asc1:
ldi zh,high(display7seg1<<1) ;apuntamos con la pila en la dirección baja de nuestra tabla display
ldi zl,low(display7seg1<<1) ;apuntamos con la pila en la dirección alta de nuestra tabla display
mov r19,r17; guardamos el r17 en r19 para que el r17 no sea afectado por el proceso
andi r19,0b000011111; nos aseguramos que los caracteres aparezcan con un rango mas
add zl,r19;sumo al puntero Z para que apunte al dato requerido
clr r19; limpiamos el r19
adc zh,r19;sumamos con acarreo para el desplazamiento de la tabla
lpm r19,z ; recuperamos el dato obtenido de Z en r19

ldi zh,high(display7seg2<<1);apuntamos con la pila en la dirección baja de nuestra tabla display


ldi zl,low(display7seg2<<1);apuntamos con la pila en la dirección alta de nuestra tabla display
mov r20,r18; guardamos el r18 en r20 para que el r18 no sea afectado por el proceso
andi r20,0b000011111; nos aseguramos que los caracteres aparezcan con un rango mas
add zl,r20;sumo al puntero Z para que apunte al dato requerido
clr r20; limpiamos el r20
adc zh,r20;sumamos con acarreo para el desplazamiento de la tabla
lpm r20,z; recuperamos el dato obtenido de Z en r20
out portd,r19; exportamos el registro en el puerto d
out portb,r20;exportamos el registro en el puerto b
delay:
ldi r21, 11; cargamos al r21 con 11
ldi r22, 38; cargamos al r22 con 38
ldi r23, 94; cargamos al r23 con 94
L1: dec r23; decrementamos r23
brne L1; preguntamos si es cero y saltamos si ni es cero
dec r22;decrementamos r22
brne L1; preguntamos si es cero y saltamos si ni es cero
dec r21; decrementamos r21
brne L1 ; preguntamos si es cero y saltamos si ni es cero
rjmp PC+1c
inc r17; incrementamos r17
inc r18; incrementamos r18
rjmp bucle; saltamos a la etiqueta bucle

des1:
ldi zh,high(display7seg1<<1);apuntamos con la pila en la dirección baja de nuestra tabla display
ldi zl,low(display7seg1<<1);apuntamos con la pila en la dirección alta de nuestra tabla display
dec r17; decrementamos el r17
dec r18; decrementamos el r18
mov r19,r17; guardamos el r17 en r19 para que el r17 no sea afectado por el proceso
andi r19,0b000011111; nos aseguramos que los caracteres aparezcan con un rango mas
add zl,r19;sumo al puntero Z para que apunte al dato requerido
clr r19 ; limpiamos el r19
adc zh,r19;sumamos con acarreo para el desplazamiento de la tabla
lpm r19,z;recuperamos el dato obtenido de Z en r20

ldi zh,high(display7seg2<<1);apuntamos con la pila en la dirección baja de nuestra tabla display


ldi zl,low(display7seg2<<1);apuntamos con la pila en la dirección alta de nuestra tabla display
mov r20,r18; guardamos el r18 en r20 para que el r17 no sea afectado por el proceso
andi r20,0b000011111; nos aseguramos que los caracteres aparezcan con un rango mas
add zl,r20;sumo al puntero Z para que apunte al dato requerido
clr r20; limpiamos el r20
adc zh,r20;sumamos con acarreo para el desplazamiento de la tabla
lpm r20,z; recuperamos el dato obtenido de Z en r20
out portd,r19;exportamos el registro en el puerto d
out portb,r20;exportamos el registro en el puerto b
delay2:
ldi r24, 11;cargamos al r24 con 11
ldi r25, 38;cargamos al r25 con 38
ldi r26, 94;cargamos al r26 con 94
L2: dec r26;decrementamos el r26
brne L2; preguntamos si es cero y saltamos si no es cero
dec r25;decrementamos el r26
brne L2; preguntamos si es cero y saltamos si ni es cero
dec r24;decrementamos el r26
brne L2; preguntamos si es cero y saltamos si ni es cero
rjmp PC+1; saltamos al contador de programas +1
rjmp bucle; saltamos a la etiqueta bucle

display7seg1:
.db 0b11111100, 0b11001100
.db 0b11001111, 0b11011111
.db 0b11111111, 0b11011111
.db 0b00111111, 0b11000000
.db 0b11001100, 0b11001111
.db 0b11100011, 0b11100011
.db 0b11001111, 0b11001100
.db 0b00001111, 0b11001100
.db 0b11100011, 0b11110011
display7seg2:
.db 0b01000100, 0b01000100
.db 0b00010001, 0b00010000
.db 0b00000000, 0b00010000
.db 0b00000000, 0b01000100
.db 0b01000100, 0b00010001
.db 0b00011001, 0b00011001
.db 0b00010001, 0b00100010
.db 0b00000000, 0b01000100
.db 0b00010001, 0b00010001

Esquemático: