sábado, 25 de marzo de 2017

Diseño de programas en ensamblador para PIC ( PARTE 3 )

Hola nuevamente ha Artes Electrónicas Pachani, hoy continuaremos con la serie programación en componentes PIC, tutorial dirigido a lectores novatos, aficionados (hobbistas), estudiantes, que deseen implementar programas para microcontroladores en lenguaje ensamblador (ASM), para el desarrollo de aplicaciones. 

¿Como lo hago?(El inicio)



 
Una vez hemos logrado realizar nuestro primer “Hola Mundo”, la pregunta que viene a nuestra cabeza es ¿Como lo hago?, muchos de los retos en cuanto a la programación viene a ser en la manera como se plantee la solución a un determinado problema, empecemos:
Problema 2.- Se desea realizar un juego donde se busca que los participantes escojan colores y cuando la combinación sea correcta se repita en el panel de colores.

Respuesta: La manera como nos plantearon el problema lo podemos ver en nuestra mente como el manejo de bits por un puerto de entrada, que sera el PUERTOA y que la combinación este limitada a una correcta contraseña/clave correcta siempre y cuando sea así la contraseña pre-programada y luego tengamos la secuencia de luces por el PUERTOB:
1er Paso: Planteemos nuestra idea y tratemos de esquematizarla de la siguiente manera:


 
Primero notamos que la entrada de datos es por el PUERTOA , donde podemos utilizar switches, botoneras dependiendo de nuestro juego, para nuestro prototipo y simulación lo realizaremos con los LOGICSTATE que ofrece Proteus para simular la entrada de datos y para la la vista de la salida de datos por el PUERTOB que sera por medio de los LOGICPROBE que simularan la salida de datos.

2do Paso: Ahora tenemos la configuración de nuestro Pic16f877a ya colocado para nuestro prototipo de simulación , tenemos que realizar nuestro código con el cual funcionara nuestro PIC16F877A, para ello haremos uso de nuestro IDE Mplab , primero realizamos un nuevo proyecto y empezamos a escribir código de la siguiente manera:


 
Listo ahora que hemos configurado nuestro proyecto, empecemos a programar. 

3er Paso: En mi opinión es bueno tener un código lo mas ordenado posible para poder revisar y cambiar alguna instrucción que este de mas o bien le falte mas comentarios en una instrucción, bien empecemos por la cabecera de nuestro código:

 
Acá ademas de las especificaciones de nuestro código, como microprocesador a utilizar , también podemos indicar a Mplab o bien el compilador de Proteus la manera como se comportara el puertoA, ya que el puertoA se comporta también como entrada analógica.
En la imagen habrán notado también que existe un DATO EQU 0x30 , esta es una asignación de dirección para la variable DATO que nos servirá de auxiliar para nuestras operaciones, a medida que vayamos escribiendo códigos notaremos que nos serán útiles para reducir instrucciones ya que en ellos podemos caragar un valor literal para luego llamarlo para una operación especifica sin necesidad de tener que cargar el valor cada vez.

4to Paso: Ahora configuremos los bancos y el comportamiento de cada uno de los puerto de modo que podamos utilizar tanto el puertoA como entrada y el puertoB como salida:

 
Dentro del código de configuración y asignación habrán notado la instrucción NOP, este código le dice al microprocesador que pare por 4 ciclos maquina, por lo cual podemos utilizarlo si queremos, pero para nuestro ejercicio sera suficiente con mencionarlo un par de veces.
Para entender un poco mas la manera como debemos configurar el puertoA lo he separado de modo que lo distingamos desde la entrada al banco1 hasta la habilitación del puertoA como entrada digital por medio de la instrucción ADCON1 , esta instrucción permite habilitar el puertoA como Entrada digital, ahora luego con la instrucción TRISA simplemente le indicamos que este puertoA es de Entrada de Datos , luego CLRF TRISB indicamos que el puertoB se comportara como salida de datos.
Ya luego de habilitar los puertos A y B , retornamos al banco0 para escribir nuestras instrucciones.

5to Paso: Ya empecemos con el codigo:


 
Ya que estamos en el banco cero, empecemos por recoger los datos del puertoA y lo guardamos al acumulador (W), una vez hecho esto guardamos el valor del acumulador a la dirección DATO , de modo que lo podamos comparar con la contraseña/clave de la siguiente manera:


Una vez cargamos el literal 0x30 , este nos servirá de contraseña , bien para comparar dos números lo que hacemos es lo siguiente: SUBWF DATO,W ; W=DATO – 0x30 , luego sigue la instrucción:
BTFSS STATUS,Z ; que pregunta por la bandera Z , revisa si hay cambios y dependiendo de la respuesta salta una instrucción o bien continua con la siguiente, para el salto entre etiquetas dependiendo de la decisión se lo realiza por medio de GOTO el cual hace que una vez se escoja la etiqueta se siga con las instrucciones siguientes, de la siguiente manera:


 

Dependiendo del valor del bit Z, puede saltar a ES_IGUAL o bien NO_ES_IGUAL, y continuar con las instrucciones. Para cada decisión existe una posible respuesta donde el microcontrolador continuara , para ello debemos de tomar énfasis en cada acción que queramos que realice el microcontrolador, en este caso se muestra el valor de la respuesta verdadera 0x30h cuando la contraseña sea correcta.
Para que el microcontrolador este atento al puertoA de entrada de datos, hacemos que salte hacia la etiqueta INICIO, para cuando haya cambio en el puertoA , digamos que otra contraseña/clave, vuelva a comparar y si la respuesta no es la correcta podemos hacer que el puertoB muestre 0x00h.
Ahora probamos si compila y recuperaremos el archivo HEX, en el compilador de Mplab muestra que nuestro codigo esta sin errores y se ha generado el el archivo ejer03.hex.


 

Simulación en Proteus
Una vez tenemos el archivo ejer003.hex de Mplab , ahora iniciamos Proteus y creamos u proyecto y lo guardamos donde nuestro archivo hex, de modo que podamos realizar la simulación y tengamos todo el código ordenado de manera adecuada.



Ya en proteus cargamos el archivo hex al microcontrolador:


 
Ahora deben notar que Proteus pide el archivo *.asm, en nuestro caso escogeremos el archivo HEX generado por Mplab y lo cargamos:


 

Ahora la parte final, iniciamos la simulación de Proteus y verificaremos para nuestra contraseña verdadera si se repite en la siguiente imagen:



Según la simulación cuando ingresamos el valor verdadero/clave correcta la respuesta indica que es verdadera por lo cual hasta aquí el código que hemos escrito es adecuado.

Ahora probemos que sucede cuando la contraseña/clave no es la adecuada:


Como se tenia previsto/planeado, para cuando la contraseña/calve no sean adecuados, no se debe mostrar nada por las salidas del puertoB, por lo cual nuestro código es adecuado. Y con ello hemos podido resolver el problema que nos habían planteado para el juego de secuencia de luces.

Al final confirmamos el buen funcionamiento de nuestro código y su simulación en proteus, la implementación en protoboard ya puede ser efectiva, con lo cual nuestro código es funcional, ahora para lo siguientes ejercicios vamos a realizar la misma metodología pero ya con menos pasos y mas imágenes para luego entrar en la programación en basic y posteriormente en C.
Hasta aquí ha sido la manera como debemos de realizar un programa paso a paso, ahora si bien ensamblador es moroso, eso me hizo recuerdo a una reflexión que una vez nos digo nuestro docente Microcntroladores Laboratorio, acerca de ensamblador:
Algunas vez has jugado con legos (rastris), si la respuesta es SI , entonces sabrás que para diseñar un tanque o bien un avión cada uno de las piezas van formando el modelo, y el tiempo que se requiera dependerá de la destreza y el modelo que se pretende realizar”
Ingeniero Roger Guachalla Narváez

  Con esta analogía mi docente quería decir que la base de todo programa por mas complicado que parezca se reduce a pequeños elementos y que su diseño depende del tiempo que le dediquemos. Bien nos vemos en el siguiente tutorial.


Todo el material que aquí se encuentra es de mi autoría, ademas de una recopilación de información de Internet de recursos que se pueden descargar como libros los cuales son usados como referencia para los ejercicios y los ejemplos. Cualquier consulta la puedes realizar en la parte de comentarios.

Bibliografia:
1.- Enrique Palacios , Fernando Ramiro y Lucas J. López, Microcontrolador PIC16F84 Editorial Alfa Omega; Publicado el año 2004;[Fecha de consulta 10 de Marzo de 2017].
2.-Christian Bodignton Estava; Mikro Basic ; descargada de WWW.CONEXIONELECTRONICA.COM;
Publicado el año 2010; [Fecha de consulta 5 de Marzo de 2017].


Software utilizados:
1.- MpLab version 8.52 descargado de la pagina oficial de Microchip;



No hay comentarios.:

Publicar un comentario

Hola, con tu comentario puedes aportar para mejorar la calidad de mi trabajo

Microcontroladores PIC – Curso de Programación en MikroC (Parte 6 )

Microcontroladores PIC – Curso de Programación en MikroC Bienvenido nuevamente a los tutoriales de Artes Electrónicas Pachani , con...