Aquí tenéis el enunciado de una práctica que tengo que realizar, ando un poco perdido y era por ver si alguien podía echarme una mano. Os dejo también un bosquejo del programa que hay que realizar. El lenguaje es el ensamblador del procesador Motorola MC68000. Gracias.
Enunciado:
La práctica consiste en el desarrollo de un sistema controlador de diodos
mediante interruptores. Para llevar a cabo la conexión entre los interruptores y
los diodos vamos a emplear la VIA MC6522 que nos proporciona una
comunicación paralela con el microprocesador MC68000.
Para ello se empleará el puerto A de la VIA2 y se configurará de forma que los 4
bits menos significativos del mismo trabajen en modo lectura y los 4 bits más
significativos en modo escritura. El programa a desarrollar se encargará de leer
los bits correspondientes del puerto A para detectar el estado de los interruptores
y de escribir en los bits adecuados del mismo puerto para encender los leds
correspondientes. La lectura se realizará suponiendo que los 4 bits representan
un número en binario y la escritura se realiza en BCD (Binario codificado en
decimal). Entre la primera cifra y la segunda se deberá introducir un retardo, de
tal forma que se pueda visualizar las dos cifras.
La finalización de la ejecución del programa debe producirse cuando los 4
interruptores se encuentren a 0.
Bosquejo:
* SYMBOLS
ORG $25000
***************************************
* ZONA DE DATOS GLOBALES DEL PROGRAMA
***************************************
VIA_1 EQU $60001
ORB EQU VIA_1+0
ORA EQU VIA_1+2
DDRB EQU VIA_1+4
DDRA EQU VIA_1+6
T1CL EQU VIA_1+8
T1CH EQU VIA_1+10
T1LL EQU VIA_1+12
T1LH EQU VIA_1+14
T2LL EQU VIA_1+16
T2CH EQU VIA_1+18
SR EQU VIA_1+20
ACR EQU VIA_1+22
PCR EQU VIA_1+24
IFR EQU VIA_1+26
IER EQU VIA_1+28
ORAE EQU VIA_1+30
***************************************
* PROGRAMA PRINCIPAL
***************************************
*Configuro la VIA
MOVE.B #$00,DDRA Bits 0-7 de entrada (lectura)
MOVE.B #$FF,DDRB Bits 0-7 de Salida (Escritura en LEDS)
MOVE.B #0,D1 Inicializo D1
MOVE.B #0,D0 Inicializo D0
*Repito el bucle mientras que algun conmutador se encuentre "on"
WHILE MOVE.B ORA,D0 Lectura estado de los conmutadores (bits 0-3 de D0)
CMP #0,D0
BEQ FIN_WHILE
CMP D0,D1 Comparo estado actual (D0) con estado anterior (D1)
BEQ WHILE Si son iguales vuel a leer conmutadores
MOVE.B D0,D1
MOVE.B D1,ORB Escribo en ORB (En los leds)
BRA WHILE
FIN_WHILE MOVE.B #$00,ORB Pongo "0" en bits 4-7 para apagar los leds STOP #$2000
END