3. Resultados e implementación.
Primer ejercicio. Desarrollar un programa para el microcontrolador ATMEGA 32 para
controlar un display de 7 segmentos conectado al puerto D (configurado como salida).
Los códigos digitales se introducirán a través del puerto C (configurados los pines
PORTC0 a PORTC3 como entradas).
Código fuente.
.INCLUDE"[Link]"
.ORG 0
LDI R16,0xFF ;Cargar 0xFF a R16
OUT DDRD,R16 ;Cargar R16 a DDRD, DDRD configurado como salida
LDI R17,0xF0 ;Cargar 0xF0 a R16
OUT DDRB,R17 ;Cargar R17 a DDRB, DDRB configurado como entrada
bucle:
IN R16,PINB ;el estado de pinB cargar a R16
CPI R16,0x00 ;comparar R16 con 0
BREQ cero ;saltar a "cero" cuando R16 es igual al numero cargado
CPI R16,0x01 ;comparar R16 con 1
BREQ uno ;saltar a "uno" cuando R16 es igual al numero cargado
CPI R16,0x02 ;comparar R16 con 2
BREQ dos ;saltar a "dos" cuando R16 es igual al numero cargado
CPI R16,0x03 ;comparar R16 con 3
BREQ tres ;saltar a "tres" cuando R16 es igual al numero cargado
CPI R16,0x04 ;comparar R16 con 4
BREQ cuatro ;saltar a "cuatro" cuando R16 es igual al numero cargado
CPI R16,0x05 ;comparar R16 con 5
BREQ cinco ;saltar a "cinco" cuando R16 es igual al numero cargado
CPI R16,0x06 ;comparar R16 con 6
BREQ seis ;;saltar a "seis" cuando R16 es igual al numero cargado
CPI R16,0x07 ;comparar R16 con 7
BREQ siete ;saltar a "siete" cuando R16 es igual al numero cargado
CPI R16,0x08 ;comparar R16 con 8
BREQ ocho ;saltar a "ocho" cuando R16 es igual al numero cargado
CPI R16,0x09 ;comparar R16 con 9
BREQ nueve ;saltar a "nueve" cuando R16 es igual al numero cargado
CPI R16,0x0A ;comparar R16 con 10
BREQ diez ;saltar a "diez" cuando R16 es igual al numero cargado
CPI R16,0x0B ;comparar R16 con 11
BREQ once ;saltar a "once" cuando R16 es igual al numero cargado
CPI R16,0x0C ;comparar R16 con 12
BREQ doce ;saltar a "doce" cuando R16 es igual al numero cargado
CPI R16,0x0D ;comparar R16 con 13
BREQ trece ;saltar a "trece" cuando R16 es igual al numero cargado
CPI R16,0x0E ;comparar R16 con 14
BREQ catorce ;saltar a "catorce" cuando R16 es igual al numero cargado
CPI R16,0x0F ;comparar R16 con 15
BREQ quince ;saltar a "quince" cuando R16 es igual al numero cargado
cero:
LDI R18,0x3F ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
uno:
LDI R18,0x06 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
dos:
LDI R18,0x5B ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
tres:
LDI R18,0x4F ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
cuatro:
LDI R18,0x66 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
cinco:
LDI R18,0x6D ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle; ;salto relativo a bucle
seis:
LDI R18,0x7D ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
siete:
LDI R18,0x07 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
ocho:
LDI R18,0x7F ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
nueve:
LDI R18,0x6F ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
diez:
LDI R18,0x77 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
once:
LDI R18,0x7C ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
doce:
LDI R18,0x39 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
trece:
LDI R18,0x5E ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
catorce:
LDI R18,0x79 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
quince:
LDI R18,0x71 ;cargar a R18 directamente
OUT PORTD,R18 ;cargar al puertoD lo que se encuentra en R18
RJMP bucle ;salto relativo a bucle
Diagrama de flujo
Circuito implementado en el laboratorio
Segundo ejercicio. Desarrollar un programa para el microcontrolador ATMEGA 32 que
realice el conteo ascendente de los pulsos recibidos a través del pin PORTC.0
(configurado como entrada). El conteo será visualizado a través del puerto D
(configurado como salida). El pin PORTC.1 (configurado como entrada) servirá para
realizar el conteo descendente de valores también visualizado en el puerto D.
Código fuente.
.INCLUDE "[Link]"
.ORG 0
LDI R18,0xFF ;cargar 0XFF a R18
OUT DDRD,R18 ;cargar R18 a DDRD, DDRD configurado como salida
LDI R18,0x00 ;cargar 0X00 a R18
OUT DDRC,R18 ;Cargar R18 a DDRC, DDRC configurado como entrada
NEW:
SBIS PINC,0 ;si el bit de pinc0 es igual a uno salta a la siguiente instruccion
RJMP ASCENDENTE ;salto relativo a ascendente
SBIS PINC,1 ;si el bit de pinc1 es igual a uno salta a la siguiente instruccion
RJMP DESCENDENTE ;salto relativo a descendente
RJMP NEW ;salto relativo a new
ASCENDENTE:
SBIS PINC,0 ;si el bit de pinc0 es igual a uno salta a la siguiente instruccion
RJMP ASCENDENTE ;salto relativo a ascendente
INC R17 ;incrementar registro R17
OUT PORTD,R17 ;cargar al puertoD lo que se encuentra en R17
RJMP NEW ;salto relativo a new
DESCENDENTE:
SBIS PINC,1 ;si el bit de pinc1 es igual a uno salta a la siguiente instruccion
RJMP DESCENDENTE ;salto relativo a descendente
DEC R17 ;decrementar R17
OUT PORTD,R17 ;cargar al puertoD lo que se encuentra en R17
RJMP NEW ;salto relativo a new
Diagrama de flujo
Circuito implementado en el laboratorio