miércoles, 14 de octubre de 2015

[PIC16F84A] Ejercicios Resueltos

En esta presentación vamos a introducirlos a un poco de programación Assembler, pero primero vamos a hablar de todos los pasos que tenemos que tomar para poder realizar una programación exitosa y así finalmente probar el ejercicio de manera física para ver como funciona realmente.


Procedimiento de Resolución

El procedimiento estándar para la resolución de un proyecto en general recomendado es segmentar el proyecto en 3 simples pasos:

Paso N°1: Enunciado y delimitación del hardware: El enunciado es la razón de ser de cualquier proyecto. Es el problema que debe ser solucionado por el programador.

Si el enunciado es proporcionado junto con el hardware, este paso nos los ahorraremos. En caso contrario, se deben delimitar y definir todas las variables de entradas y de salida. Debemos asignar los pines que van a actuar como entrada de datos (Sensores) y los que van a actuar como salida de datos (Actuadores o elementos finales de control).

Se debe tratar de develar todo lo que se espera que haga el funcionamiento del diseño que se está proponiendo. Se debe establecer un resumen de cómo se debe comportar el circuito de control en base a lo que queremos diseñar.

Sirve Para:
.- Ponerle límites a nuestro proyecto.
.-Determinar las funciones que se espera que haga.
.-Fundamentalmente para especificar el hardware que va a ser controlado y gobernado por el microcontrolador, en este caso el PIC16f84a.

Paso N°2: Diagrama de Flujo: Este nos proporcionará el funcionamiento lógico del problema, proyecto o sistema que queremos diseñar.
       Si un proyecto es de mediana o gran complejidad, se recomienda seccionar el diagrama de flujo en partes para analizar su funcionamiento y posteriormente unirlo, bajo el lema de segmentar un proyecto grande en partes pequeñas para su entendimiento y luego se agrupan, obteniendo la solución total del proyecto.
       Generalmente se parte del enunciado que se ha delimitado en el paso anterior.
Como recomendación general, antes de pasar a la elaboración del lenguaje ensamblador, hágase las siguientes preguntas:

.-¿El diagrama de flujo tiene continuidad y lógica?
.-¿Cumplo con las normas de elaboración de un diagrama de flujo?
.-¿El diagrama de flujo cumple con el enunciado?

         Si estas preguntas son afirmativas, bien vayamos al paso 3. En caso contrario debemos corregirlo, hasta lograr que funcione como se exige o como lo deseamos.

Paso N°3:  Elaboración del lenguaje Ensamblador: Si usted ha elaborado correctamente el diagrama de flujo, este paso será sencillo de llevar a cabo, recordando que a cada bloque se haya colocado en el diagrama le corresponderá un conjunto de instrucciones que salen exclusivamente de las 35 disponibles que traen los microcontroladores de la familia 16F con la que se trabajara en este blog. Su documentación previa, experiencia, incentivo e ingenio le permitirán combinarlas para que realicen la misma función expresada en el diagrama de flujo.
      Se deben tener presente las diferentes rutinas de programación, asi como otras rutinas estandares que existen para el uso de diferentes procedimientos, tales como rutinas matemáticas, manejo de LCD, comunicaciones, conversiones entre códigos, etc.

Un ejemplo de diagrama de flujo de la metodología de resolución de problemas :



Ejercicio N°1: Dado el siguiente circuito:



Realice un programa que permita explorar el estado del bit RA3. Si RA3 es uno, se debe mostrar en el display el número 5. Caso contrario se debe mostrar el número 3.


Solución:
Paso 1: Enunciado y delimitación del hardware: Si el enunciado y el hardware ya se nos ha proporcionado, saltaremos al siguiente paso.
Paso 2: Diagrama de flujo:


Paso 3: Lenguaje Ensamblador:
Si tenemos el Diagrama de Flujo bien diseñado, lo demas es solamente detallarlo en el lenguaje assembler.:


Ejercicio N°2: Dado el siguiente circuito: 
Realice un programa que permita mostrar en el display la letra "C", si la entrada está en nivel bajo ó la letra "U" si la entrada está en el nivel alto.
Solución:
Paso 1: Enunciado y delimitación del hardware: Tenemos el enunciado pero el hardware no está del todo claro.
        Como no se especifica que bit del microcontrolador controla a cuál segmento del display, debemos especificarlo. Además no se especifica que display vamos a utilizar, no sabemos si es ánodo común o cátodo común. Por lo tanto lo asignaremos a nuestro criterio. Eligiendo un cátodo común tendremos:

La identificación de los segmentos de un display a nivel internacional es la siguiente:
Paso 2: Diagrama de Flujo

Paso 3: Lenguaje Ensamblador:


Ejercicio N°3: Diseñe un contador de 8 bits, que se incrementa cada vez que se pulsa "P" (RA3). Visualice el resultado por el puerto B. Activar un led (RA0), cuando el contador llegue a D'125' y apagarlo cuando llegue a D'221. y luego repetir el ciclo

Paso 1: Enunciado y delimitación del hardware: Tenemos el enunciado y parte del hardware definido. 

.- Se ha asignado a RA3 como un sensor de entrada (Pulsador).
.- Se ha asignado a RA0 como un elemento de salida (Led).
.- Se pide al puerto B que muestre el valor de un contador (Son 8 Bits), por lo que es un elemento de salida (8 leds)

¿Cómo quedaría delimitado el hardware?
Asignaremos la lógica del pulsador (Lógica negativa):
.- Si P es presionado, RA3= 0
.- Si P no es presionado, RA3= 1.

Si usted desea trabajar con lógica positiva, no hay problema, debe reconfigurar el circuito del pulsador.

Listo, tenemos el cascarón vacío del proyecto. Ahora vamos a darle inteligencia.

Paso 2: Diagrama de Flujo:
Debemos usar un registro que lleve la cuenta (Contador de 8 Bits) por lo que debemos declararlo en el paso 3.



Paso 3: Lenguaje Ensamblador:

Recuerde la declaración el registro CONTADOR:





0 comentarios:

Publicar un comentario