Está en la página 1de 25

ORGANIZACIN INTERNA + INTRODUCCIN AL ENSAMBLADOR

ORGANIZACIN de la MEMORIA Dentro del PIC16F877 se distinguen tres bloques de memoria. Memoria de programa En sus 8192 posiciones (8K) contiene el programa con las instrucciones que gobiernan la aplicacin. Es del tipo no voltil. Memoria de datos RAM Guarda las variables y datos. Consta de varios registros de 8 bits. Es voltil. Memoria EEPROM de datos Es una pequea rea de memoria de datos de lectura y escritura no voltil que permite garantizar que determinada informacin estar siempre disponible al reinicializarse el programa. Se gestiona de manera distinta a la memoria de datos RAM.

0000h 0001h 0002h 0003h 0004h 0005h 0006h 0007h 0008h 0009h

RESET

La memoria de programa Almacena todas las instrucciones del programa de control, que debe estar grabado de forma permanente.

INT

La informacin contenida en esta memoria se graba previamente mediante un equipo fsico denominado programador o grabador.
El PIC16F877 tiene una memoria de programa no voltil denominada ROM Flash que admite unas 1000 grabaciones. La memoria de programa est organizada en palabras de 14 bits cada una. Todas las instrucciones ocupan una posicin de memoria de programa

000Ah
000Bh 1FFCh 1FFDh 1FFEh 1FFFh

La memoria de datos Almacena todas los datos que se manejan en un programa. Se distinguen dos tipos de registro: Registros de funciones especiales SFR. Son los primeros registros. Cada uno de ellos cumple un propsito especial en el control del PIC. Registros de propsito general GPR. Se pueden usar para guardar datos temporales. El PIC16F877 dispone de 368. Cuenta con cuatro bancos de memoria: Bancos 0, 1, 2 y 3. Los SFR aparecen de la direccin 00h a 1Fh del Banco 0, de 80h a 9Fh del Banco 1, de 100h a 10F en el Banco 2 y de 180h a 18Fh del Banco 3. Algunos son accesibles desde dos o ms bancos.

Los GPR ocupan 368 posiciones de memoria. Algunas posiciones de los Bancos 1 a 3 se mapean sobre el Banco 0.
Existen zonas de memoria no empleadas que devuelven 0 en caso de lectura.

STATUS

La memoria de datos
STATUS STATUS PORTB

STATUS

PORTB

LENGUAJE ENSAMBLADOR El nico lenguaje que entienden los microcontroladores es el lenguaje 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 sus 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 juego de instrucciones Es un juego reducido de 35 instrucciones muy simples y rpidas. La mayora de las instrucciones se ejecuta en 4 ciclos de reloj; los saltos se ejecutan en 8. Todas las instrucciones tienen la misma longitud: 14 bits. Instrucciones de CARGA
NEMNICO DESCRIPCIN FLAGS AFECTADOS

clrf
clrw movf movlw movwf

f
f,d k f

00 (f)
00 (W) (f) (destino) k (W) (W) (f)

Z
Z Z Ninguno Ninguno

Instrucciones de BIT
NEMNICO DESCRIPCIN FLAGS AFECTADOS

bcf bsf

f,b f,b

Pone a 0 el bit b del registro f Pone a 1 el bit b del registro f

Ninguno Ninguno

Instrucciones ARITMTICAS
NEMNICO DESCRIPCIN FLAGS AFECTADOS

addlw addwf decf incf sublw subwf

k f,d f,d f,d k f,d

(W) + k (W) (W) + (f) (destino) (f) - 1 (destino) (f) + 1 (destino) K - (W) (W) (f) - (W) (destino)

C DC - Z C DC - Z Z Z C DC - Z C DC - Z

Instrucciones LGICAS
NEMNICO DESCRIPCIN FLAGS AFECTADOS

andlw andwf comf

k f,d f,d

(W) AND k (W) (W) AND (f) (destino) (/f) (destino)

Z Z Z

iorlw
iorwf rlf rrf

k
f,d f,d f,d

(W) OR k (W)
(W) OR (f) (destino) Rota (f) a izquierda (destino) Rota (f) a derecha (destino)

Z
Z C C

swap
xorlw xorwf

f,d
k f,d

Intercambia nibbles (f) (destino)


(W) XOR k (W) (W) XOR (f) (destino)

Ninguno
Z Z

Instrucciones de SALTO
NEMNICO DESCRIPCIN FLAGS AFECTADOS

btfsc btfss incfsz goto

f,b f,b f,d k

Salta si el bit b de f es 0 Salta si el bit b de f es 1 (f) - 1 (destino) y salta si es 0 (f) + 1 (destino) y salta si es 0 Salta a la direccin k Instrucciones de manejo de SUBRUTINAS

Ninguno Ninguno Ninguno Ninguno Ninguno

decfsz f,d

NEMNICO

DESCRIPCIN

FLAGS AFECTADOS

call retfie retlw return

k k

Llamada a subrutina Retorno de una interrupcin Retorno con un literal en (W) Retorno de una subrutina

Ninguno Ninguno Ninguno Ninguno

Instrucciones ESPECIALES
NEMNICO DESCRIPCIN FLAGS AFECTADOS

clrwdt nop sleep

Borra Timer del Watchdog No operacin Entra en modo de bajo consumo

/TO - /PD Ninguno /TO - /PD

El cdigo fuente Est compuesto por una sucesin de lneas de programa. Cada lnea de programa puede estar compuesta de 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 instruccin del programa. Todas las etiquetas tienen asignado el valor de la posicin de memoria en la que se encuentra la instruccin a la que acompaan. Campo del cdigo de operacin. Corresponde al nemnico. Campo de operandos y datos. Contiene los operandos que precisa el nemnico utilizado. Segn la instruccin, 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 y considerado como comentario.

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.
TIPO SINTAXIS

Decimal Hexadecimal Octal Binario ASCII Cadena

D<valor> H<valor>

d<valor> h<valor>

.<valor> 0x<valor>

<valor>H
O<valor> B<valor> A<carcter>

<valor>h
o<valor> b<valor> a<carcter> <cadena>

<carcter>

Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un cero para no confundirlas con una etiqueta. Ejemplo: movlw 0F7h

Directivas Controlan el proceso de ensamblado del programa, pero no son parte del mismo (tambin se conocen como pseudoinstrucciones).

Hay ms de 50 directivas reconocidas por MPASM. A continuacin se recogen algunas de las ms habituales
END Es la nica directiva obligatoria. Indica al ensamblador dnde debe detener el proceso. Debe colocarse en la ltima lnea del programa. <etiqueta> EQU <expresin> El valor <expresin> es asignado a <etiqueta>. Estas directivas se suelen colocar al principio del programa y habitualmente se usan para definir constantes y direcciones de memoria. [<etiqueta>] ORG <expresin> Las instrucciones del cdigo fuente que siguen a esta directiva se ensamblan a partir de la posicin indicada por <expresin>.

__CONFIG <expresin> [& <expresin> & ... & <expresin>] Permite indicar la configuracin elegida para la grabacin del PIC. Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC LIST P=16F877 Indica el tipo de microcontrolador utilizado. INCLUDE <p16F877.inc> o INCLUDE p16F877.inc Incluye en el programa un fichero donde se definen las etiquetas con las que se nombra a los diferentes registros y sus bits. Este fichero se encuentra en el directorio principal del programa ensamblador. Puede usarse esta directiva para incluir cualquier otro fichero (Ojo! El fichero de inclusin no puede terminar con una directiva END).

DT <expr1> [, <expr2>, ... , <exprN>] Genera una instruccin retlw por cada expresin que incluya la directiva. Si la expresin es del tipo cadena, se generar una instruccin retlw por cada carcter de la misma.

ESTRUCTURA DEL PROGRAMA

Directiva LIST
Este comando sirve para que el compilador tenga en cuenta sobre qu procesador se est trabajando. Este comando debe estar en todo proyecto, con la siguiente sintaxis. LIST P=PIC16F84A

Directiva EQU
El nombre viene de la palabra "equal", (igual)". La directiva EQU permite al programador "igualar" nombres personalizados a datos o direcciones. Los nombres utilizados se refieren generalmente a direcciones de dispositivos, datos numricos, direcciones de comienzo, direcciones fijas, posiciones de bits, etc. Un nombre es ms descriptivo que una simple direccin y la tarea de programar se har mucho ms sencilla. Tambin podemos asignar un nombre a una instruccin que repitamos varias veces a lo largo de un algoritmo, de manera que sea mucho ms sencilla la programacin. A estos nombre que asignamos mediante esta directiva se les denomina constantes, ya que el registro al que apuntan no variar durante el programa.

No siempre es necesario que con esta directiva se igualen posiciones de memoria a las etiquetas, ya que podemos poner nombres a datos. Podemos definir una equivalencia con el nombre de otra equivalencia ya definida y rtealizar operaciones matemticas. Por ejemplo, podemos calcular la frecuencia del ciclo mquina a partir de la frecuencia de reloj con la finalidad de emplearla para hacer otros clculos de la manera que se describe a continuacin: PORT_B EQU PORT_A+1 PORT_C EQU PORT_A+2 FIN EQU START+100 FIN2 EQU START+200 clockrate EQU .4000000 ;frecuencia del cristal fclk EQU clockrate/4 ;frecuencia del reloj interno

Directiva ORG
Esta directiva dice al ensamblador a partir de que posicin de memoria de programa se situarn las siguientes instrucciones. Rutinas de comienzo, subrutinas de interrupcin y otros programas deben comenzar en locaciones de memoria fijados por la estructura del microcontrolador. Recordemos que el 16F84 slo tiene 1024 posiciones de memoria flash para cdigo. La directiva ORG hace al compilador colocar el cdigo que le sigue en una nueva direccin de memoria (la salida del compilador no solo coloca los cdigos de operacin sino tambin las direcciones de cada instruccin del programa). Usualmente se la utiliza para: reset, programas de servicios de interrupcin, programa principal, subrutinas.

También podría gustarte