jueves, 12 de agosto de 2010

Archivo Plantilla

En esta tercera entrega vamos a hablar acerca de un archivo plantilla(template), el cual usaremos como esqueleto para todos los programas que realizamos con el mismo microcontrolador, esto es importante porque de esta forma ya tendremos todas las configuraciones basicas para determinado tipo de microcontrolador y solo nos ocuparemos de pensar en programar.




El archivo que contiene la plantilla se puede descargar desde este enlace, pero a continuacion iremos explicando las diferentes partes de este archivo.

En la Figura 3.1 podemos ver la primera parte del archivo la cual esta dedicada a documentar el programa, en la parte de Archivos Requeridos documentamos que el primer archivo que necesitamos es el p16f84A.inc porque contiene la definicion de registros especificos del microcontrolador (SFR). En la seccion de Notas podriamos hacer un seguimiento de las modificaciones que vayamos realizando en el programa durante la etapa de desarrollo.

Figura 3.1
La siguiente seccion de la plantilla (Figura 3.2) contiene la definicion del procesador que utilizaremos (en este caso el PIC16F84A), la inclusion del archivo p16f84A.inc y la definicion de la palabra de configuracion. La importancia de incluir el archivo p16f84.inc se debe a que la gente de Microchip ya coloco en estos archivos(existe uno para PIC) las definiciones de los registros y los bits de cada registro de funcion especifica (SFR), esto quiere decir que en vez de colocar la direccion del registro y la posicion del bit al que queramos acceder, colocaremos los nombres que aparecen en las hojas de datos, esto ademas de permitir un seguimiento mas facil al programa, tambien permite migrar mas facilmente el programa para otro PIC.

La otra parte importante de este segmento de la plantilla es la parte de la palabra de configuracion, en esta seccion utilizamos la directiva __CONFIG para incorporar en el archivo .hex que generaremos la informacion de los  bits de configuracion que usaremos, la ventaja de esto es que no tendremos que modificar estos bits en el software que utilizaremos para grabar el microcontrolador.
Figura 3.2
La siguiente parte del programa (Figura 3.3) sera usada para definir variables, como puede verse se proponen dos formas de hacerlo, la primera utiliza la directiva EQU la cual nos permite asignarle a una posicion de memoria de la RAM un nombre el cual podremos usar despues en el programa para acceder a esa posicion. En la Figura 3.3 puede verse que se declararon 2 variables de esta forma comenzando en la posicion 0x0C.
 Figura 3.3
La segunda forma propuesta para declarar variables es utilizando la directiva CBLOCK la cual le indicara al ensamblador que las siguientes etiquetas deberan ser asignadas a posiciones de memoria contiguas, esto tiene la ventaja de que no tendremos que estar pendientes de a que posicion de memoria le estamos asignando la etiqueta (variable), otra ventaja es que se puede definir variables de tamaño mayor a un byte simplemente indicando la cantidad de bytes que queremos que se reserve (para eso usamos los :), en la Figura 3.3 se ve como declarar una variable de 2 bytes.
Por ultimo(por lo menos en esta seccion de la plantilla) tenemos un area reservada para Definicion de pines y banderas, talvez esto les parezca a algunos algo nuevo, pero es bastante util. La idea de esta seccion es usar la directiva #define para asignarle nombres representativos a los a pines del PIC y a las banderas que se usaran, es decir que si hacemos la siguiente definicion:
#define     Boton1     PORTB,0
en lugar de hacer:
btfsc    PORTB,0
podriamos hacer:
btfsc    Boton1
Esta forma de manejar los pines del PIC tiene la ventaja adicional de que si tuvieramos que cambiar la funcion de ese pin y colocar el Boton1 en otro pin, simplemente tendriamos que cambiar la asignacion del pin en el #define y esto tendra efecto en todo el programa.

La siguiente seccion de la plantilla (Figura 3.4) se refiere al codigo en si, lo primero a notar es el uso de la directiva ORG para indicar la direccion de la memoria de programa a partir de la cual comenzaran las instrucciones, el unico cuidado que se debe tener es el de no escribir sobre la direccion del vector de interrupciones, es por eso que la plantilla se utiliza un ORG 0x000 para definir el vector de Reset ,es decir, el inicio de la memoria de programa, y el ORG 0x004 para definir el vector de interrupcion, ademas en la parte de la interrupcion ya se coloca las instrucciones para salvar algunos registros importantes. Notese que las variables en las que se guardan estos registros fueran definidas mas arriba usando el EQU.

Figura 3.4
Finalmente tenemos la seccion en la cual podriamos escribir el programa principal que en este caso comenzara en la etiqueta main,  luego de la seccion del programa tenemos la declaracion de valores para la EEPROM.
Figura 3.5
Bueno esto es todo en esta entrega, la siguiente vez veremos como compilar, en este caso ensamblar un proyecto y las opciones relacionadas a esto.

No hay comentarios:

Publicar un comentario