Manual de Microcontroladores orientado al HC05J1A de Motorola

43
¿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

description

Manual de Introducción a la programación en Assembler CISCDe Motorola.Los ejemplos aquí mostrados fueron ejecutados en un HC05J1A

Transcript of Manual de Microcontroladores orientado al HC05J1A de Motorola

Page 1: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 2: Manual de Microcontroladores orientado al HC05J1A de 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

Page 3: Manual de Microcontroladores orientado al HC05J1A de Motorola

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.

Page 4: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 5: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 6: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 7: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 8: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 9: Manual de Microcontroladores orientado al HC05J1A de Motorola

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 $PAGELENGTH 70 Largo de pagina para imprimir$INCLUDE 'C:\LANGUAGE\ICS05J1A\FUENTES\H705J1A.EQU'

ORG RAMRETI DB 1

ORG ROM Inicio los datos de la OTPINICIO:

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:

Page 10: Manual de Microcontroladores orientado al HC05J1A de Motorola

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 Ejec1ENCENDER:

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 segundosNOP Dejo pasar 5 segundosNOP Dejo pasar 5 segundosNOP Dejo pasar 5 segundosNOP Dejo pasar 5 segundosBRCLR TOF,TSCR,Mili Pregunto si el BIT del Reloj de tiempo real esta en bajo

Page 11: Manual de Microcontroladores orientado al HC05J1A de Motorola

BSET TOFR,TSCR Pongo en alto el reloj de tiempo realDECX Decremento XBNE Mili Si es igual a 0 continuo si es distinto voy a la Rutina MiliRTS Termino la Sub Rutina

NADA:RTI Vuelvo de interrupciónORG VECTORS Datos Sobre los VectoresDW NADA Interrupción por SoftwareDW NADA Interrupción por HardwareDW NADA Interrupción por TiempoDW INICIO Ante un reset comenzar en la rutina INICIOEND 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$PAGELENGTH 70 Largo de pagina para imprimir$INCLUDE 'C:\LANGUAGE\ICS05J1A\FUENTES\H705J1A.EQU'

ORG RAM Inicio los datos de la OTPSEC1 DS 1 Reservo una Posición de memoraría para la variable Sec1

Page 12: Manual de Microcontroladores orientado al HC05J1A de Motorola

SEC2 DS 1 Reservo una Posición de memoraría para la variable Sec2SEC3 DS 1 Reservo una Posición de memoraría para la variable Sec3SEC4 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:

Page 13: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 14: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 15: Manual de Microcontroladores orientado al HC05J1A de Motorola

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 1TIEMPO:

NOP NOP NOP DECX BNE TIEMPO RTS

NADA:RTIORG VECTORSDW NADADW NADADW NADADW INICIOEND

Page 16: Manual de Microcontroladores orientado al HC05J1A de Motorola

3) Hacer un Contador de 1 a 7 y sacar el dato en binario por el PuertoA

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

Page 17: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

Page 18: Manual de Microcontroladores orientado al HC05J1A de Motorola

JMP MENUASCENDER:

LDA CONTADOR CMP #6 BHI PARAR INCA STA CONTADOR STA PORTA

PARAR: JMP MENU

DESCENDER:LDA CONTADORBEQ MENUDECASTA CONTADORSTA PORTAJMP MENU

NADA:RTIORG VECTORSDW NADA

Page 19: Manual de Microcontroladores orientado al HC05J1A de Motorola

DW NADADW NADADW INICIOEND

4) Hacer un Conversor BCD 7 Segmentos

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

ORG RAM

NRO0 DS 1NRO1 DS 1NRO2 DS 1NRO3 DS 1NRO4 DS 1

Page 20: Manual de Microcontroladores orientado al HC05J1A de Motorola

NRO5 DS 1NRO6 DS 1NRO7 DS 1NRO8 DS 1NRO9 DS 1

ORG ROMINICIO:

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

Page 21: Manual de Microcontroladores orientado al HC05J1A de Motorola

STA NRO4 LDA #%10110110 STA NRO5 LDA #%11110110 STA NRO6 LDA #%00011100 STA NRO7 LDA #%11111110 STA NRO8 LDA #%10111110 STA NRO9 CLRA

SALTO:

Page 22: Manual de Microcontroladores orientado al HC05J1A de Motorola

BRSET 0,PORTB,CONVERCION JMP SALTO

CONVERCION:

LDA PORTBCMP 0BEQ CEROCMP 1BEQ UNOCMP 2BEQ DOSCMP 3BEQ TRESCMP 4BEQ CUATROCMP 5BEQ CINCOCMP 6BEQ SEISCMP 7

Page 23: Manual de Microcontroladores orientado al HC05J1A de Motorola

BEQ SIETECMP 8BEQ OCHOCMP 9BEQ NUEVEJMP CONVERCION

CERO:LDX NRO0STX PORTAJMP CONVERCION

UNO:LDX NRO1STX PORTAJMP CONVERCION

DOS:LDX NRO2STX PORTAJMP CONVERCION

TRES:LDX NRO3STX PORTA

Page 24: Manual de Microcontroladores orientado al HC05J1A de Motorola

JMP CONVERCIONCUATRO:

LDX NRO4STX PORTAJMP CONVERCION

CINCO:LDX NRO5STX PORTAJMP CONVERCION

SEIS:LDX NRO6STX PORTAJMP CONVERCION

SIETE:LDX NRO7STX PORTAJMP CONVERCION

OCHO:LDX NRO8STX PORTAJMP CONVERCION

Page 25: Manual de Microcontroladores orientado al HC05J1A de Motorola

NUEVE:LDX NRO9STX PORTAJMP CONVERCION

NADA:RTIORG VECTORSDW NADADW NADADW NADADW 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 $EBInicio EQU $E1

Lda inicioAdd inicio,1Add inicio,2Add inicio,3Add inicio,4 Add inicio,5Add inicio,6Add inicio,7Add inicio,8Add inicio,9Sta ResultEnd

Otra Forma

INICIO EQU $E1RESULT EQU $EB

ClraClrxLda #10Sta cant

Loop:Add Inicio,xIncxCmp #cantBne LoopSta ResultEnd

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 $E0Tabla EQU $F0

Page 26: Manual de Microcontroladores orientado al HC05J1A de Motorola

Quad EQU $E1

Tabla Db 00H,01H,04H09H,16H,25H36H,49H,64H81H

Inicio:ClrAClrXLdx NumeroLda Tabla, NumeroSta QuadEnd

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 C1Los códigos de los números son

0 0011000001 0011000012 0011000103 0011000114 0011001005 0011001016 0011001107 0011001118 0011010009 001101001

Db NumeroClraClrxLda C0Sta NumeroSust Numero,48Sta ConvertidoEnd

Otra Forma:

LDA C0And #$0FSta C1

Page 27: Manual de Microcontroladores orientado al HC05J1A de Motorola

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

ClraClrxLda NumeroAnd #$0FSta Numero1LsRaLsRaLsRaLsRaSta Numero2End

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 $2044ResultadoSup Equ $2045Numero1Inf Equ $2040Numero1Sup Equ $2041Numero2Inf Equ $2042Numero2Sup Equ $2043

Lda Numero1InfAdd Numero2infSta ResultInfLda Numero1supAdc Numero2SupSta RsultSupEnd

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

Page 28: Manual de Microcontroladores orientado al HC05J1A de Motorola

Elmayor Equ $2040Bloque Equ $2042

ClrAClrXLda Longitud

Inicio:Lda Bloque,XCmp elmayorBIH Grande

Err: IncXDec longitudBne INICIO

Grande:Sta ElMayorEND

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.

Page 29: Manual de Microcontroladores orientado al HC05J1A de Motorola

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ápidasCon 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 existaCon la Tecla F4 ensamblamos o compilamos nuestro programa para después poder simularlo.Con la Tecla F5 Volvemos a nuestro Sistema OperativoCon 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

Page 30: Manual de Microcontroladores orientado al HC05J1A de Motorola

Si aquí borramos hasta donde dice *.ASM y ponemos otro nombre supongamos Ej1.ASMY 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.

Page 31: Manual de Microcontroladores orientado al HC05J1A de Motorola

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.

Page 32: Manual de Microcontroladores orientado al HC05J1A de Motorola

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)

Page 33: Manual de Microcontroladores orientado al HC05J1A de Motorola

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.

Page 34: Manual de Microcontroladores orientado al HC05J1A de Motorola

La alimentación Vcc debe ser 5 V, los Capacitores C1 y C2 deben tener un valor de .01F Tantalio para evitar ruido.

Circuito con resistencia externa.

Circuito con resistencia interna. Se habilita desde el MOR.

Page 35: Manual de Microcontroladores orientado al HC05J1A de Motorola

Ejemplo de una placa para desarrollo para este microcontrolador.

Page 36: Manual de Microcontroladores orientado al HC05J1A de Motorola

UN PROGRAMADOR DE C68HC11F1