Está en la página 1de 4

Un microcontrolador de tiene la siguiente configuración en sus registros.

Registro Dirección Descripción


Z 0 Registro con valor 0
W 1 Registro de trabajo
UNO 2 Contiene el valor 1 [ 0x01]
AND 3 Aplica operación AND
OR 4 Aplica operación OR
XOR 5 Aplica operación OR exclusiva
ROTL 6 Rota a las izquierda y rellena con ceros
PORTA 7 Puerto de entrada
PORTB 8 Puerto de salida
PORTC 9 Entrada Convertidor AD de 8 Bits
RAM A RAM
RAM B RAM
RAM C RAM
RAM D RAM
RAM E RAM
RAM F RAM

RAM 10 RAM
RAM 11 RAM
RAM 12 RAM
RAM 13 RAM
RAM 14 RAM
RAM 15 RAM
RAM 16 RAM
RAM 17 RAM
RAM 18 RAM
RAM 19 RAM
RAM 1A RAM
RAM 1B RAM
RAM 1C RAM
RAM 1D RAM
RAM 1E RAM
El registro Z solo contiene ceros.

El registro W es el registro de trabajo es de escritura/lectura

El registro UNO solo contiene el valor 0x01 [00000001]

El registro AND es de E/S cuando se escribe un valor en el, opera la función AND entre ese valor
escrito y el registro de trabajo W, el resultado se re-escribe en W.

El registro OR es de E/S cuando se escribe un valor en el, opera la función OR entre ese valor escrito
y el registro de trabajo W, el resultado se re-escribe en W.

El registro XOR es de E/S cuando se escribe un valor en el, opera la función XOR entre ese valor
escrito y el registro de trabajo W, el resultado se re-escribe en W.

El registro ROTL es de E/S cuando se escribe un valor en el rota ese valor a la izquiera el resultado se
escribe en W.

PORTA puerto de entrada de 8 bits


PORTB puerto de salida de 8 bits. Este puerto necesita ponerse a cero 2 veces para colocar la salida a
0x00, si solo se pone a cero una vez, espera una valor distinto a cero para colocar ese valor en
la salida.

PORTC puerto de entrada Analogico-Digital de 8 bits

Este microcontrolador es de tipo one-instruction set computer (OISC) ,es decir que cuenta con
una única instrucción y esta es completa Turing.

La instrucción es:

SUBLEQ A B C

Significa “resta el valor almacenado en la posición A de la memoria al valor


almacenado en la posición B de la memoria, almacena el resultado en la posición
B de la memoria y si es menor o igual que cero salta a la dirección de memoria
correspondiente al valor almacenado en la posición C de la memoria”. La posición
de la memoria pueden ser sustituidas por una etiqueta que el ensamblador
traducirá a una dirección. El ensamblador toma el valor X como la siguiente
dirección del programa.

Ejemplo:

Programa1: Aplica la mascara 0x0F [00001111 ] a los datos de entrada en el puerto A y saca el resulta
por el puerto B.

!Esto es un comentario
!Etiquetas
MASC EQU 0x0A !RAM
RAM1 EQU 0x0B
RAM1 EQU 0x0C
!Primero se genera la mascara
SUBLEQ MASC,MASC,X ! MASC se resta de MASC como el resultado es cero salta
!a X que es la siguiente dirección de memoria y MASC ya
!esta en ceros.

SUBLEQ UNO,MASC,X !Se toma un uno y se lleva al registro MASC como la resta
!del contenido de UNO-MASC es 1-0 no hay salto y por
!tanto no importa el valor X, aquí MASC=0000 0001

! Se lleva ese valor a ROTL para rotarlo a la izquierda


SUBLEQ W,W,X !Se pone a ceros W
SUBLEQ ROTL,ROTL,X !Se pone a ceros ROTL
SUBLEQ MASC,ROTL,X !Se lleva MASC a ROTL, en W ahora hay 0000 0010
!como MASC – ROTL es mayor a cero , X no importa

SUBLEQ OR,OR,X !Se coloca OR a cero como OR-OR = 0 al escribir 0 en OR


!OR [ 0000 0000] or W [0000 0010] =W[0000 0010]
!se conserva W

SUBLEQ MASC,OR,X ! MASC - OR =OR, OR or W=W


! 0000 0001 or 0000 0010= 0000 0011
SUBLEQ MASC,MASC,X !Se limpia MASC
SUBLEQ W,MASC,X !MASC=W-MASC , MASC= 0000 0011 – 0000 0000

! Se lleva ese valor a ROTL para rotarlo a la izquierda


SUBLEQ W,W,X !Se pone a ceros W
SUBLEQ ROTL,ROTL,X !Se pone a ceros ROTL W=0
SUBLEQ MASC,ROTL,X !Se lleva MASC a ROTL, en W ahora hay 0000 0110
!como MASC – ROTL es mayor a cero , X no importa

SUBLEQ OR,OR,X !Se coloca OR a cero como OR-OR = 0 al escribir 0 en OR


!OR [ 0000 0000] or W [0000 0110] =W[0000 0110]
!se conserva W

SUBLEQ UNO,OR,X !UNO - OR =OR, 00000001-00000000=1 OR=1 W= W or


!OR
! 0000 0110 or 0000 0001= 0000 0111
SUBLEQ MASC,MASC,X !Se limpia MASC
SUBLEQ W,MASC,X !MASC=W-MASC , MASC= 0000 0111 – 0000 0000

! Se lleva ese valor a ROTL para rotarlo a la izquierda


SUBLEQ W,W,X !Se pone a ceros W
SUBLEQ ROTL,ROTL,X !Se pone a ceros ROTL W=0
SUBLEQ MASC,ROTL,X !Se lleva MASC a ROTL, en W ahora hay 0000 1110
!como MASC – ROTL es mayor a cero , X no importa

SUBLEQ OR,OR,X !Se coloca OR a cero como OR-OR = 0 al escribir 0 en OR


!OR [ 0000 0000] or W [0000 1110] =W[0000 0110]
!se conserva W
!se lleva un uno a OR
SUBLEQ UNO,OR,X !UNO - OR =OR, 00000001-00000000=1 OR=1 W= W or
!OR
! 0000 1110 or 0000 0001= 0000 1111
SUBLEQ MASC,MASC,X !Se limpia MASC
SUBLEQ W,MASC,X !MASC=W-MASC , MASC= 0000 1111 – 0000 0000
!MASC = 0000 1111
SUBLEQ W,W,X !Se limpia el registro W
SUBLEQ AND,AND,X !Se limpia el registro AND
SUBLEQ PORTA,W,X !Se carga el valor de PORTA en W
SUBLEW MASC,AND,X !Se carga el valor de MASC en AND
!Opera AND entre en registro AND y W
SUBLEQ PORTB,PORTB,X !Se pone a ceros el puerto B
SUBLEQ W,PORTB,X !PORT B= W-PORTB se escribe W en puerto B
END

Programa2

Programa1: Saca constantemente un conteo ascendente por el puerto B.

MEM0 EQU 0x0A !RAM


MEM1 EQU 0x0B !RAM
SUBLEQ MEM0,MEM0,X !Se limpia MEM0
SUBLEQ MEM1,MEM1,X !Se limpia MEM1

ciclo:
SUBLEQ W,W,X !Se limpia el registro W
SUBLEQ UNO,W,X !Se coloca un 1 en el registro de trabajo W=1-0
SUBLEQ MEM1,W,X !Se resta 0-1 y W queda con -1,
SUBLEQ MEM0,W,X !Se suma 1 a W , W=0-(-1)
SUBLEQ MEM0,MEM0,X !Se limpia MEM0
SUBLEW W,MEM0,X !Se guarda el valor W en MEM0
SUBLEQ PORTB,PORTB,X !Se limpia el registro PORTB
SUBLEQ W,PORTB,X !PORTA =W-PORTA Saca el dato
SUBLEQ MEM1,MEM1,ciclo !Ciclo incodicional MEM1=0

También podría gustarte