Escolar Documentos
Profissional Documentos
Cultura Documentos
--------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
-7-
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
1 Comenzando por el principio
Muchos de los aparatos que existen en nuestro tiempo no serían posibles sin la
existencia de microcontroladores. Estos son utilizados de forma indispensable en casi
todos los aparatos electrónicos. Si no existieran los microprocesadores muchos de estos
aparatos constarían de cientos de circuitos integrados "comunes" con todos los
problemas de espacio, diseño y coste que eso conllevaría.
Los equipos ALTAIR están diseñados para que sean aprovechados por
ingenieros, estudiantes y entusiastas de la electrónica que deseen realizar montajes muy
complejos de una forma sencilla, barata, rápida y eficaz, montajes que no siempre
requieren de periféricos comunes disponibles en ordenadores personales tipo PC.
-----------------------------------------------------------------------------------------------------------------------------
-9-
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
El microprocesador elegido inicialmente para los equipos ALTAIR fue el SAB
80C535 de Siemens, que es una versión mejorada del Intel 8051. Se trata de un
microprocesador de 8 bits de altas prestaciones, estándar en la industria, que con una
frecuencia de 12 MHz puede llegar a ejecutar un millón de instrucciones por segundo.
ALTAIR 32
ALTAIR 320
ALTAIR 535E
-----------------------------------------------------------------------------------------------------------------------------
- 10 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Se trata de un microcontrolador compatible 100% con el ALTAIR 535 al cual
se le han añadido algunos periféricos curiosos que permiten realizar prácticas en la
enseñanza.
De este modelo tan solo se montaron 200 unidades entre 1.995 y 1.996, y
actualmente está fuera de producción.
ALTAIR 552
ALTAIR 537
2 ¿Qué es un programa?
Esto le da una idea de la enorme velocidad a la que puede operar, pero a pesar
de ello, a veces pueden tardar minutos, e incluso horas en procesar una pila de datos.
-----------------------------------------------------------------------------------------------------------------------------
- 11 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Para introducir un programa en la memoria del ALTAIR hemos desarrollado
un entorno de programación bastante cómodo, el KIT de desarrollo ALTAIR versión
3.00. Gracias a este usted puede fácilmente escribir y ejecutar aplicaciones para los
equipos ALTAIR directamente desde un PC de sobremesa.
• Programa de instalación.
• Editor con SHELL integrado.
• Macroensamblador 8051 con definiciones para el 51, 515, 517, 552 y 520.
• Enlazador de código objeto.
• Depurador de código fuente.
• Programa ejecutor.
• Conversor ejecutable -> binario.
• Conversor binario -> Intel Hexadecimal.
• Ejecutor remoto de ficheros Intel Hex y Binarios.
• Reseteador remoto.
• Testeador del equipo.
• Desensamblador.
• Código fuente de rutinas de gestión del puerto serie de un PC.
• Código fuente de infinidad de ejemplos.
-----------------------------------------------------------------------------------------------------------------------------
- 12 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Donde [destino] es la unidad donde desea instalar el KIT de desarrollo. Si no
indica unidad de destino el KIT de desarrollo se instalará en la unidad C.
5 El Editor
El editor integra también todas las funciones del SHELL, pudiéndose llamar
desde él y de forma automática a la mayoría de los programas incluidos en el KIT de
desarrollo.
-----------------------------------------------------------------------------------------------------------------------------
- 13 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
El programa editor puede llamarse simplemente tecleando desde el MS DOS el
comando EDITOR51 el cual llamará a la aplicación EDITOR51.EXE que se halla en la
carpeta de ejecutables EJEC.
Figura 1: Pantalla principal que aparece nada más cargar el programa editor.
-----------------------------------------------------------------------------------------------------------------------------
- 14 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Los menús pueden ser accedidos con la ayuda de un ratón estándar tipo
MICROSOFT o bien mediante teclado, opción que recomendamos. A continuación
describiremos la acción de cada una de las opciones de los menús.
Este menú dispone de una sola opción denominada Acerca. Para seleccionarla
pulse con el ratón sobre ella, o bien pulse directamente la tecla <Return>. Con ello le
aparecerá en pantalla un cuadro de diálogo en el que se da información acerca de la
versión del KIT de desarrollo así como su fecha de programación. Vea la figura 2
-----------------------------------------------------------------------------------------------------------------------------
- 15 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Para salir de él debe pulsar con el ratón sobre OK o bien pulsar directamente
sobre la tecla <Return>
Puede acceder a este menú pulsando con el ratón sobre él o bien pulsando
<ALT A>. Una vez desplegado puede seleccionar las opciones utilizando las teclas del
cursor y <Return>, o bien pinchándolas con el ratón. Puede salir del menú sin
seleccionar ninguna opción pulsando <ESC> o bien pinchando con el ratón fuera del
menú.
<F3> Abrir
-----------------------------------------------------------------------------------------------------------------------------
- 16 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Nuevo
Esta opción crea una ventana de texto vacía denominada <sintitxx.s51>. Los
caracteres xx representan un número de 00 a 99. La primera ventana sin título que se
crea se denomina sintit00.s51, la siguiente se denomina sintit01.s51 y así
sucesivamente.
Sobre esta ventana sin título recién creada puede comenzar a editar sus
programas fuentes. Posteriormente tendrá opción de cambiar su nombre por otro más
racional.
<F2> Guardar
Guardar como
- 17 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
teclado o bien mediante el ratón de forma análoga al selector de ficheros de la opción
abrir.
Imprimir texto
Con esta opción puede volcar el contenido parcial o completo de una ventana
sobre la impresora. Si la ventana activa (superior) no dispone de ningún texto
seleccionado se imprimirá su contenido directamente.
-----------------------------------------------------------------------------------------------------------------------------
- 18 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Salir al DOS
-----------------------------------------------------------------------------------------------------------------------------
- 19 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Figura 6: Puede observar el aspecto del MS DOS cuando es llamado desde el
propio editor. Ahora puede organizar su disco duro, ejecutar sus utilidades favoritas y
volver posteriormente al editor tecleando el comando EXIT.
Antes de realizar según que operación con bloques deberá seleccionarlos. Para
ello debe colocar el cursor sobre el inicio del bloque y extenderlo utilizando el cursor al
mismo tiempo que mantiene pulsada la tecla <Shift>.
Deshacer
Esta opción deshace todos los cambios realizados con el menú de edición.
Normalmente esta opción se utiliza para recuperar fragmentos de textos después de
haber realizado desastres.
-----------------------------------------------------------------------------------------------------------------------------
- 20 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Copia el bloque seleccionado sobre el portapapeles. Un bloque copiado hacia
el portapapeles puede ser copiado múltiples veces sobre el texto utilizando la opción
pegar.
Mostrar portapapeles
Este menú consta de seis opciones, que permiten buscar y sustituir secuencias
de texto. Las tres opciones disponibles son:
Buscar
Esta opción busca dentro del texto una cadena determinada. Esta cadena
determinada debe ser seleccionada mediante un cuadro de diálogo, figura 7. En el
algoritmo de búsqueda se puede tener en cuenta el significado de
mayúsculas/minúsculas o palabras completas.
-----------------------------------------------------------------------------------------------------------------------------
- 21 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Sustituir
Esta opción permite repetir una búsqueda seleccionada con la opción buscar.
-----------------------------------------------------------------------------------------------------------------------------
- 22 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
De esta forma si al ensamblar obtiene múltiples errores puede fácilmente ir de
uno a otro con este comando y el anterior.
Esta opción permite mover y cambiar el tamaño de una ventana. Para moverla,
después de seleccionar esta opción utilice las teclas del cursor. Para cambiar su tamaño
utilice las teclas del cursor al mismo tiempo que pulsa la tecla <Shift>. Una vez
seleccionada la posición y tamaño adecuado pulse <Return>. Esta operación de cambiar
el tamaño de una ventana y moverla la puede realizar de forma mucho más simple con
ayuda de un ratón.
<F5> Zoom
Esta opción amplia una ventana a su máximo tamaño, esto es, al tamaño de la
pantalla del ordenador. Si la pantalla ya fue ampliada previamente con esta opción, al
ejecutarla por segunda vez volverá de nuevo a su tamaño inicial.
Apiladas
Cascada
-----------------------------------------------------------------------------------------------------------------------------
- 23 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Coloca todas las ventanas ordenadas de forma que se puede ver el título de
todas ellas. En la figura F puede observar las ventanas montadas en cascada.
<F6> Siguiente
Con esta opción invoca en la pantalla un cuadro de diálogo que contiene los
primeros 128 caracteres del código ASCII. Pulsando <Return> o la opción [OK] se
mostrará un cuadro de diálogo con los siguientes 128 caracteres ASCII. Vea las figuras
H y J.
Las tres opciones de este menú permiten abrir, crear y cerrar los proyectos del
KIT de desarrollo. Un proyecto es un conjunto de ficheros fuente y objetos que
conforman un único programa.
-----------------------------------------------------------------------------------------------------------------------------
- 24 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Abrir Proyecto
Debe tener presente que todos los ficheros de proyecto terminan con .P51, por
tanto si crea un fichero de proyecto debe indicar dicha terminación. El programa
resultante de un proyecto tendrá el mismo nombre que proyecto, con la diferencia que
en vez de estar terminado por .P51 estará terminado por .E51.
Cerrar Proyecto
Esta opción cierra el proyecto activo. Una vez llamada, cuando se llame a las
opciones de ensamblar, encadenar, ejecutar, depurar, ... estas actuarán sobre la ventana
superior activa y las tratará como si fuesen un programa completo, independientemente
sean parte de un proyecto o no.
Editor Proyecto
Cuando se le pida el editor que realice una operación con el programa (por
ejemplo ejecutarlo) este automáticamente ensamblará los ficheros *.S51 creando
ficheros *.O51 los cuales serán encadenados junto los ficheros *.O51 definidos en el
proyecto, creando el ejecutable.
-----------------------------------------------------------------------------------------------------------------------------
- 25 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Por último está la opción [RET EDITOR] que hace que la pantalla del editor de
proyectos desaparezca y el proyecto quede activo. Si cuando selecciona esta opción está
sobre algún fichero fuente este aparecerá en la ventana activa del editor.
Este menú de seis opciones permite ensamblar, enlazar y ejecutar los ficheros
de textos editados con ayuda de las opciones anteriores. Las opciones disponibles son:
<F9> Ensamblar
Llamando a esta opción se ensamblan todos los ficheros *.S51 del proyecto
válido abierto. Si no hubiese ningún proyecto válido abierto simplemente se ensambla el
fichero de texto que hay en la ventana activa.
<F8> Enlazar
Esta opción genera a partir de los ficheros objeto del proyecto, *.O51, un
fichero ejecutable tipo *.E51. Si no hubiese un proyecto abierto crea un fichero
ejecutable relacionado a partir del fichero objeto (*.O51) resultante de ensamblar la
ventana activa.
-----------------------------------------------------------------------------------------------------------------------------
- 26 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Al igual que antes, en caso de producirse un error se abrirá una ventana con la
lista de errores.
Debe tener presente que para que un programa pueda ser ejecutado con
esta opción este debe estar ubicado sobre una memoria SRAM que actúe al mismo
tiempo como memoria de datos (escritura) y como memoria de programa (lectura). En
los equipos ALTAIR 535/537 esta memoria va desde la posición $8000 a la posición
$FFFF.
Depurar
Recompilar
Una opción curiosa que permite reensamblar y encadenar de nuevo todos los
módulos que integran el proyecto activo. Normalmente no deberá ejecutar esta opción,
pero en algunos casos por motivos externos a nuestro KIT de desarrollo las fechas y
hora de los ficheros son incorrectas, por lo que para volverlas a ajustar deberá llamar a
esta opción.
-----------------------------------------------------------------------------------------------------------------------------
- 27 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
En este punto y como anécdota podemos contar que trabajando con un
ensamblador cruzado de ZILOG para la familia Z8 descubrimos que determinada
aplicación no funcionaba correctamente a pesar de que era ensamblada y lincada
correctamente. Recompilandola funcionaba, sin realizar ningún cambio sobre el listado
fuente. Después de varias semanas y haber dado mil y una vuelta descubrimos que el
error era causado por un disco duro con algunos sectores defectuosos que el MS DOS
daba por buenos. Cuando el fichero objeto caía en dichos sectores corrompía el
resultado final.
Ajustar reloj
Esta opción permite ajustar el reloj interno opcional tipo PHANTOM WATCH
que pudiese haber instalados en los microcontroladores ALTAIR. Para ello se presenta
en pantalla un cuadro de diálogo como el mostrado en la figura 1-7. En él se selecciona
hora y fecha. Para cambiar la fecha y hora del reloj del microcontrolador debe utilizar el
TABulador o el ratón para posicionar el cursor sobre el campo a modificar.
Generar EPROM
Esta opción genera a partir del fichero ejecutable del proyecto activo una
EPROM. Esta EPROM puede contener la aplicación o parte de la misma. Normalmente
una vez depurado y probada la aplicación sobre la SRAM llega la hora de guardarlo
sobre una EPROM con el fin de dejar una aplicación definitiva.
Generar EEPROM
-----------------------------------------------------------------------------------------------------------------------------
- 28 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Cuando se desarrolla un proyecto basado en microcontrolador hay una parte
del tiempo que se pierde realizando tareas como esperar a que el ensamblador termine
su trabajo, transmitiendo el programa al microcontrolador, grabando y borrando
EPROMs, ...
Hay una parte engorrosa del desarrollo que es la puesta a punto del sistema. A
veces el programa desarrollado sobre la SRAM funciona correctamente, pero al grabarlo
en la EPROM deja de funcionar. Dado que en la EPROM no es posible depurar un
programa surge la necesidad de modificar parte del listado y grabar una nueva EPROM.
Cuando después de varias docenas de EPROMs estas se terminan deben ser borradas de
nuevo. Algunas de ellas se pierden en el proceso.
• Debe tener especial cuidado donde define las tablas de datos inicializados.
Para aminorar este problema hemos diseñado una placa adaptadora que
dispone de un 82C55 que se conecta al puerto de bus de direcciones y datos de un 535 o
537 y al puerto paralelo de un PC por el otro. Si el microcontrolador dispone de una
EEPROM del tipo X28C256 con esta opción puede grabar dicha memoria tantas veces
como desee. Recuerde que si desea posteriormente volver a enviar programas a la
SRAM deberá cargar de nuevo el sistema operativo.
Terminal
-----------------------------------------------------------------------------------------------------------------------------
- 29 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Con esta opción se llama al programa terminal (TERM51.EXE), el mismo que
era aparecía en la opción ejecutar. Este terminal actúa sobre el puerto RS232c activo, y
se puede salir de él pulsando dos veces consecutivas la tecla <ESC>. En la figura M
puede ver el aspecto que tiene la terminal tonta.
Opciones
• Puerto serie
Si requiere de más puertos series deberá añadir una tarjeta MULTI I/O
y configurar sus puertos serie para que actúen como COM3 y COM4. (No
olvide de deshabilitar los demás interfaces de la segunda tarjeta MULTI I/O
ya que de lo contrario se interferirá con la primera). Los puertos COM3 y
COM4 no son soportados por nuestro software, ni por el MSDOS, pero sí
por el WINDOWS y por el driver de ratón MICROSOFT.
Si a pesar de todo necesita que nuestro software utilice COM3 ó COM4 por
favor contacte directamente con nosotros.
• Prioridad
-----------------------------------------------------------------------------------------------------------------------------
- 30 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Si la prioridad del puerto serie es mayor que la del temporizador, dicho
registro no se incrementará mientras esté ejecutando el programa paso a
paso, mientras que si la prioridad del puerto serie es menor que la del
temporizador, este si que incrementará el registro a razón de 100 veces por
segundo.
115200
baudios =
divisor
• Directorio de ejecutables
• Directorio PROUNI
-----------------------------------------------------------------------------------------------------------------------------
- 31 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
De disponer de un programador de EPROMs este normalmente estará en el
directorio C:\EPROM\
• Nº máximo de errores
• [X] Autograbación
-----------------------------------------------------------------------------------------------------------------------------
- 32 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Para salir del cuadro modal de opciones simplemente debe pulsar la tecla [OK]
, dando conformidad a todos los cambios, o bien debe pulsar [CANCELAR] ó <ESC>
para anular todos los cambios realizados en los parámetros.
6 El ensamblador
Las etiquetas deben estar siempre a la izquierda del texto, y pueden terminarse
con dos puntos <:>. Los mnemónicos deben estar separados del margen izquierdo al
menos por un espacio, de no ser así el ensamblador confundirá el mnemónico con una
etiqueta. Normalmente se suelen tabular con el fin de que el listado sea más legible.
-----------------------------------------------------------------------------------------------------------------------------
- 33 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Finalmente, terminando la linea, después de los argumentos va el comentario,
que consiste en un texto cualquiera que no está sujeto a ninguna regla. Si la linea no
dispone de mnemónico con argumentos el comentario debe estar precedido por un
punto y coma <;>.
inicio:
mov R0, #27 ;Carga el registro R0 con un 27
bucle:
djnz R0, bucle ;Decrementa R0 y salta a bucle
;hasta que R0 contenga un cero
Existe una etiqueta muy especial, que es ! (signo de admiración hacia abajo).
El ensamblador la interpreta como la posición actual del programa, por ejemplo:
.text_org
Esta directiva sirve para indicar la dirección de comienzo del código objeto que
debe generar el ensamblador. Para ello se le puede indicar un valor numérico, una
dirección entre 0 y 64K (0 .. 65535) o bien la palabra clave REL.
-----------------------------------------------------------------------------------------------------------------------------
- 34 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Esta opción se suele utilizar cuando el programa se compone de varios
módulos (listados fuente), uno de ellos, el primero indica una dirección real y los demás
listados son relativos al primero, esto es, posteriormente el enlazador los colocará en
orden justo al final del primero, el que define la dirección.
Para eludir problemas de este tipo utilice saltos de 16 bits, cuyo único
inconveniente respecto a los de 11 es que su instrucción consume 1 byte más. Un
problema pequeño si se dispone de memoria suficiente.
Cada listado con código debe contener una y solo una directiva tipo .text_org
la cual debe estar situada antes de la primera linea con código ejecutable. Ejemplos:
.end
Esta directiva indica fin de listado, de forma que todo lo que haya escrito
después de esta directiva será ignorado. Todos los listados a ensamblar, deben terminar
siempre con una directiva end, por ejemplo:
.text_org $8000
inicio:
sjmp inicio ;Salta hasta el infinito a inicio
;sin hacer nada
A Q U I P U E D E H A B E R C U A L Q U I E R C O S A
.ds.b
-----------------------------------------------------------------------------------------------------------------------------
- 35 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Esta directiva indica al ensamblador que debe reservar un número de espacios,
esto es, no generar ningún tipo de código. Si los espacios son reservados en el segmento
de texto (vea .text_org) los espacios reservados se dejan con el valor inicial $FF, que es
el valor con el que están rellenas las EPROMs vírgenes. Por ejemplo la directiva .ds.b 5
reserva 5 bytes de código, por ejemplo:
.text_org $8000
inicio:
mov A,B ;Está en la dirección $8000
mov B,A ;Está en la dirección $8001
Esta directiva también puede emplearse para forzar a las funciones que
comiencen en una dirección determinada. Para ello deberá ayudarse de la etiqueta ! que
representa la posición actual del programa, por ejemplo:
.text_org $8000
inicio:
mov A,B ;Está en la dirección $8000
clr A ;Está en la dirección $8001
subrutina:
add A,B ;Está en la dirección $8100
ret ;Está en la dirección $8101
Gracias a ello es posible ubicar rutinas en posiciones fijas, que luego pueden
ser llamadas directamente. Por ejemplo cuando se meten rutinas en una EPROM.
.ds.w
.ds.f
Esta nueva directiva ha sido añadida en la versión 3.00 con el fin de permitir
reservar espacio para variables y constantes en formato flotante FFP de Motorola. Cada
elemento flotante ocupa 4 bytes (2 palabras tipo word).
.dc.b
-----------------------------------------------------------------------------------------------------------------------------
- 36 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Esta directiva define un número determinado de bytes con un contenido. Para
ello después de la directiva deben colocarse una lista de valores. Estos pueden ser
números decimales, hexadecimales, caracteres y cadenas, por ejemplo:
.text_org $9000
.dc.b $1B, 'E', "ABC", 10, 13, 0
Esta directiva es útil para incluir dentro del código del programa tablas de
datos que pueden fácilmente leídas con las instrucciones MOVC, o por la instrucción
MOVX si se utiliza una configuración NEWMAN en lugar de HARVARD, esto es que
la memoria de programa y datos coinciden..
.dc.w
.dc.f
Una nueva directiva similar a las anteriores que permite definir números en
coma flotante (formato FFP de Motorola). Estos números se componen de una mantisa
de 24 bits, un bit de signo y un exponente de 7 bits ordenados según el siguiente cuadro:
Los símbolos bx representan el bit x del número flotante de 32 bits. Los bits b0
.. b6 representan el exponente, S (b7) representa el signo. Si este es 0 el valor flotante es
positivo ó 0, si S es 1 el valor flotante es negativo.
- 37 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
$33 byte de signo y exponente
La posición de memoria más baja contiene el byte alto, y la posición más alta
contiene el byte de signo/exponente.
V = M * 2 (E-88)
.var_org
Esta directiva indica que las líneas que le siguen son variables. Esto es, se
utiliza para etiquetar y definir áreas de la memoria. Existen dos posibilidades, definir
variables en la memoria RAM interna de la CPU o dentro del código del programa.
Para ello puede ayudarse de las directivas ds.b, ds.w y ds.f descritas
anteriormente, por ejemplo:
;Ejemplo de var_org
variable1:
.ds.b 1 ;Define un byte para variable 1
otra:
.ds.b 1 ;Otra variable
.var_org $9000
matriz:
.ds.b $100 ;Reserva los bytes $9000 a $90FF
carga:
.ds.b 2 ;Reserva los bytes $9100 a $9101
texto:
.ds.b "Un texto",0 ;Define un texto en $9102
.text_org $8000
-----------------------------------------------------------------------------------------------------------------------------
- 38 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
inicio:
mov DPTR,matriz ;Hace que DPTR apunte a la matriz
bucle:
mov SP, pila ;Indica al sistema el comienzo
;de la pila
mov variable1,B ;Pone el contenido de B en
;variable 1
mov A, otra ;Mete el contenido del acumulador
;en otra
movx @DPTR,A ;Mete A en la matriz
inc DPTR ;Incrementa puntero a la matriz
djnz otra, bucle ;Decrementa otra y salta a bucle
;hasta que otra contenga un cero.
Si inicializa valores en la memoria externa debe tener presente que existen dos
bancos en principio independientes, la memoria de programa y la memoria de datos. La
memoria de programa solo puede ser leída con movc, mientras que la memoria de datos
solo puede ser leída con movx. En los equipos ALTAIR los 32 Kbytes de memoria
superiores (SRAM) actúan al mismo tiempo como memoria externa de datos y como
memoria externa de programa.
.hide
- 39 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
.show
Esta directiva indica al ensamblador que debe volver a incluir el código fuente
dentro del fichero objeto que genera. Un ejemplo podría ser:
inicio:
;
; Programa normal
;
.hide
secreto:
;
; Subrutina sujeta a Copyright
; o comentarios que sobran
;
.show
visto:
;
; Esta parte aparece de nuevo.
;
.global
Con .global se definen las etiquetas que deben ser globales, esto es, que pueden
ser accedidas desde otros módulos. Esta directiva va seguida de una lista de etiquetas
separadas por comas, por ejemplo:
- 40 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
aceptar que el LCD está conectado a cualquier puerto. El módulo que la llame deberá
definir el puerto donde se halla el LCD con una directiva tipo EQU.
extern
.hide
inicio:
ljmp principal
.show
Este ejemplo arranca en una posición que dependerá de otro módulo que no sea
relativo. Se ejecutará a partir de una etiqueta inicio que será llamada desde otro módulo,
ajusta la pila con una variable definida en otro módulo y salta a la función principal
definida en otro módulo. Este otro módulo podría ser:
principal:
;Posición llamada desde el otro módulo
.end
-----------------------------------------------------------------------------------------------------------------------------
- 41 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Ambos listados se ensamblarán por separado y posteriormente será el
encadenador el que genere un fichero ejecutable que incluya a ambos. Observe que solo
se incluye el listado fuente del segundo ya que el primero está oculto (se utilizó una
directiva .hide).
.equ
Estas dos lineas definen las etiquetas P1 y CLKOUT. Estas se pueden utilizar
ahora para facilitar el acceso al puerto P1 y a la patilla CLKOUT, por ejemplo:
inicio:
mov P1,A ;Saca por el puerto P1 el acumulador
bucle:
clr CLKOUT ;Pone P1.6 a nivel bajo
nop ;Espera un ciclo
nop ;Espera otro ciclo
setb CLKOUT ;Activa P1.6
Este programa genera una frecuencia por el pin 6 del puerto P1. Si no
dispusiéramos de la posibilidad de definir valores de etiquetas escribir este programa
sería menos nmotécnico:
inicio:
mov $90,A ;Carga en el SFR $90 el acumulador
bucle:
clr $96 ;Pone el bit $96 a nivel bajo
nop ;Espera un ciclo
nop ;Espera otro ciclo
setb $96 ;Activa el bit $96
Ambos programas son equivalentes. La directiva equ puede ser sustituida por
el signo =, por ejemplo:
P1 = $90
CLKOUT = P1.6
.include
- 42 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
.include C:\ALTAIR\FUENTES\REG517.DEF
.include C:\ALTAIR\MACROS\16BITS.DEF
.includeb
Esta directiva permite incluir dentro del código una imagen binaria de un
fichero. Gracias a ello es posible lincar en aplicaciones el sistema operativo que
comienza en la dirección $7000. Para ello basta crear un módulo fuente con el siguiente
contenido:
.text_org $7000
.includeb ..\EPROMS\OS515.BIN ;o OS51.BIN si debe
;estar en un 80C31
.end
Se podría decir por tanto que la directiva .includeb es similar a .include, con la
diferencia que .la primera incluye ficheros ASCII al fuente (previo ensamblador) y la
segunda incluye ficheros binarios al objeto (previo encadenador).
.macro
.endm
Se pueden definir hasta 256 macros por fichero. Se pueden anidar las llamadas
a macros unas dentro de otras hasta el mismo límite de la anidación de ficheros .include,
teniendo en cuenta que cada macro es equivalente a un include. Por ejemplo:
.macro suma
mov A,@0
add A,@1
.endm
suma #5,#10
-----------------------------------------------------------------------------------------------------------------------------
- 43 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Lo que se expandirá al ensamblar a:
mov A,#5
mov A,#10
Las macros pueden tener salto locales que no se interferirán con los saltos del
programa principal, por ejemplo:
.include C\ALTAIR\FUENTES\REG51.DEF
.macro espera
mov DPTR,#@0
bucle:
djnz DPL,bucle
djnz DPH,bucle
.endm
.text_org $8000
bucle:
espera 25000 ;espera 25000 ciclos
cpl P3.5 ;invierte estado del LED
espera 10000 ;espera 10000 ciclos
cpl P3.5 ;invierte estado del LED
sjmp bucle ;salta a bucle
.include C\ALTAIR\FUENTES\REG51.DEF
.macro espera
.endm
.text_org $8000
bucle:
mov DPTR,#25000
bucle0:
djnz DPL,bucle0
djnz DPH,bucle0
mov DPTR,#10000
bucle1:
djnz DPL,bucle1
djnz DPH,bucle1
.if
.else
.endif
-----------------------------------------------------------------------------------------------------------------------------
- 44 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Se han añadido estas directivas que permiten ensamblar partes del fuente si se
cumplen determinadas condiciones. Estas directivas de ensamblador, al igual que todas
las demás, no están presentes en el código objeto y no son interpretadas por el
microprocesador, sino por el propio ensamblador.
Se suelen utilizar para poder generar a partir de un único listado varios ficheros
objeto diferentes, por ejemplo imagínese que parte o partes del listado cambian según
sean los siguientes parámetros:
Para ello deberá definir una serie de etiquetas de una forma como la que sigue:
;
; Si la etiqueta EPROM es 0 el programa estará en SRAM si 1
; es 1 estará en la EPROM, si la etiqueta WATCHDOG es 1 se
; activará el WATCHDOG, si es 0 no se activará, si la
; etiqueta DEMO es 1 se generará una versión limitada del
; programa si es 0 se generará una versión completa.
EPROM = 0
WATCHDOG = 0
DEMO = 0
.if EPROM
.text_org $0000
.else
.text_org $8000
.endif
.include \ALTAIR\FUENTES\REG515.DEF
.if WATCHDOG
.endif
- 45 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Expresiones
Las expresiones pueden incluirse también en directivas del tipo .if, para
realizar ensamblado condicional complejo, como por ejemplo:
.else
.endif
Por ejemplo:
tabla=$1234
-----------------------------------------------------------------------------------------------------------------------------
- 46 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Será equivalente a:
Las calificadas "normales" actúan con dos valores, verdadero y falso, un valor
cualquiera distinto de cero es verdadero y un valor cero es falso, por el contrario las
operaciones bit a bit actúan individualmente sobre cada uno de los bits de los
operandos, por ejemplo:
Como norma general se deben utilizar las operaciones lógicas normales cuando
escribe una expresión condicional para una directiva tipo .if, y las operaciones bit a bit
cuando calcula máscaras o bits. Por ejemplo puede utilizar al activar interrupciones:
- 47 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
WDT = IEN0.6
ET2 = IEN0.5
ES = IEN0.4
ET1 = IEN0.3
EX1 = IEN0.2
ET0 = IEN0.1
EX0 = IEN0.0
-----------------------------------------------------------------------------------------------------------------------------
- 48 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Nuestro ensamblador puede aceptar cualquier terminación, por lo que esta debe
ser indicada siempre.
asm51 A:\FUENTES\EJEMPLO.S51
asm51 ..\EJEMPLO.S51
asm51 C:EJEMPLO.S51
asm51 EJEMPLO.S51
Por ejemplo:
A partir del fichero fuente el ensamblador generará varios ficheros los cuales
contienen diferentes informaciones. Estos ficheros tienen el mismo nombre que el
fichero fuente, pero un apellido propio que los identifica *.O51, *.LST, *.ERR.
; *********************************************************
; *
; * Listado 8.1
; *
; * Programa que enciende y apaga un LED conectado en P3.5
; * Normalmente es el LED de la placa madre, aunque el
; * usuario puede conectar otro externo a P3.5 o a otro
; * puerto. Si conecta un LED externo a P3.5 utilizando
; * esquema 8.1 El LED de la placa madre se encenderá
; * cuando el LED externo se apague y viceversa. (El LED de
; * la placa dispone de un inversor)
-----------------------------------------------------------------------------------------------------------------------------
- 49 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
; *
; *********************************************************
.include ..\reg51.def
.text_org $8000
inicio:
mov DPTR,#10000 ;Carga la frecuencia de parpadeo
;en DPTR
cpl LED ;Invierte el estado del LED
?in1:
djnz DPL,?in1 ;Repite bucle para byte bajo
djnz DPH,?in1 ;Repite bucle para byte alto
.end
Tabla de etiquetas
Nombre Valor Tipo etiq. Linea def. Módulo
P0 = 128 5 3 1
SP = 129 5 4 1
DPL = 130 5 5 1
DPH = 131 5 6 1
PCON = 135 5 7 1
TCON = 136 5 8 1
TMOD = 137 5 9 1
TL0 = 138 5 10 1
TL1 = 139 5 11 1
TH0 = 140 5 12 1
TH1 = 141 5 13 1
P1 = 144 5 14 1
SCON = 152 5 15 1
SBUF = 153 5 16 1
P2 = 160 5 17 1
-----------------------------------------------------------------------------------------------------------------------------
- 50 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
IE = 168 5 18 1
P3 = 176 5 19 1
IP = 184 5 20 1
PSW = 208 5 21 1
OV = 210 5 22 1
ACC = 224 5 23 1
B = 240 5 24 1
LED = 181 5 19 0
INICIO = 32768 1 21 0
?IN1 = 32773 1 24 0
Tabla de apariciones
Nombre Valor Tipo externo
Tabla de reubicaciones
Nombre Direcc. Tipo externo
Errores generados
No error
Etiqueta no definida
Argumento 1 no interpretable
Argumento 2 no interpretable
Argumento 3 no interpretable
Error de entrada/salida
-----------------------------------------------------------------------------------------------------------------------------
- 51 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Se ha producido un error en el acceso del disco. Probablemente este esté lleno.
Argumento 1 incorrecto
Argumento 2 incorrecto
Argumento 3 incorrecto
Error indefinido
Etiqueta ya definida
- 52 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Error que se produce cuando intenta definir una macro demasiado extensa, el
tamaño máximo de una macro sin expandir es de 8 Kbytes, unos 8192 caracteres.
Intentó anidar dos directivas if, esto es, el ensamblador detecto un segundo .if
sin haber previamente detectado el .endif del anterior. Si requiere utilizar este tipo de
directivas pruebe a sustituirlas por expresiones más complejas.
Se detectó una directiva del tipo .endif sin haber hallado primero la directiva .if
correspondiente.
Caso opuesto al anterior, se detectó una directiva del tipo .if sin detectar hasta
al final del listado una del tipo .endif.
Se omitió al final del módulo la directiva .end Este error es el más sencillo de
solventar, para ello simplemente escríbalo. Tome la precaución de poner un <Return>
después de la directiva.
Argumento no interpretable
-----------------------------------------------------------------------------------------------------------------------------
- 53 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
En esta versión del ensamblador se hace una diferencia importante en los
errores producidos en las macros. Estos errores pueden producirse por una utilización
incorrecta de la macro o bien por error en el código de la macro, por ejemplo:
.macro suma
add @0,@1
.endm
suma B,A
Al expandirse creará:
add B,A
.macro suma
ad @0,@1
.endm
suma A,B
Al expandirse creará:
ad B,A
7 El enlazador
-----------------------------------------------------------------------------------------------------------------------------
- 54 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
E51. Opcionalmente si lo desea puede especificar el nombre del fichero ejecutable
incluyéndolo en la lista de parámetros, por ejemplo:
Etiqueta no reubicable
8 El depurador
-----------------------------------------------------------------------------------------------------------------------------
- 55 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Donde ejecutable es el nombre del fichero ejecutable que debe depurarse, debe
ser del tipo *.E51 generado por nuestro ensamblador.
Por último prioridad es la prioridad que deben tener las interrupciones del
"trace". Estas prioridades pueden ser 0, 1, 2 y 3. Para más información acerca de su
significado consulte el capítulo 4 del manual ALTAIR. Por tanto son parámetros válidos
-p0 a -p3.
Se han añadido dos parámetros nuevos que solo cobran sentido cuando
ejecutable es un fichero INTEL HEX. Estos parámetros son dirección y offset.
-----------------------------------------------------------------------------------------------------------------------------
- 56 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
El parámetro dirección indica al depurador que dirección debe comenzar a
ejecutar, por ejemplo -E$9000 indica que el programa comienza en la dirección $9000.
Fuente
Con ayuda del cursor, pág. siguiente y pág. anterior puede mirar el código
fuente hacia adelante o hacia atrás. Incluso puede pasar de un módulo a otro si estuviese
depurando un proyecto con varios módulos o bien pasar a porciones de memoria no
pertenecientes al proyecto. (por ejemplo la EPROM con el sistema operativo ALTAIR).
-----------------------------------------------------------------------------------------------------------------------------
- 57 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
<S> Salta una instrucción sin ejecutarla. Literalmente pone el contador de
programa apuntando a la siguiente instrucción.
<B> Sirve para poner o quitar puntos de ruptura. Una linea o dirección con
punto de ruptura será reflejada en pantalla mediante una franja roja. El depurador 8051
v.3.00 acepta un máximo de 8 puntos de ruptura y estos deben estar separados entre si al
menos por tres direcciones de memoria.
bucle:
inc A
lcall comprueba
sjmp bucle
comprueba:
cjne A,#12,siguiente
.
.
-----------------------------------------------------------------------------------------------------------------------------
- 58 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
bucle:
inc A
lcall comprueba
sjmp bucle
nop
comprueba:
cjne A,#12,siguiente
.
.
<T> Ejecuta el programa en modo trace, esto es, de forma lenta, mostrando
después de ejecutar cada instrucción el contenido de todos los registros presentes en la
pantalla del depurador.
<P> Con este opción puede desensamblar una zona de la memoria sobre
disco, por ejemplo el sistema operativo ALTAIR que comienza en la dirección $7000 y
que tiene una longitud de $1000 bytes (4 Kbytes).
<F> Permite indicar si desea que el depurador muestre etiquetas en las áreas
desensambladas o no. Estas etiquetas del desensamblador son generadas de forma
automática a partir de su dirección física.
Registros
Si se sitúa sobre esta ventana podrá fácilmente modificar un registro. Para ello
sitúese sobre él con ayuda de las teclas del cursor. Una vez que esté sobre él pulse la
tecla <Return> con lo que podrá asignarle su nuevo valor.
-----------------------------------------------------------------------------------------------------------------------------
- 59 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
El valor del registro SP mostrado en pantalla hace siempre referencia a la pila
de la aplicación de usuario, pero siempre hay 8 bytes más, por lo que la pila del sistema
es la del usuario más 8 bytes. Por ello debe dejar en la pila un espacio de al menos 10
bytes para el depurador. Normalmente no deberá tener en cuenta este dato pudiendo
considerar la pila mostrada como correcta.
Variables
Para añadir un elemento a esta lista deberá pulsar la tecla <Insert> y para
borrar un elemento deberá posicionarse sobre él y pulsar <Del>.
Los elementos que puede añadir son variables definidas por etiquetas y
posiciones de memoria, que deben teclearse de la siguiente forma:
[n_elementos][@]etiqueta
Esta forma permite ver la dirección en que se halla una rutina, o bien el
contenido o dirección de un registro. El número de elementos especifica cuantos bytes
desea ver, por ejemplo:
[n_elementos]@(dirección)
-----------------------------------------------------------------------------------------------------------------------------
- 60 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
8@($00) ;Mostrará el contenido de los primeros 8 bytes
de
;la memoria interna, esto es los registros R0 ..
;R7 del banco 0
8@($0000) ;Mostrará el contenido de los primeros 8 bytes
;de la memoria externa
2@($FFFE) ;Mostrará los bytes contenidos en $FFFE y $FFFF
;por lo que podrá averiguar si el programa
;está residente
;o no, dependiendo si contiene $ABCD ó $CDEF u
;otro valor cualquiera.
En el área de variables también puede ver si lo desea los 8 últimos bytes que
contiene la pila de usuario. Estos se mostrarán en el orden en que pueden volver a ser
extraídos.
Por último queda por decir que puede salir en cualquier momento del
depurador pulsando la tecla <ESC>. El programa cargado en el micro quedará en el
estado anterior, esto es, si se ejecutó seguirá ejecutándose y si estaba parado, seguirá
parado.
9 Editor de memoria
Aunque sea parte del depurador, debido a la gran cantidad de opciones que
dispone, es considerado a efectos de manual como si se tratase de un programa aparte.
Se puede acceder a este programa en cualquier momento desde el depurador de
memoria pulsando la tecla <M>.
-----------------------------------------------------------------------------------------------------------------------------
- 61 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
EDITA
Con esta opción entra de lleno en el editor propiamente dicho. Una vez dentro
puede alterar el contenido mediante el teclado.
Las teclas del cursor, pagina anterior, pagina siguiente, primera posición,
última posición, inicio y fin funcionan en el modo habitual de estos programas.
IR A
COPIA
Con esta opción puede copiar un bloque de memoria dentro del buffer del
editor. Para ello debe indicarle al programa la dirección de origen a copiar, la dirección
de destino y el número de bytes que desea copiar. Vea la figura Q.
MUEVE
IMPRIME
Esta opción permite imprimir el buffer del editor o parte de él sobre una
impresora. Dado que el programador de EPROMs se conecta al mismo puerto que la
impresora puede existir algún problema que se soluciona añadiendo un segundo puerto
paralelo (LPT2) y conectando la impresora a él.
-----------------------------------------------------------------------------------------------------------------------------
- 62 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Dado que el puerto paralelo que maneja una impresora no tiene porque ser
rápido ni es necesaria ninguna característica extraña lo más razonable es comprar la
tarjeta MULTI I/O más barata, deshabilitar controladora de disco duro, floppy y puertos
serie y dejar solamente el puerto paralelo como LPT2. Si lo precisa puede configurar los
puertos serie como COM3 y COM4.
ASCII
Esta opción es muy interesante para eliminar basura de la pantalla del editor.
En el editor se presentan dos partes, una de ellas la de la izquierda se muestra el
contenido en hexadecimal del buffer, mientras que en la otra se muestra el contenido en
formato ASCII.
Si usted desea ver solamente los textos que pudiese contener la memoria al
seleccionar esta opción se presentarán solamente los caracteres ASCII (entre el 32 y el
128). Para deseleccionar este modo simplemente vuelva a seleccionar la opción ASCII.
RELLENA
Esta opción permite rellenar parte o todo el buffer del editor con un patrón.
Para ello le aparecerá en pantalla un cuadro de diálogo en el que debe teclear la
dirección inicial que desea rellenar, el número de bytes y el byte patrón. Dicho cuadro
es mostrado en la figura T.
BUSCA
Con esta opción puede buscar dentro del buffer una cadena alfanumérica
ASCII (un texto) o bien una cadena hexadecimal (una subrutina o una tabla).
Una vez seleccionada la opción aparecerá un cuadro de diálogo con dos lineas
editables. Vea la figura U. En la primera puede teclear la cadena ASCII que desea
buscar y en la segunda la cadena hexadecimal. Debe teclear texto en solo una de ellas.
El texto hexadecimal debe ser escrito de forma que cada dos cifras
hexadecimales (byte) haya un espacio separador.
SIGUIENTE
Esta opción repite la búsqueda pedida con la opción anterior sin presentar de
nuevo el cuadro diálogo. Esta opción es útil por si se repitieran varias veces la misma
cadena y no se deseara la primera de ellas.
-----------------------------------------------------------------------------------------------------------------------------
- 63 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
MEMORIA
Con esta opción usted puede seleccionar el tipo de memoria que desea editar.
Al seleccionarla le aparecerá en pantalla una ventana, mostrada en la figura W, que
permite seleccionar entre memoria externa de datos, interna directa y externa indirecta.
10 Programa ejecutor
Estos ficheros ejecutables pueden ser del tipo *.E51 generados por nuestro KIT
de desarrollo, o bien del tipo *.HEX (INTEL HEX) generados por otro sistema.
Imagine que dispone del siguiente fichero INTEL HEX que ha sido generado
por un compilador de C ajeno a IBERCOMP:
:08904100C180010900010800D3
:03000B0002900060
:10900000C0E0C0D0C28C758C4B758AFFB2003000B6
:10901000020509E509B40A07B2B5E4F5090508D265
:069020008CD0D0D0E0323C
:10902600438901758C4B758AFFD2A9D2AFD28CE5E4
:0B90360008C3941440F9C28C80FE2295
:0300000002904A21
:0C904A00787FE4F6D8FD7581200290913B
:10905600029026E493A3F8E493A34003F68001F27A
:1090660008DFF48029E493A3F85407240CC8C3331B
:10907600C4540F4420C8834004F456800146F6DFEA
:10908600E4800B0102040810204080909041E47EA9
:10909600019360BCA3FF543F30E509541FFEE493DF
:1090A600A360010ECF54C025E060A840B8E493A3A6
-----------------------------------------------------------------------------------------------------------------------------
- 64 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
:1090B600FAE493A3F8E493A3C8C582C8CAC583CAD1
:1090C600F0A3C8C582C8CAC583CADFE9DEE780BE89
:019049000026
:00000001FF
11 Conversor a binario
Se trata de un programa que obtiene un fichero binario del código objeto del
proyecto a partir del fichero ejecutable. Este fichero binario puede ser utilizado, por
ejemplo, para programar una EPROM con aplicación residente.
- 65 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
ellas dispondrá de los 16 primeros K de memoria y la segunda de los últimos 11 K. El
espacio no utilizado de la segunda EPROM será rellenado con el carácter $FF.
Si usted desea una única EPROM de 32 Kbytes (caso estándar en los equipos
ALTAIR) deberá teclear el comando bin51 con los parámetros que siguen:
por ejemplo:
binhex sirena.bin
binhex sirena.bin -o$8000
- 66 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
14 Cargador de EEPROMs
eeprom51 binario -v
eeprom51 eprom537.bin
Este programa tan solo requiere de dos parámetros opcionales, el puerto serie
en el cual está conectado el microcontrolador y la velocidad seleccionada en él. El
puerto por defecto es el COM2 y la velocidad por defecto es de 9600 baudios.
reset51
reset51 -c1
reset51 -c1 -b28800
-----------------------------------------------------------------------------------------------------------------------------
- 67 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
El primer comando resetea un microcontrolador conectado a COM2 y a 9600
baudios (valores por defecto), el segundo resetea un controlador conectado a COM1 a
9600 baudios y el tercer comando resetea un microcontrolador conectado a COM1 a
28800 baudios.
16 Testeador de la memoria
test51
test51 -c1
test51 -c1 -b4800
Al igual que en otros programas, el puerto serie por defecto es el COM2 a una
velocidad de 9600 baudios. Por tanto la primera linea ejemplo testeará un
microcontrolador en COM2 a 9600 baudios, la segunda en COM1 a 9600 baudios y la
tercera en COM1 a 4800 baudios.
17 Desensamblador
Jeffery L. Post
22726 Benner Ave
Torrance
CA 90505
Estados Unidos
-----------------------------------------------------------------------------------------------------------------------------
- 68 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
ocasiones puede ser útil extraer de otra persona una rutina o la idea de un algoritmo.
Para ello es indispensable un desensamblador.
18 Terminal
Este programa tal y como índica el título es una terminal "tonta" para PC. Su
función es enviar al puerto serie los caracteres tecleados e imprimir por pantalla los
caracteres recibidos.
term51
term51 -c1 -v9600
Una vez ejecutado el programa cualquier tecla que pulse en el teclado será
enviada al puerto serie, y cualquier carácter que reciba será mostrado en pantalla. Si
desea salir del programa deberá pulsar dos veces seguidas la tecla <ESC>.
-----------------------------------------------------------------------------------------------------------------------------
- 69 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Dicho de otro modo, cuando pulsa <ALT R> y el PC emite un pitido indica
que se ha habilitado el modo HALF DUPLEX, por lo cualquier tecla pulsada además de
ser enviada al puerto serie será enviada a la pantalla. Si se pulsa <ALT R> y el PC no
emite ningún pitido, una de dos o el sistema altavoz está dañado, o bien se ha habilitado
el modo FULL DUPLEX, por el cual las teclas pulsadas solamente se envían al puerto
RS232c.
Este programa es útil para observar cuales son los datos que envía el
microcontrolador. Funciona correctamente entre dos PC conectados por el puerto serie.
En la última versión del programa terminal se añadió una opción que permite
que el programa actúe como un terminal VT52. A dicho modo se accede pulsando
<ALT C>. Cuando se está en dicho modo ser interpretan las siguientes secuencias:
Esta secuencia mueve el cursor una linea hacia abajo. Esta secuencia
no es interpretada si el cursor ya está en la última linea.
-----------------------------------------------------------------------------------------------------------------------------
- 70 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
ESC I Invierte el Indice
Inserta una linea en blanco en la posición del cursor. Para ello baja
una posición todas las líneas que están por debajo del cursor, y
también la del cursor. De modo que al final de la operación la linea
del cursor está en blanco. Como es lógico, el contenido de la última
linea de la pantalla se pierde.
Borra la linea donde está el cursor y sube una posición todas las
líneas que se encuentra debajo de él. La última linea de la pantalla
es rellenada con una linea blanca.
-----------------------------------------------------------------------------------------------------------------------------
- 71 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Esta secuencia selecciona el color de fondo. Esta debe ser seguida
por un carácter que indica el número del color de fondo. Este
carácter tiene el mismo formato que el de la secuencia anterior.
Con esta secuencia se habilita el cursor, esto es, se obliga a que éste
aparezca parpadeando en pantalla.
Con esta secuencia los caracteres son impresos con el color del
fondo y el fondo con el color del carácter.
-----------------------------------------------------------------------------------------------------------------------------
- 72 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
ESC v Habilita el modo de corte
Estas rutinas son las mismas que hemos utilizado en nuestros programas
RESET51.EXE, DEPURA51.EXE, EJECUTA51.EXE y TEST51.EXE.
Las rutinas aquí propuestas acceden directamente al hardware del PC, enviando
y leyendo datos directamente de los registros del hardware. Con ayuda de una
interrupción guarda los datos en buffer de tamaño definible. Otra de las ventajas de
-----------------------------------------------------------------------------------------------------------------------------
- 73 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
nuestras rutinas es la posibilidad de trabajar a velocidades no estándares como por
ejemplo 115 Kbaudios.
void inicia_rs232c(com_nr,baudrate)
int com_nr;
long baudrate;
Esta función inicializa el puerto serie. Para ello debe pasarse en com_nr el
puerto que se desea utilizar, este puede ser 1 para COM1 y 2 para COM2. El segundo
parámetro, baudrate, indica la velocidad a la que debe ponerse el puerto serie, esta
velocidad debe estar comprendida entre 1L y 115200L baudios.
115200
baudrate =
divisor
Donde divisor es un número entero entre 1 y 65535. Por tanto las frecuencias
altas posibles son: 115200, 57600, 38400, 28800, 23040, 19200, ... Estas frecuencias no
coinciden con las que pueden obtener los equipos ALTAIR equipados con un reloj de
12 MHz, por lo que la velocidad de comunicación máxima en principio es de 9600
baudios.
void termina_rs232c(void)
-----------------------------------------------------------------------------------------------------------------------------
- 74 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
También debe ser llamada antes de la segunda y siguientes inicializaciones del
puerto serie. De no hacerlo así, el sistema se colgará irremediablemente cuando el
programa salga al MSDOS y se cargue desde allí otra aplicación cualquiera.
void envia_rs232c(obyte)
unsigned char obyte:
Esta rutina envía un carácter por el puerto serie. El carácter a enviar debe ser
pasado en el parámetro obyte.
int recibe_rs232c(void)
int estado_rs232c(void)
Esta rutina envía un bloque de datos de longitud len, apuntado por source
precedido de un byte de cabecera dado por typ y seguido por un carácter de
comprobación o checksum. Este carácter de comprobación es calculado
automáticamente por la rutina.
-----------------------------------------------------------------------------------------------------------------------------
- 75 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
Esta función recibe un bloque de longitud len y lo guarda en la dirección
apuntada por dest. El bloque recibido debe tener el mismo formato que el bloque que
envía la rutina descrita anteriormente.
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h> /* getvect()... */
#define BIN_READ "rb"
/*****************************************************************************
*
* Manejador de puerto serie PC
*
* Información de los registros del PC-SIO ej eb: C t 5/88 p†g. 204
*
* Fecha : 10. 12. 1992
-----------------------------------------------------------------------------------------------------------------------------
- 76 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
* Compilador : Borland C++ 3.1
*
* Recepción por interrupciones, escritura directa al SIO.
*
*****************************************************************************/
-----------------------------------------------------------------------------------------------------------------------------
- 77 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
uchar tx_fcs=0; /* byte de comprobación checksum */
int i;
while(len--){
while(!(inportb(com+LSR) & 32)); /* Espera que se halla enviado el byte
antiguo */
outportb(com,*source); /**** Envia un caracter ****/
tx_fcs += *source++; /* Incrementa el contador del checksum
*/
}
while(!(inportb(com+LSR) & 32)); /* Espera a que se halla enviado el
byte */
outportb(com,tx_fcs); /* Emite la suma */
}
/******* Leer
*********************************************************************/
if(!estado_rs232c()){
klick_cnt=TIMEOUT;
do{
if(klick_cnt<0) return -1; /* -1 Timeout */
}while(!estado_rs232c()); /* Espera mientras no haya nada */
}
ibyte=ser_rx_buf[ser_routx++]; /* Recoge un caracter */
ser_routx &= (RX_BUF_SIZE-1); /* Calculado el modulo del buffer */
return ibyte; /* Devuelve caracter leido */
}
while(len--){
if((inp=recibe_rs232c())<0) return -3; /* -3: Timeout - en datos */
rx_fcs+=(uchar)inp; /* FCS incrementa checksum */
*dest++=(uchar)inp; /* guarda en posicion */
}
if((inp=recibe_rs232c())<0) return -4; /* -4: Timeout checksum */
if(rx_fcs!=(uchar)inp) return -5; /* -5: ERROR checksum */
return 0; /* Al final OK! */
-----------------------------------------------------------------------------------------------------------------------------
- 78 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
}
if(com_nr<1 || com_nr>2){
puts("\007*** Error: Número del puerto serie incorrecto");
exit(-1);
}
if(baudrate>115200L || baudrate<1L){
printf("\007*** Error: ¡No es posible seleccionar %ld
baudios!\n",baudrate);
exit(-1);
}
-----------------------------------------------------------------------------------------------------------------------------
- 79 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
El otro extremo debe haber un cable que encaje en su ordenador personal.
Existen dos posibilidades estándares, una de ellas que el PC disponga de un conector
serie DB9 macho idéntico al del ALTAIR en cuyo caso deberá tener en el otro extremo
del cable un conector DB9 hembra. Vea la figura superior.
El cable DB9 > DB9 debe ser simétrico, esto es, cualquier extremo debe
poderse conectar al PC o al ALTAIR indistintamente. Por el otro lado el cable DB9 >
DB25 tiene posiciones fijas, el lado DB9 al microcontrolador y el DB25 al PC.
DB9
RS232c 9 pines
Normalmente COM1
5 5
3 3
2 2
5: TIERRA
3: TxD
2: RxD
DB25
RS232c 25 pines
Normalmente COM2
1: TIERRA 5: TIERRA
7 7: TIERRA 3: TxD
2: TxD 2: RxD
3: RxD 5
3 3
2 2
1
Es un formato poco óptimo en cuanto al espacio que ocupa, pero que tiene dos
ventajas frente a otros formatos:
-----------------------------------------------------------------------------------------------------------------------------
- 80 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
XX = Son los datos que contiene dicha linea. Cada dato se compone de dos
caracteres que representan un byte en hexadecimal.
:019049000026
:00000001FF
-----------------------------------------------------------------------------------------------------------------------------
- 81 -
(C) 1994,99 Ibercomp S.A.
--------------------------------------------------------------------------------------------------------
DDDD = 0000 Dirección puesta a cero (ignorada en cualquier caso por no
haber datos).
CC = 01 Indica que se trata de final de fichero
XX La linea carece de caracteres de este tipo
SS = FF checksum de la linea $00 - $01
-----------------------------------------------------------------------------------------------------------------------------
- 82 -