Ayer en la asignatura de Informática Industrial realizamos la primera práctica de laboratorio, y la primera en la carrera en la cual hemos usado un microcontrolador.La práctica consiste en realizar un conversor de BCD a 7 segmentos usando un ATmega8535. El resultado final ha sido el siguiente:
En principio el hardware necesario es muy básico, el microcontrolador con el puerto de programación (mejor así que tener que sacar y poner el microcontrolador cada vez que vayamos a modificar algo), Una display de 7 segmentos y 4 interruptores. Aunque para este montaje no es necesario el profesor ha insistido en colocar un driver triestado entre las entradas/salidas del micro y los elementos que vayamos a usar. Por último solo anotar que serán necesarias 8 resistencias limitadoras para los leds del display y 4 pull-up para los interruptores. El montaje se ha realizado siguiendo el siguiente esquema:
El software del dispositivo es mas bien sencillo, básicamente se tiene una tabla con las salidas necesarias para mostrar cada uno de los caracteres en el display y mediante un puntero a la dirección base de esa tabla iremos desplazándonos a la posición del caracter a mostrar según la entrada. El código usado es el siguiente:
;Directivas
.include “m8535def.inc”
.cseg
.org 0×60
Tabla:
.db 0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111
.db 0b01111111,0b01101111,0b01110111,0b01111100,0b00111001,0b01011110,0b01111001,0b01110001
ldi r21,0xff
out DDRA,r21 ;Configuramos PortA como salida
ldi r21,0×00
out DDRD, r21 ;Configuramos PortD como entrada
;Programa
inicio:
In r21,PIND ;Leemos el contenido del puerto D
Andi r21,0x0F ;Filtramos solo lo que queremos leer
Ldi r30,0xc0
Ldi r31,0×00 ;Cargamos el Vector a la base de la tabla
add r30,r21 ;Sumamos el desplazamiento a realizar
Lpm r21,z ;Cargamos el contenido del vector
Out PORTA,r21 ;Sacamos el valor por el display
rjmp inicio ;Saltamos al comienzo de la rutina
Ya se que no suelo poner mucho código ensamblador por aquí pero para estas practicas no nos permiten usar ningún lenguaje de alto nivel y en el fondo no es tan difícil. El código está comentado y el detalle de la función de cada instrucción lo podéis encontrar en el datasheet.