Académique Documents
Professionnel Documents
Culture Documents
La tecnología CISC esta constituida por un set de instrucciones completo de 128 comandos
con los cuales podemos programar nuestro microcontrolador teniendo gran variedad de
comandos que de acuerdo al microcontrolador que usemos pueden cambiarse los nombres
de la instrucciones por Ej. En el HC05 tenemos la instrucción LDA mientras que en HC11
la misma instrucción se llama LDAA, mientras que en la tecnología Risk tenemos solo 64
comandos. Los cuales al ser reducidos nos permiten acelerar el tiempo de programación
pero no contamos con todas las ventajas de un set de instrucciones completo.
Si en cambio programásemos un microcontrolador en lenguaje C no nos deberíamos
preocupar por que set estemos usando o que microcontrolador estemos usando ya que el
compilador que tendríamos pasaría la información a assembler con la desventaja que el
programa seria mas lento y ocuparía sin duda mayor espacio en el microcontrolador , lo que
debemos tener en cuenta al usar este proceso es de tener el interprete del lenguaje C a
nuestro microcontrolador especifico así este podrá configurar correctamente los registros
pasándolo de C a assembler y luego código de maquina o Assembler Ensamblado
Memorias
La memoria RAM (Random Acces Memory) es una memoria de almacénenlo volátil que se
destaca por su rapidez en velocidad de escritura y lectura de datos, pueden ser accedidas en
cualquier orden, esta es la memoria de trabajo del microcontrolador es aquí donde
resuelven quedan los distintos resultados de las operaciones y cuando se apaga el
microcontrolador la memoria es borrada, estas memorias generalmente están constituidas
por capacitores los cuales se deben refrescar cada una x cantidad de tiempo para no perder
sus datos.
MEMORIA ROM
La memoria ROM (Read Only memory) como lo dice su nombre es una memoria de solo
lectura y la información debe ser provista al fabricante antes de que el circuito integrado
que la contendrá sea fabricado. Cuando finalmente se use en el microcontrolador, esta
información podrá ser leída por la CPU pero no-cambiada. En la ROM es donde se aloja el
programa que nosotros diseñamos para el microcontrolador.
La Prom. Es similar a una ROM excepto que es posible programarla con posterioridad a la
fabricación del circuito integrado. Algunas de sus variantes son la PROM borrable
(EPROM), PROM gravable única vez (OTP) la cual esta construida a bases de fusibles los
cuales se queman en su programación almacenando nuestro programa y PROM borrable
eléctricamente (EEPROM).
La eprom puede borrarse y re programarse estando limitado a algunos cientos de veces
dependiendo del dispositivo en particular.
El Microcontrolador Mc68hc705j1a
El MOR (Mask Option Register) el cual se puede semejar como el SetUp o BIOS (Basic
Input Output System) de una PC el cual en el microcontrolador nos sirve para elegir ciertas
opciones como el resistor de resonancia interno (Por sino nos hace falta en nuestro proyecto
una base de tiempo menos precisa que la del cristal ) y configurar entre otras cosas los
diferentes modos de energía además de re setear el microcontrolador frente a una rutina
que salta a direcciones ilegales, y configurar las interrupciones (IRQ).
Supongamos que estamos corriendo un programa el cual sé esta ejecutando y por un Pin del
microcontrolador aparece una señal la que hace que el microcontrolador guarde todos los
datos y cálculos que estaba haciendo en una porción de memoria y comience a ejecutar una
rutina prioritaria al finalizar esa rutina prioritaria continua con el trabajo que estaba
realizando este proceso se llama interrupción, una aplicación practica son las paradas de
emergencia en procesos industriales, puede haber varios tipos de interrupciones por
Software, Por Hardware o Por tiempo.
Modo HALT
Este modo consume mas energía que el modo STOP desconectando el bus de datos y el
oscilador Interno dejando solo activo al reloj de tiempo real pudiendo así salir de este
modo por cualquier tipo de interrupción.
Modo Wait
Este modo de energía consume mas energía que en el modo HALT y menos que en modo
normal suspende el funcionamiento del procesador y la actividad en el bus, mantiene activo
todas las interrupciones y mantiene los estados anteriores en las líneas de entrada /
Salida.
Los Puertos
Los puertos del microcontrolador están compuestos por PINS los cuales podemos
Configurarlos como Pins de salidas o de entradas. También hay puertos Rs232 y
conversores Analógicos Digitales, Digitales analógicos e incluso puertos para timers.
Para definir las entradas de un puerto debo definirlas con el Estado Lógico 1 y las salidas
las defino con el estado lógico 0
BRH Mayor Salta a la etiqueta mayor si el último numero del acumulador es mayor a la
Comparación
BRM Menor Salta a la etiqueta menor si el último numero del acumulador es menor a la
comparación
BNE noigual Salta a la etiqueta noigual si el ultimo numero del acumulador no es igual a
la comparación
JSR Subrutina Hace un salto a una subrutina y cuando termina la sub rutina vuelve a la
siguiente línea
RTS Este comando indica que termina la subrutina
BRSET X, porta, Prender Salta a la rutina Prender si la Pata X del porta se encuentra
en estado alto
BRSET X, portb, Prender Salta a la rutina Prender si la Pata X del portb se encuentra
en estado alto
BRCLR X, porta, Apagar Salta a la rutina Prender si la Pata X del porta se encuentra
en estado bajo
BRCLR X, portb, Apagar Salta a la rutina Prender si la Pata X del portb se encuentra
en estado bajo
NOP No realiza ninguna operación (Este comando se utiliza para hacer rutinas de tiempo)
STA DDRA Define el PuertoA a según los datos del acumulador como entradas o salidas
a cada Pin del puerto
STA DDRB Define el PuertoB a según los datos del acumulador como entradas o salidas
A cada Pin del puerto
1) Cada vez que precione un pulsador prender un led 190 micro segundos
2) Manejar un Motor paso a paso con 2 Bits (teniendo una velocidad fija)
$BASE 10T Defino la base de trabajo
$PAGEWIDTH 132 Defino el ancho de pagina para imprimir
$PAGELENGTH70 Largo de pagina para imprimir
$INCLUDE 'C:\LANGUAGE\ICS05J1A\FUENTES\H705J1A.EQU'
ORG RAM Inicio los datos de la OTP
SEC1 DS 1 Reservo una Posición de memoraría para la variable Sec1
SEC2 DS 1 Reservo una Posición de memoraría para la variable Sec2
SEC3 DS 1 Reservo una Posición de memoraría para la variable Sec3
SEC4 DS 1 Reservo una Posición de memoraría para la variable Sec4
ORG ROM
INICIO:
LDA #3 Cargo el acumulador A con el Numero 3 C
STA SEC1 lo guardo en la variable Sec1
LDA #6 Cargo el acumulador A con el Numero 6 C
STA SEC2 lo guardo en la variable Sec2
LDA #9 Cargo el acumulador A con el Numero 9 C
STA SEC4 lo guardo en la variable Sec4
LDA #12 Cargo el acumulador A con el Numero 12 C
STA SEC3 lo guardo en la variable Sec3
LDA #%11111111 Cargo el acumulador A con el Nro en binario 255
STA DDRA Defino el puerto a como salidas
LDA #%111100 Cargo el acumulador A con el Nro en binario 60
STA DDRB Defino las patas 0 y 1 puertb a como entradas
CLRA Limpio el acumulador A
EJEC1:
BRSET 0,PORTB,PASO1 Pregunto si la pata 0 del portb esta en estado alto si esta
voy a La rutina paso1
EJEC2:
BRSET 1,PORTB,STEP4 Pregunto si la pata 0 del portb esta en estado alto si esta
voy a La rutina paso1
STEP4:
LDA SEC4 Cargo el Acumulador con Sec4
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
STEP3:
LDA SEC3 Cargo el Acumulador con Sec3
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
STEP2:
LDA SEC2 Cargo el Acumulador con Sec2
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
STEP1:
LDA SEC1 Cargo el Acumulador con Sec1
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de
JMP EJEC2 Salto a la Rutina Ejec2
PASO1:
LDA SEC1 Cargo el Acumulador con Sec1
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
PASO2:
LDA SEC2 Cargo el Acumulador con Sec1
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
PASO3:
LDA SEC3 Cargo el Acumulador con Sec1
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
PASO4:
LDA SEC4 Cargo el Acumulador con Sec1
STA PORTA Envio el dato al puerto
JSR RETARDO Salto a la Sub Rutina de tiempo
JMP EJEC1 Salto a la Sub Rutina de tiempo
RETARDO:
LDX #$20 Utilizo la rutina de tiempo anteriormente descripta en el
Ej 1
TIEMPO:
NOP
NOP
NOP
DECX
BNE TIEMPO
RTS
NADA:
RTI
ORG VECTORS
DW NADA
DW NADA
DW NADA
DW INICIO
END
3) Hacer un Contador de 1 a 7 y sacar el dato en binario por el PuertoA
$BASE 10T
$PAGEWIDTH 132
$PAGELENGTH70
$INCLUDE 'C:\LANGUAGE\ICS05J1A\FUENTES\H705J1A.EQU'
ORG RAM
CONTADOR DS 1
ORG ROM
INICIO:
LDA #%11111111
STA DDRA
LDA #%111100
STA DDRB
CLRA
STA CONTADOR
LDA CONTADOR
STA PORTA
MENU:
BRSET 0,PORTB,ASCENDER
MENU1:
BRSET 1,PORTB,PARAR
MENU2:
BRSET 2,PORTB,DESCENDER
JMP MENU
ASCENDER:
LDA CONTADOR
CMP #6
BHI PARAR
INCA
STA CONTADOR
STA PORTA
PARAR:
JMP MENU
DESCENDER:
LDA CONTADOR
BEQ MENU
DECA
STA CONTADOR
STA PORTA
JMP MENU
NADA:
RTI
ORG VECTORS
DW NADA
DW NADA
DW NADA
DW INICIO
END
ORG RAM
NRO0 DS 1
NRO1 DS 1
NRO2 DS 1
NRO3 DS 1
NRO4 DS 1
NRO5 DS 1
NRO6 DS 1
NRO7 DS 1
NRO8 DS 1
NRO9 DS 1
ORG ROM
INICIO:
LDA #%11111111
STA DDRA
LDA #%011000
STA DDRB
LDA #%11111100
STA NRO0
LDA #%00001100
STA NRO1
LDA #%11011010
STA NRO2
LDA #%10011110
STA NRO3
LDA #%00101110
STA NRO4
LDA #%10110110
STA NRO5
LDA #%11110110
STA NRO6
LDA #%00011100
STA NRO7
LDA #%11111110
STA NRO8
LDA #%10111110
STA NRO9
CLRA
SALTO:
BRSET 0,PORTB,CONVERCION
JMP SALTO
CONVERCION:
LDA PORTB
CMP 0
BEQ CERO
CMP 1
BEQ UNO
CMP 2
BEQ DOS
CMP 3
BEQ TRES
CMP 4
BEQ CUATRO
CMP 5
BEQ CINCO
CMP 6
BEQ SEIS
CMP 7
BEQ SIETE
CMP 8
BEQ OCHO
CMP 9
BEQ NUEVE
JMP CONVERCION
CERO:
LDX NRO0
STX PORTA
JMP CONVERCION
UNO:
LDX NRO1
STX PORTA
JMP CONVERCION
DOS:
LDX NRO2
STX PORTA
JMP CONVERCION
TRES:
LDX NRO3
STX PORTA
JMP CONVERCION
CUATRO:
LDX NRO4
STX PORTA
JMP CONVERCION
CINCO:
LDX NRO5
STX PORTA
JMP CONVERCION
SEIS:
LDX NRO6
STX PORTA
JMP CONVERCION
SIETE:
LDX NRO7
STX PORTA
JMP CONVERCION
OCHO:
LDX NRO8
STX PORTA
JMP CONVERCION
NUEVE:
LDX NRO9
STX PORTA
JMP CONVERCION
NADA:
RTI
ORG VECTORS
DW NADA
DW NADA
DW NADA
DW INICIO
Lda inicio
Add inicio,1
Add inicio,2
Add inicio,3
Add inicio,4
Add inicio,5
Add inicio,6
Add inicio,7
Add inicio,8
Add inicio,9
Sta Result
End
Otra Forma
Tabla Db 00H,01H,04H
09H,16H,25H
36H,49H,64H
81H
Inicio:
ClrA
ClrX
Ldx Numero
Lda Tabla, Numero
Sta Quad
End
Ej.) Realizar una rutina que convierta un numero Expresado en ASCI a hex. (Nros
Solamente) El Nro a convertir se encuentra en la posición C0 y el Nro convertido queda en
la posición C1
Los códigos de los números son
0 001100000
1 001100001
2 001100010
3 001100011
4 001100100
5 001100101
6 001100110
7 001100111
8 001101000
9 001101001
Db Numero
Clra
Clrx
Lda C0
Sta Numero
Sust Numero,48
Sta Convertido
End
Otra Forma:
LDA C0
And #$0F
Sta C1
Problema dividir el contenido de la posición 2040 en 2 niebles almacenándolo luego en las
locaciones 2041 y 2042, Ubicar el nieble más significativo de la posición 2040 en el nieble
menos significativo de la posición 2041 y el nieble menos significativo de la posición 2040
en el menos significativo de la posición 2042 limpiar los niebles más significativos de las
posiciones 2041 y 2042
Clra
Clrx
Lda Numero
And #$0F
Sta Numero1
LsRa
LsRa
LsRa
LsRa
Sta Numero2
End
Ej. Problema Sumar un numero binario e 16 BITS Ubicado en las posiciones de memoria
2040 y 2041, al numero ubicado en las posiciones 2042 y 2043.
Los Bytes más significativos se hallan en las locaciones 2041 y 2043. Almacenar el
resultado en las locaciones de memoria 2044 y 2045 con el byte mas significativo en 2045.
ClrA
ClrX
Lda Longitud
Inicio:
Lda Bloque,X
Cmp elmayor
BIH Grande
Err: IncX
Dec longitud
Bne INICIO
Grande:
Sta ElMayor
END
LOS ERRORES
Cada vez que realizamos un programa tengamos por seguro que cometeremos algún error
que probablemente se deba a tipeo o a no estar familiarizado con el set de instrucciones.
Cada vez que compilamos un programa el compilador verifica si hay o no errores de
sintaxis si nos devuelve el mensaje Assembled Succsesful quiere decir que no hay errores
de sintaxis en nuestro programa, lo cual quiere decir que el programa puede ser simulado
pero no quiere decir que el programa hará lo que nosotros queremos que haga, si no que
hará lo que nosotros de dijimos que haga.
Cuando el compilador no nos devuelve el mensaje Assembled Succsesful y nos deja en una
línea la cual esta de otro color quiere decir que en ese mismo lugar hay un error de sintaxis.
Los errores más comunes son:
La solución de este ultimo el cual se presenta en programas muy largos y es por saltar a sub
rutinas muy alejadas en el programa es hacer Jumps Intermedios Ej. : Hacer un Jump a una
etiqueta llama intermedio y de ahí volver a hacer un jump a la subrutina deseada.
EL SOFTWARE
Podemos usar varios interfases para hacer nuestro programa en assembler desde un editor
de Windows como puede ser el WordPad o el Word hasta un editor de DOS. Lo único que
deberemos tener en cuenta son las tabulaciones para que el compilador que usemos no nos
de ningún error.
En pantalla lo que estamos viendo es el editor del software original que nos brinda
Motorola y se puede conseguir en forma gratuita a través de sus website.
A continuación explicare brevemente su uso.
Con la Tecla F1 tenemos el menú de ayuda del editor el cual contiene algunas teclas rápidas
Con la Tecla F2 grabamos un archivo
Con la Tecla F3 abrimos un archivo o Hacemos un archivo nuevo si ingresamos un nombre
el cual no exista
Con la Tecla F4 ensamblamos o compilamos nuestro programa para después poder
simularlo.
Con la Tecla F5 Volvemos a nuestro Sistema Operativo
Con la Tecla F6 ejecutamos el Simulador para poder probar nuestro programa
Con la tecla F9 abrimos una ventana Dos
Con la tecla F10 Tenemos algunos datos de las opciones del simulador
Si aquí borramos hasta donde dice *.ASM y ponemos otro nombre supongamos Ej1.ASM
Y el archivo no existe previamente comenzaremos a editar un archivo nuevo con este
nombre.
En esta pantalla seleccionamos el programa que queremos editar con los cursores y luego le
Damos Enter sobre el archivo a editar.
Si escribimos ShowChip no muestra en el lado izquierdo un dibujo reducido del
microcontrolador con los datos de los PINS, también podemos observar en el medio el
mapa de memoria el cual nos indica las posiciones reservadas de la memoria. Aquí
podemos observar que prácticamente todas están con XX esto quiere decir que no están
Usadas salvo la primera que esta con el Dato 01 los datos en el mapa de memoria se
encuentran en Hexadecimal.
Arriba a la derecha podemos encontrar en el recuadro superior los datos de los
Acumuladores el Acumulador A se encuentra con la Sigla Acc, el Acumulador X con la
sigla Xreg y los cycles que son el tiempo de cada operación que realiza el
microcontrolador.
En el recuadro de al lado podemos ver nuestro programa y más precisamente la línea de
instrucción la cual esta ejecutando.
• Para ejecutar la siguiente línea del programa puedo hacerlo presionado la tecla t o
escribiendo el comando Step
• Para simular una entrada en el PuertoA debo escribir inputA #%000001 y él numero
en binario empezando del mas significativo al menos significativo como se abran
dado cuenta el % es para especificar que el Nro es en binario aquí también se aplica
la regla anteriormente mencionada. Y es lo mismo para el PuertoB solo debo
cambiar el imputa por el inputb
• Go comienza a ejecutar el programa.
• Br pone una pausa en la línea que nosotros le indiquemos.
• Nobr Borra todas las pausas que le pusimos al programa.
• Cy nos dice los ciclos que pasaron y la velocidad que tardo para ejecutar el
programa hasta el punto en el cual lo paramos
• Cy0 resetea el contador de ciclos del programa esto se utiliza para medir las rutinas
de tiempo.
• Quiet Si esta instrucción se ejecuta una ves no muestra en pantalla las operaciones
que esta ejecutando si en cambio se ejecuta 2 veces nos muestra nuevamente la
información en pantalla que esta ejecutando el microcontrolador.
Esta opción se utiliza para las rutinas de tiempo de larga duración Ej. : 10 o 15
Minutos (recordemos que el software que tenemos no simula en tiempo real, Es muchas
veces mas lento) una rutina de tiempo de 15 minutos puede tardar en calcularla en
aproximadamente 1 hs dependiendo de la computadora que estemos utilizando y si
estamos utilizando Windows o no (si utilizamos Windows puede llegar a tardas mas).
• ShowChip nos muestra una ventana con el dibujo del microcontrolador, su Pins, y
• nos dice que Pin esta en estado alto, cual en bajo y cual presenta alta impedancia.
• Reset : vuelve al principio del programa (Lo reseta)
• Program esta opción nos sirve para programar el OTP (si contamos con un equipo
de desarrollo el cual se comunique por el puerto serie, si tenemos un kit de
desarrollo conseguido de otros medio (puerto paralelo) entonces debemos buscar
otro programador. Este procesos nos pedirá que desconectemos algunos switch y
pongamos el integrado una ves ahí nos dará un menú con algunas opciones como
por Ej. Verificar si esta borrado el dispositivo , grabarlo con el MOR, o grabarlo sin
el MOR, grabar el BIT de castidad el cual nos asegura que nadie pueda copiar
nuestro programa una vez grabado. Generalmente para grabar los datos en un OTP o
eprom aconsejo también grabar el MOR (esto es por si usamos la resistencia interna
o algún dato de la configuración del micro)
LA ELECTRONICA
En este esquema podemos ver 2 versiones del microcontrolador HC705J1A para el cual
estuvimos haciendo unos programas.