Anda di halaman 1dari 4

Laboratorio de dispositivos programables

Practica 1: Introduccin a la programacin de un controlador


Alumnos: Xavi Zurita Milln y Vctor Snchez Aguilar
1.1.
Esta primera prctica tena como objetivo familiarizarnos con el lenguaje ensamblador y llegar a
entender y obtener finalmente un programa ejecutable por el C.
La primera parte consiste en un programa el cual hace parpadear los diodos siempre que la seal de
entrada suministre un estado lgico 1.

Este sera el programa en lenguaje ensamblador, la seal denominada tecla suministra un 1 si


se pulsa alguna tecla del teclado o display y un 0 si no se pulsa.
Las cuatro primeras lneas del programa asignan las posiciones de memoria a los puertos que
denominaremos etiquetas y para eso se usa la directiva EQU. Por ejemplo la seal tecla esta
asociadas al puerto 3 pero solo al bit 2 y es una seal de entrada en cambio la seal LEDS esta
asociada al puerto 4 y a los 8 bits de este puerto ya que se encienden y se apagan los 8 leds a
la vez, y en este caso sera una seal de salida.
Una vez tenemos las etiquetas de los puertos de salida y entrada ubicamos el programa a
partir de la direccin 8100H esta ser la posicin de memoria donde se almacenara la primera
instruccin. Las dems ocuparan las posiciones consecutivas.
Despus empieza el programa, la primera instruccin LOOP lo que hace es llamar a la rutina
test que lo que hace es mirar si el bit de TECLA esta a 1 o 0 y con la instruccin JNB salta si el
bit es 0 a FIN_TEST y si es 1 seguira el programa normal y llamara a la siguiente rutina
FLASH con la instruccin ACALL.

La rutina FLASH es el parpadeo de los leds en si. Primero utiliza la instruccin MOV y pone
todos los leds a 0 es decir los enciende, luego llama a la rutina DELAY que lo nico que hace
es mover un valor de un numero a otro para crear el retardo, una vez ha pasado el tiempo que
tarda en hacer esos movimientos de valores con la instruccin MOV otra vez pone los leds a 1
es decir, los apaga y vuelve a llamar a la rutina DELAY para volver a esperarse antes de
encenderlos de nuevo.
Y este seria bsicamente el programa en el cual si en el puerto 3 el bit 2 suministra un 0 los
leds se encienden se esperan y luego se pagan y vuelve a mirar otra vez hasta que se pulse de
nuevo TECLA para volver a hacer parpadear los leds.

1.2.
org 0000h
MOV RO,#20d
MOV R1, #-100d
MOV R2, #0
MOV R3,#0
MAIN:
MOV A,R0
CLR C
ADD A, R1
JZ FIN
MOV R3, A
RLC A
JC NEGAT
JNZ POSI
POSI: MOV R2, #0X7f
SJMP FIN
NEGAT: MOV R2, #0Xff
FIN:
END

Este otro programa no sala en la practica 1 pero lo hicimos tambin en clase para practicar y
ver cmo funcionan algunas de las instrucciones en lenguaje ensamblador.
El programa bsicamente lo que hace es la suma entre dos nmeros, los cuales en este caso
son 20 y -100 en decimal, pero como el ensamblador trabaja con nmeros en hexadecimal, en
la pantalla, cuando ejecutamos el programa veremos la solucin de nuestra suma en
hexadecimal. Como es una suma de nmeros negativos, es decir, una resta, se tiene que pasar
a complemento a2 para poder efectuarla.
Ara explicaremos el programa paso a paso. En las primeras lneas simplemente lo que hacemos
es asignar valores con la instruccin MOV. RO pasa a ser 20 en decimal, R1 -100 en decimal y
estos son los nmeros que queremos sumar. En R2 le asignamos un 0 al principio pero ah ser
donde se guardara si es positivo o negativo, y a R3 tambin le asignamos un 0 al principio pero
este valor ser el resultado de la suma al final del programa.
En el main se empieza moviendo el valor de uno de los nmeros a sumar en otro registro
llamado A o acumulador.
Luego borramos cualquier carry que pueda estar guardado de haber ejecutado el programa
anteriormente, esto lo hacemos con la instruccin CLR C, despus de esto hacemos la suma
con la instruccin ADD.
La siguiente instruccin JZ lo que hace es saltar a FIN si el resultado es 0, sino continua y
mueve A a R3. Luego para saber si el resultado de la suma es positivo o negativo solo tenemos
que mirar si el primer bit es 1 o 0 ya que esto nos lo indica si esta en complemento a2, por lo
tanto utilizamos la instruccin RLC que mueve hacia la izquierda el bit de carry.
Ahora las dos lneas que hay simplemente son para entrar en una rutina diferente segn sea
positivo o negativo. Con la instruccin JC si el carry vale 1 iremos a NEGAT y con la siguiente
instruccin JNZ si no vala 1 el carry saltara a la rutina POSI. En este caso como la suma es
entre 20 y -100 siempre sabemos seguro que el bit carry ser 1 y que la suma ser negativa as
que esta parte seria prescindible ya que nunca dar positivo a menos que cambiemos los
valores de los nmeros a sumar.
Luego simplemente en las rutinas POSI y NEGAT se cambia el valor de R2 a 0x7F en
hexadecimal si el nmero es positivo y a 0xFF si el nmero es negativo y ah acaba el
programa.

1.3

Anda mungkin juga menyukai