Vous êtes sur la page 1sur 36

¿Que es un microcontrolador?

Un microntrolador es un integrado programable el cual mediante ciertos estados lógicos


ejecuta una rutina previamente programada por nosotros la cual transferimos al integrado.
Como por Ej. : mover un motor o pararlo. Este integrado tiene un gran uso industrial en
diferentes áreas entre las cuales se encuentran :los lavarropas programables, en la industria
automotriz y el área de Robótica.
En Definitiva los microcontroladores se podrían catalogar como una especie de
computadoras dedicadas. Cumpliendo funciones como las de un plc en el área eléctrica mas
Las ventajas del área electrónica como son los conversores analógicos digitales, manejos de
timer de alta preescisión. Y además tenemos la ventaja de costo reducido que a
comparación de un PLC es ínfimo. La mayoría de los circuitos de los programadores se
pueden conseguir en Internet como por ejemplo el programador de PIC , HC , BASIC
junto con los simuladores , o bien se puede comprar un kit de desarrollo el cual cumple las
mismas funciones que las del programador que se consigue en Internet mas algunas
pequeñas ventajas las cuales no se utilizan mucho pero para ciertas aplicaciones son útiles
como el simulador en tiempo real , manuales y atención al cliente personalizada , la cual es
útil para ciertos casos .
El integrado que usamos para desarrollar nuestra automatización y probarla se llama
EPROM y tiene la ventaja de ser un integrado re gravable mientras que el microntrolador
que usamos una vez ya desarrollado nuestro proyecto se llama OTP y tiene la particularidad
que una vez grabado no puede ser modificado.
Para programar un microcontrolador hay diversas formas de programación assembler con
tecnología CISC (Complete Instrucción set competer) , programación assembler con
tecnología RISC (Reduce Instruction set computer) ,vale la pena agregar que por mas que
separamos usar una de estas 2 tecnologías no quiere decir que podamos hacer un programa
para un microcontrolador diferente que utilice la misma tecnología ya que cada
microcontrolador tiene sus propio registros y son diferentes entre si , ni siquiera los
programas de un microcontrolador de motorola trabajarían en otro microcontrolador de
motorola sin hacer pequeñas modificaciones, para lo único que nos sirve conocer una
tecnología es para saber el método de programación y junto con el manual adaptarnos a
otro microcontrolador , es recomendable siempre tener el manual del microcontrolador a
mano para saber que registro corresponde a cada función ,otra opción es programar en
Basic (Solo el Microcontrolador Basic) por lo menos hasta que se hallen compiladores, o
programar en C y pasarlo con un interprete , En este manual usaremos tecnología Cisk
aplicándolo al microcontrolador MC68HC705J1A de la línea Motorola .
Variantes en la programación

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

Antes de discutir las operaciones de la CPU en detalle, es preciso conocer algunos


conceptos respecto a memoria de las computadoras. En muchos cursos de programación
para principiantes se presenta la memoria como si fuese similar a un armario lleno de
cajones donde se puede guardar información. La misión final de cualquier memoria es que
tenga la capacidad de retener cierta información, Obviamente no basta solo con almacenar
la información, si no hay manera de consultarla (leerla.
En una memoria de una computadora de 8 bits tendremos 8 llaves que pueden tener el
estado de 0 o1 comparándola con el armario se podría decir que adentro de cada cajón
habría 8 llaves, las cuales podrían estar en estado desconocido o indefinido hasta la primera
vez que sean usadas.
Las computadoras usan diversos tipos de información que requieren diferentes tipos de
memoria. Las instrucciones que controlan la operación del microcontrolador son
almacenadas en memoria ROM (Memoria solo de lectura no volátil), así el sistema no debe
re programarse luego de apagar la fuente de alimentación. Tanto las variables de trabajo
como los resultados intermedios necesitan ser almacenados en una memoria que permita
una rápida y fácil escritura durante la operación del sistema. Si no es importante retener la
información al apagar la alimentación podemos usar una memoria del tipo volátil. Este tipo
es escrita y leída solo por la CPU en la computadora.
Los registros de estado de la computadora también forman parte de la memoria pero
difieren de este tipo por que pueden ser moni toreadas o alteradas por algún otro además de
la CPU
MEMORIA RAM

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.

ROM Programmable (Prom)

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

Las características generales de este microcontrolador de la familia Motorola son: 8 Bits,


64 Bytes de memoria RAM y 1240 Bytes de memoria Eprom destinadas al usuario para su
programación.
También cuenta con 14 Entradas / Salidas configurables esto quiere decir que nosotros
podremos configurar los 14 Pins como, salidas o entradas o bien mezclarlas a nuestra
conveniencia.
Los Pins que estén como salida sacaran en estado alto (5V) una corriente máxima de 10
Ma. , Mientras que las entradas soportan una corriente máxima de 1 Ma.
Como consejo me gustaría agregar que los Pins que no utilizamos es conveniente
configurarlos como salidas para evitar problemas de ruido.
La Función MOR

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).

Una Interrupción o 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.

Diferentes Modos de Ahorro de Energía

La mayoría de los microcontroladores tienen diferentes modos de energía y como estamos


usando el microcontrolador Mc68hc705j1a analizaremos sus 3 modos de ahorro de energía
el modo STOP, el modo HALT y el Modo Guaita. Como mencionamos anteriormente estos
modos se configuran utilizando un BIT en el MOR
Modo STOP

El modo STOP consiste en desconectar las entradas / salidas del microcontrolador,


memorias y el oscilador interno Suspendiendo así todos los procesos del microntrolador
Haciendo que este esté prácticamente inactivo.
Para salir de este modo se puede salir por un modo de interrupción externa también llamada
interrupción por Hardware.

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

Uso de los Sistemas de Numeración en un micrcontrolador


En los microcontroladores podemos siempre usar el sistema de numeración que mas nos
convenga para cada caso por Ej. El sistema de numeración binario se especifica con un
signo % seguido del Nro Ej. %00000011 (3 en decimal), si anteponemos el signo $
estaremos trabajando en Hexadecimal FF (15 en decimal) o si no le anteponemos nada
trabajaremos en el Sistema decimal
Los Comandos Básicos y más Usados para cualquier programa

LDA XXX Carga el contenido de una posición de memoria xxx en el acumulador A

LDA #xxx Carga el Numero xxx en el acumulador A

LDX XXX Carga el contenido de una posición de memoria xxx en el acumulador X


(Registro índice)

LDX #xxx Carga el Numero xxx en el acumulador X (registro Índice)

STA Nomb Guarda el contenido del acumulador A en la Posición de memoria Nomb

STX Nomb Guarda el contenido del acumulador X en la posición de memoria Nomb

BSET X, Porta Pone en un nivel alto la Pata X del Puerto A

BSET X, Portb Pone en un nivel alto la Pata X del Puerto B

BCLR X, Porta Pone en un nivel bajo la Pata X del Puerto A

CMP #X Compara el numero del acumulador con X

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

BEQ igual Salta a la etiqueta igual si el ultimo numero igual a la comparación

INCA Incrementa en 1 el valor del acumulador a


INCX Incrementa en 1 el Valor del acumulador X o registró índice

DECA Decremento 1 el valor del acumulador A (Le resta 1)

DECX Decremento 1 el valor del acumulador X (Le resta 1)

SUB 2, MEM Resta 2 a valor numérico de la memoria MEM

ADD 2, MEM Suma 2 a valor numérico de la memoria MEM

SWI Intercambia los valores de los acumuladores

TXA Transfiere el Contenido del acumulador X al A

TAX Transfiere el Contenido del acumulador A al X

JMP etiqueta Hace un salto a etiqueta

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)

DB mem01 Deja Una posición de memoria reservada para mem01

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

CLRA / CLRX Limpia los datos del acumulador


EJERCICIOS

1) Cada vez que precione un pulsador prender un led 190 micro segundos

$BASE 10T Defino la base de trabajo


$PAGEWIDTH 132 Ancho de pagina para imprimir
$PAGELENGTH70 Largo de pagina para imprimir
$INCLUDE 'C:\LANGUAGE\ICS05J1A\FUENTES\H705J1A.EQU'
ORG RAM
RETI DB 1
ORG ROM Inicio los datos de la OTP
INICIO:
LDA #80 Cargo el acumulador A con 80
STA RETI Lo guardo en la variable RETI
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 60 en binario
STA DDRB y defino al PuertoB (Patas 0,1) como entradas
CLRA Limpio el acumulador A
EJEC1:
BRSET 0,PORTB,ENCENDER Pregunto si la pata 0 del portb esta en estado alto si esta voy a
La rutina ENCENDER
EJEC2:
BRCLR0,PORTB,APAGAR Pregunto si la pata 0 del portb esta en estado bajo si esta voy a
la rutina APAGAR
JMP EJEC1 Salto a la Rutina Ejec1
ENCENDER:
BSET0,PORTA Pongo el alto la pata 0 del porta
JSR RETARDO Salto a la sub rutina de tiempo
APAGAR:
BCLR 0,PORTA Pongo en estado bajo la pata 0 del porta
JMP EJEC1 Salto a la rutina EJEC1
RETARDO:
LDX #RETI
Mili:
NOP Dejo pasar 5 µ segundos
NOP Dejo pasar 5 µ segundos
NOP Dejo pasar 5 µ segundos
NOP Dejo pasar 5 µ segundos
NOP Dejo pasar 5 µ segundos
BRCLR TOF,TSCR,Mili Pregunto si el BIT del Reloj de tiempo real esta en bajo
BSET TOFR,TSCR Pongo en alto el reloj de tiempo real
DECX Decremento X
BNE Mili Si es igual a 0 continuo si es distinto voy a la Rutina Mili
RTS Termino la Sub Rutina
NADA:
RTI Vuelvo de interrupción
ORG VECTORS Datos Sobre los Vectores
DW NADA Interrupción por Software
DW NADA Interrupción por Hardware
DW NADA Interrupción por Tiempo
DW INICIO Ante un reset comenzar en la rutina INICIO
END TERMINA EL PROGRAMA

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

JMP EJEC1 Salto a Ejec1

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

4) Hacer un Conversor BCD 7 Segmentos


$BASE 10T
$PAGELENGTH132
$PAGEWIDTH 70
$INCLUDE 'C:\LANGUAGE\ICS05J1A\FUENTES\H705J1A.EQU'

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

Sumar 10 Números que se encuentren en posiciones consecutivas de memoria desde E1


El resultado de la operación guardarlo n la posición EB
Result EQU $EB
Inicio EQU $E1

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

INICIO EQU $E1


RESULT EQU $EB
Clra
Clrx
Lda #10
Sta cant
Loop:
Add Inicio,x
Incx
Cmp #cant
Bne Loop
Sta Result
End
Ej. : Calcular el Cuadrado del Contenido de una posición en memoria E0 Usando una tabla
y ubicar el resultado en la posición E1 buscando que en la posición E0 existe un numero
entre 0 y 9, inclusive el resultado y se guarda en BCD NATURAL.

Numero EQU $E0


Tabla EQU $F0
Quad EQU $E1

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

Numero EQU 2040


Numero1 EQU 2041
Numero2 EQU 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.

ResultadoInf Equ $2044


ResultadoSup Equ $2045
Numero1Inf Equ $2040
Numero1Sup Equ $2041
Numero2Inf Equ $2042
Numero2Sup Equ $2043
Lda Numero1Inf
Add Numero2inf
Sta ResultInf
Lda Numero1sup
Adc Numero2Sup
Sta RsultSup
End
Ej.
Encontrar el mayor de los elementos de un bloque de datos.
La longitud del bloque será en la locacion de memoria 2041 y el bloque comienza en la
locacion 2042 almacenar el mayor de los elementos en 2040, asumir que en el bloque los
elementos son binarios de 8 bits y sin signo.

Longitud Equ $2041


Elmayor Equ $2040
Bloque Equ $2042

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:

· No haber tabulado los comandos.


· Errores en la escritura del comando o de sus parámetros.
· Errores en cuanto a las etiquetas (Las etiquetas no deben ir Tabuladas)
· Errores de estar fuere del largo máximo de direccionamiento

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.

Como podemos apreciar en el esquema del los microcontroladores encontramos el


puerto a con la Sigla Pa0 a Pa7 estos pins son los del puerto a mientras que los de la
sigla Pb0 a Pb5 son los del puertob.
Vss es la alimentación 5V y Vdd es las masa o tierra.
Entre los Pins OSC1 y OSC2 colocamos el cristal y la resistencia dependiendo de cómo
configuremos el microcontrolador.
Enfrente del los Pins del OSC1 y OSC2 encontramos el Reset el cual debe estar en
estado alto para que el microcontrolador no se resetee. Y también encontramos la pata
de Irq la cual si no usamos debemos enviarla a VCC con una resistencia de 10K Ω para
no dañar el microcontrolador.
La alimentación Vcc debe ser 5 V, los Capacitores C1 y C2 deben tener un valor de .01
µF Tantalio para evitar ruido.

Circuito con resistencia externa.


Circuito con resistencia interna. Se habilita desde el MOR.

Ejemplo de una placa para desarrollo para este microcontrolador.


UN PROGRAMADOR DE C68HC11F1

Vous aimerez peut-être aussi