Documente Academic
Documente Profesional
Documente Cultură
3. Organizacin de la Memoria.
Las altas prestaciones de los microcontroladores PIC derivan de las caractersticas de su arquitectura. Estn basados en una arquitectura tipo Harvard que posee buses y espacios de memoria por separado para el programa y los datos, lo que hace que sean ms rpidos que los microcontroladores basados en la arquitectura tradicional de Von Neuman.
A diferencia de la mayora de los microprocesadores convencionales, el PC es tambin accesible al programador como registro de memoria interna de datos, en la posicin de 02. Es decir que cualquier instruccin comn que opere sobre registros puede ser utilizada para alterar el PC y desviar la ejecucin del programa. El uso indiscriminado de este tipo de instrucciones complica el programa y puede ser muy peligroso, ya que puede producir comportamientos difciles de predecir. Sin embargo, algunas de estas instrucciones utilizadas con cierto mtodo, pueden ser muy tiles para implementar poderosas estructuras de control tales como el goto computado. Como el microprocesador opera con datos de 8 bits, y la memoria de datos es tambin de 8 bits, estas instrucciones solo pueden leer o modificar los bits 0 a 7 del PC.
El registro TMR0 se incrementa en una unidad con cada impulso de reloj seleccionado mediante el registro OPTION. Cada vez que llega al valor FF, vuelve a 00 generando una interrupcin, si se ha autorizado, y contina su ciclo indefinidamente. El registro TMR0 se puede leer o escribir directamente con cualquier instruccin, con el fin de conocer su posicin actual, o para inicializarlo en un estado determinado. Es importante saber que despus de cualquier escritura en este registro, es necesario un retardo de dos ciclos de instruccin para que se retome la incrementacin. Este retraso es independiente de la fuente de reloj usada. Las instrucciones concernidas son MOVF TMR0 o CLRF TMR0. Para comprobar el paso por cero sin inferir en el desarrollo regular del recuento, es aconsejable utilizar, por ejemplo, una instruccin MOVF TMR0,W, que no hace mas que una lectura. El reloj interno deja de funcionar en el modo SLEEP, por lo que no se puede contar con sus interrupciones en este modo ni por consiguiente, que salga de este modo de funcionamiento por medio de dicha interrupcin. Obsrvese que todas las instrucciones que escriben en el TMR0 ponen a cero al prescaler (divisor), cuando ste est asignado al temporizador.
FSR.- El contenido del FSR se utiliza para el direccionamiento indirecto junto con el registro INDF. Este registro contiene 8 bits. PORTA y PORTB.- Cuando vimos los puertos se coment el uso de estos registros que contienen los niveles lgicos de las patillas de E/S. Cada bit se puede leer o escribir segn la patilla correspondiente se haya configurado como entrada o como salida. Conviene recordar que cualquier lnea puede funcionar como entrada o como salida. Sin embargo, si acta como entrada la informacin que se introduce no se memoriza, por lo que la informacin debe ser mantenida hasta que sea leda. Si la lnea acta como salida, el bit que procede del bus de datos se guarda en la bscula, con lo que la informacin que ofrece esta patilla permanece invariable hasta que se reescriba este bit. EEDATA.- (Datos de EEPROM) guarda el contenido de una posicin de la memoria EEPROM de datos antes de su escritura o despus de su lectura, segn leamos o escribamos en ella. Para leerla se sigue un proceso especial que se comentar mas adelante. Como ya sabemos la memoria EEPROM es bastante lenta, dato que tendremos en cuenta cuando accedamos a ella para escribirla, pues tarda unos 10 ms en completar el proceso EEADR.- El registro EEADR (Direccin de EEPROM) guarda la direccin de la posicin de memoria EEPROM cuando queramos acceder a ella, bien para su lectura, o bien para su escritura. El igual
que con el registro anterior, veremos su uso ms a fondo cuando lleguemos a las instrucciones que lo utilizan. El registro EEADR puede direcconar como mximo 256 bytes de los cuales slo los 64 primeros estn disponibles, con lo que los dos bits de mayor peso han de tener el valor de '0'. PCLATH.- Los 5 bits de mayor peso del PC que no pueden leerse ni escribirse directamente proceden del registro PCLATH en la direccin 0Ah vy 8Ah. PCL.-L os 8 bits de menor peso del PC los proporciona el registro PCL (02h) y a diferencia de la mayora de los microprocesadores convencionales, es tambin un registro accesible al programador como registro de memoria interna de datos. Es decir que cualquier instruccin comn que opere sobre registros puede ser utilizada para alterar el PCL y desviar la ejecucin del programa. INTCON.- Este registro contiene varios bits de seleccin de fuentes de interrupcin, el bit de activacin global de interrupciones y varios flag que indican la causa de una interrupcin. Sirve para el control global de las interrupciones y para indicar la procedencia de algunas de ellas, gracias a los bits de estado. Se dispone de cuatro potenciales recursos de interrupcin: Una fuente externa a travs del pin RB0/INT. El desbordamiento del temporizador 0 (TMR0). Un cambio de estado en los pines RB4 a RB7. Programacin de la EEPROM de datos.
OPTION.- El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupcin y la activacin de las resistencias de polarizacin del puerto B. Ocupa la posicin 81h de la pgina 1 del banco de registros. Debe escribirse usando la instruccin especial OPTION. Esta instruccin carga el contenido de W en el registro OPTION. EECON1.- Este registro contiene configuraciones importantes acerca de la escritura y la lectura de la EEPROM de datos. EECON2.- Este registro no est implementado fsicamente, por lo cual no se puede leer. Tan slo sirve para un proceso de proteccin de escritura que consiste en copiar en l unos datos especficos, con el fin de evitar que un programa por error pueda programar la EEPROM, manipulando simplemente los bits del EECON1.
hasta que sea leda. Si la lnea acta como salida, el bit que procede del bus de datos se guarda en la bscula, con lo que la informacin que ofrece esta patita permanece invariable hasta que se reescriba este bit.
Los bits de cada puerto se configuran mediante los bits correspondientes de dos registros especiales de control : Registro de Datos denominados PORTA PORTB: Se pueden leer o escribir segn que el puerto correspondiente se utilice como entrada o como salida. Registro de Control denominado TRISA TRISB: En los registros de Control se programa el sentido de funcionamiento de cada una de las lneas de E/S. Colocando un "0" en el correspondiente bit del registro TRISA TRISB, la lnea queda programada como salida mientras que colocando un "1" la lnea queda programada como entrada. Por ejemplo, si ponemos un 0 en el bit 3 del registro TRISA la patilla RA3 ser una salida y si ponemos un 1 en el bit 4 del registro TRISB entonces la patilla RB4 ser una entrada.
Los Puertos A y B (PORTA y PORTB) se corresponden con las posiciones 5 y 6 del rea de datos. Cuando se produce un reset, todos los bits de los registros TRIS pasan a tener el valor 1 y todas las lneas de E/S actan como entrada por evidentes motivos de seguridad para evitar daos irreparables. Todas las patillas de E/S que no se empleen deben ser llevadas a +5v, regla de las entradas CMOS, preferiblemente a travs de una resistencia para evitar que si por error se configurasen como salidas puedan darse problemas si presentan un estado bajo.
flanco con el que se detecta una interrupcin y la activacin de las resistencias de polarizacin del puerto B. Ocupa la posicin 81h de la pgina 1 del banco de registros. Debe escribirse usando la instruccin especial OPTION. Esta instruccin carga el contenido de W en el registro OPTION.
RBPU (RB Pull Up) Conexin de las resistencias de polarizacin del Puerto B. Se conectan todas cuando el puerto B actua como entrada. 1 = Todas las resistencias son desconectadas 0 = Las resistencias se activan de forma individual. INTDEG (INTerrupt EDGe) Selecciona el tipo de flanco para la interrupcin. Este bit indica el tipo de flanco de la seal externa que ha de provocar una interrupcin en la patita RB0/INT. 1 = La interrupcin es producida por el flanco ascendente. 0 = La interrupcin es producida por el flanco descendente. T0CS (Timer 0 Signal Source) Fuente de reloj para el TMR0. 1 = TMR0 se usa en modo contador de los pulsos introducidos a travs de A4/T0CKI 0 = TMR0 se usa en modo temporizador haciendo uso de los pulsos de reloj internos (Fosc/4). T0SE (Timer 0 Signal Edge) Tipo de flanco activo del T0CKI (patilla A4/T0CKI). 1 = El TMR0 se incrementa con el flanco descendente. 0 = El TMR0 se incrementa con el flanco ascendente. PSA (PreScaler Assignement) Como su nombre indica, se usa para la asignacin del divisor de frecuencias 1 = El divisor de frecuencia se asigna al WDT. 0 = El divisor de frecuencia se asigna a TMR0. PS0, PS1 y PS2 (Prescaler Rate Select Bits) Asigna la tasa del valor del divisor de frecuencias y difiere dependiendo del predivisor que se haya asignado al TMR0 o al WDT.
IRP: Register Bank Select. No se emplea en el PIC16F84. RP0 y RP1: Register Bank Select. Seleccin de pgina o banco de la memoria con direccionamiento directo. Cada pgina contiene 128 bytes. En el PIC16F84 slo se usa RP0, RP1 debe mantenerse a 0. TO: Time Out 1 = Tras conectar la alimentacin Vdd o ejecutar CLRWDT o SLEEP. 0 = Desbordamiento del Perro Guardin WDT. PD: Power Down 1 = Tras conectar la alimentacin Vdd o ejecutar CLRWDT. 0 = Al ejecutar la instruccin SLEEP. Z: Cero 1 = El resultado de una operacin aritmtica o lgica es 0. 0 = El resultado es distinto de 0. DC (Digit Carry) Acarreo en el 4 bit de menos peso. C (Carry) Acarreo en el 8 bit. Es el bit de acarreo en operaciones de suma AADWF y ADDLW y sustraccin SUBWF y SUBLW. Tambin los emplean las instrucciones RLF y RRF de rotacin de bits. 1 = Acarreo en la suma en el bit de mayor peso. 0 = Acarreo en la resta y no en la suma.
6.- LENGUAJE ENSAMBLADOR El nico lenguaje que entienden los microcontroladores es el cdigo mquina formado por ceros y unos del sistema binario. El lenguaje ensamblador expresa las instrucciones de una forma ms natural al hombre a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en cdigo mquina. El lenguaje ensamblador trabaja con nemnicos, que son grupos de caracteres alfanumricos que simbolizan las rdenes o tareas a realizar. La traduccin de los nemnicos a cdigo mquina entendible por el microcontrolador la lleva a cabo un programa ensamblador.
El programa escrito en lenguaje ensamblador se denomina cdigo fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente cdigo mquina, que suele tener la extensin *.hex. El lenguaje simblico que se utiliza para codificar los programas origen que se procesan por el ensamblador es llamado lenguaje ensamblador. Este lenguaje es una coleccin de smbolos mnemnicos que representan: operaciones (mnemnicos de instrucciones para la mquina o de directrices para el ensamblador), nombres simblicos, operadores y smbolos especiales. El lenguaje ensamblador proporciona cdigos de operacin de los mnemnicos para todas las instrucciones de la mquina contenidas en la lista de instrucciones. Adems, el lenguaje ensamblador contiene mnemnicos directrices, los cuales especifican acciones auxiliares que se llevan a cabo por el ensamblador. Estas directrices no siempre son traducidas a lenguaje maquina. Un programador escribe el programa origen en lenguaje ensamblador utilizando cualquier editor de textos o procesador de palabras que sea capaz de producir una salida de texto en ASCII. Una vez que el cdigo origen ha sido escrito, el archivo origen es ensamblado mediante su procesamiento a travs de algn ensamblador. EL CDIGO FUENTE Est compuesto por una sucesin de lneas de texto. Cada lnea puede estructurarse en hasta cuatro campos o columnas separados por uno o ms espacios o tabulaciones entre s. Campo de etiquetas. Expresiones alfanumricas escogidas por el usuario para identificar una determinada lnea. Todas las etiquetas tienen asignado el valor de la posicin de memoria en la que se encuentra el cdigo al que acompaan. Campo de cdigo. Corresponde al nemnico de una instruccin, de una directiva o de una llamada a macro. Campo de operandos y datos. Contiene los operandos que precisa el nemnico utilizado. Segn el cdigo, puede haber dos, uno o ningn operando. Campo de comentarios. Dentro de una lnea, todo lo que se encuentre a continuacin de un punto y coma (;) ser ignorado por el programa ensamblador y considerado como comentario.
6.1 Etiquetas
La etiqueta es opcional. El comando puede ser un mnemnico del conjunto de instrucciones. El operando esta asociado al comando, si no hay comando no hay operando, e inclusive algunos comandos no llevan operando. El comentario es opcional para el compilador aunque es buena prctica considerarlo obligatorio para el programador. La etiqueta, es el campo que empieza en la primer posicin de la lnea. No se pueden insertar espacios o tabulaciones antes de la etiqueta sino ser considerado comando. Identifica la lnea de programa haciendo que el compilador le asigne un valor automticamente. Si se trata de una lnea cuyo comando es una instruccin de programa del microcontrolador, se le asigna el valor de la direccin de memoria correspondiente a dicha instruccin (location counter). En otros casos se le asigna un valor de una constante, o la direccin de una variable, o ser el nombre de una macroinstruccin, etc. El campo de etiquetas aparece como el primer campo dentro de un enunciado origen. El campo de etiquetas puede adoptar cualquiera de las siguientes formas: Un asterisco ( * ) como el primer carcter en el campo de etiquetas indica que el resto del enunciado origen es un comentario. Los comentarios son ignorados por el ensamblador e impresos en el listado origen solamente como informacin de programacin. Un espacio de carcter en blanco (TAB o espacio) como primer carcter indica que el campo de etiquetas se encuentra vaco. La lnea no tiene una etiqueta y no es un comentario. Un smbolo como primer carcter indica que la lnea tiene etiqueta. Estos smbolos son las letras maysculas y minsculas ( a - z ), los dgitos ( 0 - 9 ) y caracteres especiales como punto ( . ), signo de pesos ( $ ) y subrayado ( _ ). Estos smbolos consisten de uno a quince caracteres, el primero de los cuales debe ser alfabtico o un carcter especial punto o subrayado. Todos los caracteres son significantes y las maysculas y minsculas son distintas. Un smbolo puede aparecer solamente una vez en el campo de etiquetas. Si un smbolo aparece ms de una vez en el campo de etiquetas, toda referencia a dicho smbolo ser marcada como error. Con la excepcin de algunas directrices a la etiqueta se le asigna el valor del contador de programa ( PC ) del primer byte de la instruccin o dato que se est ensamblando. El valor asignado a la etiqueta es absoluto. De manera opcional, las etiquetas pueden ser terminadas con el smbolo de dos puntos ( : ). Si dicho smbolo es utilizado, no formar parte de la etiqueta, simplemente servir como separacin entre la etiqueta y el resto del enunciado origen. De esta forma, los siguientes fragmentos son equivalentes:
Una etiqueta puede aparecer por si sola en una lnea. El ensamblador interpreta esto como "establece el valor de la etiqueta igual al valor actual del contador de programa ( PC )". 6.2 Cdigo de operacin Instrucciones: son aquellos nemnicos que son convertidos por el ensamblador en cdigo mquina que puede ejecutar el ncleo del microcontrolador. En la gama media (PIC16xxx) cada nemnico se convierte en una palabra en la memoria de programa Directivas. Pseudoinstrucciones que controlan el proceso de ensamblado del programa, pero no son parte del cdigo. Son indicaciones al programa ensamblador de cmo tiene que generar el cdigo mquina Macros: Secuencia de nemnicos que pueden insertarse en el cdigofuente del ensamblador de una manera abreviada mediante una simple llamada.
6.3 Operandos Contiene los operandos que precisa el nemnico utilizado. Segn el cdigo, puede haber dos, uno o ningn operando. El ensamblador MPASM (distribuido por Microchip) soporta los sistemas de numeracin decimal, hexadecimal, octal, binario y ASCII. Los nemnicos que tengan una constante como operando debern incluirla respetando la sintaxis que se indica a continuacin.
Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un cero para no confundirlas con una etiqueta. Ejemplo: movlw 0F7h Expresiones.- Una expresin es una combinacin de smbolos constantes, operadores algebraicos y parntesis. La expresin especifica un valor, el cual ser utilizado como operando.
Las expresiones pueden consistir de smbolos, constantes o del caracter * (denotando el valor actual del contador de programa PC) unidos entre s por alguno de los operadores: +, -, *, /, %, &, I, ^. Operadores.- Los operadores son iguales a los utilizados en el lenguaje de programacin C: + suma - resta * multiplicacin / divisin % residuo despus de divisin & and I or ^ or exclusiva Las expresiones son evaluadas de izquierda a derecha y las expresiones con parntesis no estn previstas. La aritmtica es realizada con precisin de enteros en complemento a dos con signo. Smbolos.- Cada smbolo se encuentra asociado con un valor entero de 16 bits, el cual es utilizado en lugar del smbolo durante la evaluacin de la expresin. El asterisco (*) utilizado en una expresin como smbolo representa el valor actual del contador de localidades (el primer byte de una instruccin de varios bytes ). Constantes.- Las constantes representan cantidades de informacin que no varan en su valor durante la ejecucin del programa. Las constantes pueden ser presentadas al ensamblador en uno de cinco posibles formatos: decimal, hexadecimal, binario, octal o ASCII. El programador le indica al ensamblador el formato del nmero con los siguientes prefijos: $ Hexadecimal % Binario @ Octal ASCII Las constantes sin prefijo son interpretadas como decimal. El ensamblador convierte todas las constantes a cdigo mquina binario y son desplegadas en el listado del ensamblado como valores hexadecimales.
6.4 Comentarios Dentro de una lnea, todo lo que se encuentre a continuacin de un punto y coma (;) ser ignorado por el programa ensamblador y considerado como comentario. El ltimo campo de un enunciado origen del ensamblador es el campo de comentarios. Este campo es opcional y solamente es impreso en el listado origen con propsitos de documentacin.
El campo de comentarios es separado del campo de los operandos (o del campo de operaciones sino se requiere operando) por al menos un espacio en blanco. El campo de comentarios puede contener cualquier carcter imprimible ASCII. 6.5 Normas de estilo para escribir un archivo fuente