Vous êtes sur la page 1sur 18

Programacin en Lenguaje Ensamblador Los Registros Un registro es un lugar dentro del PIC que puede ser escrito, ledo

o o ambas cosas. Piensa en un registro como si fuese un trozo de papel donde tu puedes ver la informacin o escribirla. La figura a continuacion muestra el mapa de registros del interior del PIC.

Registro INDF (00h y 80h) El registro INDF (Indirect File) que ocupa la posicin 00 no tiene existencia fsica, por lo que no se podr acceder a l. Registro TMR0 (01h)

El registro TMR0 (Timer 0) almacena el valor del contador TMR0, que como ya sabemos, est funcionando continuamente e incrementando el valor que tiene almacenado. Las opciones que controlan este contador residen en el registro OPTION. Registro EEDATA (08h) El registro 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. Registro EEADR (09h) 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. Registro INTCON (0Bh y 8Bh) Sirve para el control global de las interrupciones y para indicar la procedencia de algunas de ellas, gracias a los bits de estado. Registro OPTION (80h) El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, Debe escribirse usando la instruccin especial OPTION. Esta instruccin carga el contenido de W en el registro OPTION. Registro TRISA y TRISB (85h y 86h) Estos registros son idnticos para el puerto A y el puerto B, con la diferencia de que uno ser de 5 bits y otro de 8 bits, el mismo nmero de bits que tiene cada puerto. PORTA y PORTB Para poner uno de nuestros pines de salida a nivel alto, simplemente ponemos un 1 el bit correspondiente en nuestro registro PORTA o PORTB. El formato es el mismo que para los registros TRISA y TRISB. Para leer si un pin est a nivel alto o nivel bajo en los pines de nuestro puerto, podemos ejecutar un chequeo para ver si el bit en particular correspondiente esta puesto a nivel alto (1) o est puesto a nivel bajo (0). El registro W es un registro de propsito general al cual le puedes asignar cualquier valor que desees.

Ejemplo de un cdigo Hacemos esto modificando el registro STATUS, que est en la direccin 03h, poniendo el bit 5 a 1. BSF 03h,5 La instruccin BSF significa en ingles "Bit Set F" (Poner a 1 un bit de la Memoria). La letra F significa que vamos a utilizar una posicin de memoria, o un registro en memoria. Vamos a utilizar dos nmeros despus de esta instruccin - 03h, el cual se refiere a la direccin del registro STATUS, y el nmero 5 que corresponde al nmero de bit. Por tanto, lo que estamos diciendo es "pon a 1 el bit 5 de la direccin de memoria 03h". Ahora ya estamos en el banco 1. MOVLW b'00110 Estamos poniendo el valor binario 00110 (la letra 'b' significa que el nmero est en binario) en nuestro registro de propsito general W. Podramos haber hecho esto en hexadecimal, en cuyo caso nuestra instruccin hubiese sido: MOVLW 06h Cualquiera de las dos funcionar. La instruccin MOVLW significa en ingles "Move Literal Value into W", en castellano, mover un valor literal directamente al registro W. Ahora necesitamos poner este valor en el registro TRISA para configurar el puerto: MOVWF 85h Esta instruccin significa "poner los contenidos de W en el registro cuya direccin viene a continuacin", en este caso la direccin 85h, que apunta a TRISA. Nuestro registro TRISA ahora tiene el valor 00110 o mostrado grficamente :

Ahora tenemos que configurar los pines del Puerto A, y para ello necesitamos volver al banco 0 para manipular cualquier dato. BCF 03h,5

Esta instruccin hace lo contrario a BSF. Significa en ingles "Bit Clear F" (en castellano, poner a 0 un bit de la memoria). Los dos nmeros que le siguen son la direccin del registro, en este caso del registro STATUS, y el nmero de bit, es este caso el 5. As que lo que hemos hecho ahora es poner a 0 el bit 5 del registro STATUS. Ya estamos de vuelta en el Banco 0. Aqu est el cdigo en un solo bloque: BSF 03h,5 ; Ve al banco 1 MOVLW 06h ; Pon 00110 en W MOVWF 85h ; Mueve 00110 a TRISA BCF 03h,5 ; Vuelve al Banco 0

Programacin de Puertos Digitales PUERTOS DE E/S: El uC PIC18F4550 dispone 5 puertos de E/S que incluyen un total de 35 lneas digitales de E/S:

Todas las lneas digitales de E/S disponen de al menos una funcin alternativa asociada a alguna circuiteria especifica del uC. Cuando una lnea trabaja en el modo alternativo no puede ser utilizada como lnea digital de E/S estndar.

PUERTO A: Dispone de 7 lneas de E/S. Las funciones alternativas son: RA0: entrada analgica (AN0)/ entrada de comparacin (C1IN-) RA1: entrada analgica (AN1)/ entrada de comparacin (C2IN-) RA2: entrada analgica (AN2)/ entrada de comparacin (C2IN+) RA3: entrada analgica (AN3)/ entrada de comparacin (C1IN+) RA4: entrada de reloj del Temporizador 0 (T0CKI)/salida de comparacin (C1OUT) RA5: entrada analgica (AN4)/ salida de comparacin (C2OUT)/HLVDIN entrada de deteccin de tensin alta/baja RA6: entrada del oscilador principal (OSC2)/salida de seal de reloj (CLK0) En el reset las lneas RA0, RA1, RA2, RA3 y RA5 se configuran como lneas de entrada analgicas. Para poder utilizarlas como lneas digitales de E/S hay que desactivar la funcin analgica:

PUERTO B: Dispone de 8 lneas de E/S. Las funciones alternativas son: RB0: entrada analgica (AN12)/ interrupcin externa 0 (INT0)/entrada de fallo del ECCP (FLT0)/entrada de datos del SPI (SDI)/lnea de datos del I2C (SDA) RB1: entrada analgica (AN10)/ interrupcin externa 1 (INT1)/lnea de reloj del SPI (SDI)/lnea de reloj del I2C (SDA) RB2: entrada analgica (AN8)/ interrupcin externa 2 (INT2)/salida de datos del

USB (VCMO) RB3: entrada analgica (AN9)/ lnea de E/S del CCP2 (CCP2)/salida de datos del USB (VPO) RB4: entrada analgica (AN11)/ interrupcin por cambio en pin (KBI0)/ salida de CS del SSP (CSSP) RB5: interrupcin por cambio en pin (KBI1)/ lnea de programacin (PGM) RB6: interrupcin por cambio en pin (KBI2)/ lnea de programacin (PGC) RB7: interrupcin por cambio en pin (KBI3)/ lnea de programacin (PGD) Resistencias de pull.up: Todas las lneas del puerto B disponen de resistencias de pull- up internas que pueden ser activadas poniendo el bit RBPU del registro INTCON2 a 0 (RPBU=1 despus de un reset). Si un lnea del puerto B se configura como salida la resistencia de pull-up correspondiente se desactiva automticamente. Por defecto, en el reset las lneas RB4..RB0 estn programadas como entradas analgicas. Existen dos formas de configurar RB4..RB0 como lneas de E/S digitales: Poniendo a 0 el bit PBADEN del registro de configuracin CONFIG3H=> en el reset RB4..RB0 se configuran como lneas de E/S digitales Si PBADEN=1 (valor por defecto) se pueden configurar RB4..RB0 como lneas del E/S digitales desactivando la funcin analgica:

Puerto C Dispone de 5 lneas de E/S (RC0, RC1, RC2, RC6 y RC7) y 2 lneas de solo entrada (RC4 y RC5). Las funciones alternativas son: RC0: salida del oscilador del Temp. 1 (T1OSO)/ entrada de contador de los Temp. 1 y 3 (T13CKI) RC1: entrada del oscilador del Temp. 1 (T1OSI)/ lnea de E/S del CCP2 (CCP2)/ salida OE del transceiver del USB (UOE)

RC2: lnea de E/S del CCP1 (CCP1)/ salida PWM del ECCP1 (P1A) RC4: lnea menos del bus USB (D-) / lnea de entrada del USB (VM) RC5: lnea ms del bus USB (D-) / lnea de entrada del USB (VP) RC6: salida de transmisin del EUSART (TX)/ lnea de reloj del EUSART (CK) RC7: entrada de recepcin del EUSART (RX)/ lnea de datos sncrona del EUSART (DT)/ salida de datos del SPI (SDO) En el reset todas las lneas del puerto C quedan configuradas como entradas digitales. Puerto D Dispone de 8 lneas de E/S. Las funciones alternativas son: RD0: lnea de datos del SPP (SPP0) RD1: lnea de datos del SPP (SPP1) RD2: lnea de datos del SPP (SPP2) RD3: lnea de datos del SPP (SPP3) RD4: lnea de datos del SPP (SPP4) RD5: lnea de datos del SPP (SPP5) / salida PWM del ECCP1 (P1B) RD6: lnea de datos del SPP (SPP6) / salida PWM del ECCP1 (P1C) RD7: lnea de datos del SPP (SPP7) / salida PWM del ECCP1 (P1D) Resistencias de pull.up: Todas las lneas del puerto D disponen de resistencias de pull-up internas que pueden ser activadas poniendo el bit RDPU del registro PORTE a 1 (RPDU=0 despus de un reset). Si una lnea del puerto D se configura como salida la resistencia de pull-up correspondiente se desactiva automticamente Puerto E: Dispone de 3 lneas de E/S (RE0, RE1 y RE2) y 1 lnea de solo entrada (RE3). Las funciones alternativas son: RE0: entrada analgica (AN5)/ salida de reloj 1 del SPP (CK1SPP) RE1: entrada analgica (AN6)/ salida de reloj 2 del SPP (CK2SPP)

RE2: entrada analgica (AN7)/ salida de habilitacin del SPP (OESPP) RE3: Lnea de reset externo (MCLR) / lnea de programacin (VPP) En el reset todas las lneas RE2..RE0 se configuran como entradas analgicas. Para poder utilizarlas como lneas digitales de E/S hay que desactivar la funcin analgica:

La lnea RE3 por defecto tiene la funcin de Reset del uC. Si se desea desactivar la funcin de Reset y utilizar RE3 como lnea de entrada digital hay que poner a 0 el bit MCLRE del registro de configuracin CONFIG3H

ESTRUCTURA DE UN PROGRAMA Para que nuestros programas tengan una apariencia ordenada y se facilite la comprensin del mismo ante otros programadores que deseen realizar mejoras a ste, es necesario establecer una estructura que nos permita identificar fcilmente cada una de las partes que lo componen

Seccin A: Corresponde al encabezado del programa, en el cual se debe Considerar informacin bsica del mismo, como el nombre, la identificacin de autor, Copyright, fecha de elaboracin o fecha de los ltimos cambios realizados, versin del programa que se est realizando, e incluso una breve descripcin acerca del objetivo del programa y su aplicacin en un determinado circuito electrnico. Es importante resaltar que cada lnea del encabezado debe empezar con una comilla simple, en forma de comentario (ver Seccin D). Seccin B: Esta seccin empieza en la columna cero del editor de texto de Microcode Studio, y en ella se pueden declarar las definiciones (concepto que estudiaremos mas adelante) y las etiquetas de cada una de las subrutinas que sern programadas. Las etiquetas identifican puntos especficos o subrutinas dentro de un programa. Son definidas por el programador y deben tener al final de cada una de ellas el smbolo de dos puntos, que definen el final de la misma.

Seccin C: Estar destinada para las instrucciones de programa y la misma Est separada de la columna cero del editor de texto por una tabulacin, es decir, cuando el cursor se encuentra en la columna cero, presionamos una vez la tecla TAB, y de esta manera establecemos un espacio mnimo, siempre igual o superior entre la seccin B y C. Seccin D: Esta destinada para realizar comentarios acerca de la funcin que Estar cumpliendo una instruccin especfica en nuestro programa. Cada comentario debe empezar siempre con una comilla simple como se muestra a continuacin: ' Define el Oscilador para un Cristal ' de 4 Mhz. Cuando un comentario es demasiado extenso, podemos continuar el mismo en la siguiente lnea, siempre que la frase comience con su respectiva comilla. Subrutina Una subrutina se presenta como un algoritmo separado del algoritmo principal, y estar destinado a resolver una tarea especfica. Las subrutinas pueden ser referidas cada vez que sea necesario, llamando a la etiqueta que corresponde a sta, la cual debe ir siempre al inicio de la misma Define: establece una serie de parmetros que de no ser tomados en cuenta, causar que nuestros programas sencillamente no funcionen en la mayora de los casos. Esta serie de parmetros estn directamente relacionados con dispositivos externos al microcontrolador.

En las variables podemos almacenar datos temporalmente, los cuales podrn ser consultados o modificados cada vez que sea necesario. Regularmente la definicin de variables se hace al inicio del programa y para ello se utiliza la palabra VAR seguida por el tipo de variable segn la tabla que mostramos a continuacin: El nombre de la variable es elegido por el programador y el tipo de variable se define segn el tipo de dato que se desea almacenar temporalmente.

Ayudan a identificar unvalor constante en nuestro programa, facilitando an ms la comprensin del mismo a la hora de verificar su funcionamiento. En la tabla 4.3 se puede observar la forma de declarar una constante.

Simbolos o Alias Proveen un nombre nico y especfico a elementos o variables dentro de nuestro programa. Para definir un smbolo, utilizamos la palabra Symbol, seguida del alias del elemento, el smbolo de igualdad =, y por ltimo el elemento en cuestin: Symbol {alias} = {elemento}

Por ejemplo, si deseamos controlar un motor DC a travs de uno de los pines del puerto A de un microcontrolador, resultara mucho mas sencillo referirse a este pin como Motor, en vez de referirse a l como PortA.0. Entonces, Symbol Motor = PORTA.0

Ejemplo: ;---------------Encabezado------------list radix p=18f4550 ; usaremos el PIC 18f4550 hex ; y la numeracin hexadecimal

;------------mapa de memoria--------estado equ trisa trisb equ equ 0x03 0x05 0x06 ; Aqu le asignamos nombres a los ; registros indicando la posicin ; en la que se encuentran

;-------Configuracin de puertos------reset org 0x100 ; origen del programa, aqu comenzar ; siempre que ocurra un reset goto org inicio bsf inicio 0x05 ; salto a "inicio" ; origen del cdigo de programa

estado,5 ; pongo rp0 a 1 y paso al banco1

movlw b'11111' ; cargo W con 11111 movwf trisa ; y paso el valor a trisa

movlw b'00000000' ; cargo W con 00000000 movwf trisb bcf estado,5 ; y paso el valor a trisb ; pongo rp0 a 0 y regreso al banco0

;-----------------------------------------end ; se acab

;------------------------------------------

Vous aimerez peut-être aussi