Está en la página 1de 18

PALTA_1 PARA PROGRAMAR MICROCONTROLADORES

P.G.F.

Ing. Paul Glvez 2010

PASOS PARA DESARROLLAR UN PROGRAMA


Como podemos apreciar todo comienza en una idea la cual se ha de plasmar en diagramas de flujo o autmatas o alguna otra metodologa que ayude al modelamiento, una vez superado este punto procedemos a usar un editor de texto para codificar el diagrama de flujo a travs de las instrucciones con que cuenta el microcontrolador. A continuacin presentamos ese archivo a un programa ensamblador (si es que usamos el lenguaje ensamblador) o un compilador (si usamos otro lenguaje como el C o Basic) aqu se depuran los errores sintcticos que son errores en la estructura del lenguaje de programacin. Una vez que superamos esa etapa procedemos a usar un software, para simular el programa verificando que la solucin es vlida. En caso que la simulacin indique errores procedemos a replantear la solucin retomando el punto inicial. Si la solucin es la que deseamos procedemos a grabar el programa (debidamente compilado) en el microcontrolador haciendo uso de una herramienta (grabador de microcontroladores). En este punto es posible aplicar un emulador o un ICD a fin de verificar que los resultados elaborados por el simulador son apropiados, el emulador o ICD a diferencia del simulador trabaja sobre hardware real. En caso que falle en este punto retomamos el diseo original.
S

Inicio

Idea, planteamiento

Edicin del programa fuente

Ensamblar (ASM, C) >>> Archivo *.HEX

Simular

Depurar

N Grabacin en el microcontrolador

Montaje de prototipo

Depurar en tiempo real

Superada ambas fases procedemos a colocarlo sobre el hardware final que ha de operar.
Fin

P.G.F.

Descripcin general de las instrucciones


Los programas estn compuestos por instrucciones. El PIC16F877 cuenta con 35 instrucciones que iremos desarrollando conforme avancemos en el curso. Cada instruccin esta representada por 14 bits. Los 14 bits a su vez se dividen en: Cdigo de operacin (OPCODE), que especifica cual es la instruccin a la que hacemos referencia, por ende cada instruccin tiene un cdigo en particular. Operadores, cada instruccin es aplicada sobre determinados operadores, parte de los 14 bits estn destinados a especificar quienes son los registros o valores que se vern afectados como resultado de la aplicacin de la instruccin.

P.G.F.

Mnemnico

Descripcin

Ciclos

Cdigo de Mquina

Banderas afectadas

Operaciones con el archivo de registros orientadas a bytes


ADDWF f,d Suma f + W 1 00 0111 dfff ffff C,DC,Z

ANDWF f,d
CLRF f CLRW COMF f,d DECF f,d DECFSZ f,d INCF f,d INCFSZ f,d IORWF f,d MOVF f,d MOVWF f

W AND f
Limpia f Limpia W Complementa los bits de f Decrementa f en 1 Decrementa f, escapa si 0 Incrementa f en 1 Incrementa f, escapa si 0 W OR f Copia el contenido de f Copia contenido de W en f

1
1 1 1 1 1(2) 1 1(2) 1 1 1

00 0101 dfff

ffff

Z
Z Z Z Z

00 0001 1fff ffff 00 0001 0xxx xxxx 00 1001 dfff 00 0011 dfff ffff ffff

00 1011 dfff

ffff

00 1010 dfff 00 1111 dfff

ffff ffff

00 0100 dfff ffff 00 1000 dfff ffff 00 0000 1fff ffff

Z Z

00 0000 0xx0 0000 NOP RLF f,d RRF f,d SUBWF f,d SWAPF f,d XORWF f,d No operacin Rota f a la izquierda Rota f a la derecha Resta f W Intercambia nibbles de f W EXOR f 1 1 1 1 1 00 1101 dfff ffff 00 1100 dfff ffff 00 0010 dfff ffff C C C,DC,Z

00 1110 dfff ffff

P.G.F.

00 0110 dfff ffff

Mnemnico

Descripcin

Ciclos

Cdigo de Mquina

Banderas afectadas

Operaciones con el archivo de registros orientadas a bits


01 00bb bfff ffff BCF f,b Limpia bit b en f 1 01 01bb bfff ffff BSF f,b Pone bit b en f 1 01 10bb bfff ffff BTFSC f,b Prueba bit b en f, escapa si 0 1(2) 01 11bb bfff ffff BTFSS f,b Prueba bit b en f, escapa si 1 1(2)

P.G.F.

Mnemnico

Descripcin

Ciclos

Cdigo de Mquina

Banderas afectadas

Operaciones con literales y de control del programa


ADDLW k ANDLW k CALL k CLRWDT GOTO k IORLW k MOVLW k Suma literal k + W W k AND W W Llamado a subrutina Limpia timer del watchdog Salto a la direccin k k OR W W Copia literal a W 1 1 2 1 2 1 1 00 0000 0000 1001 RETFIE Retorna de interrupcin 2 11 01xx kkkk kkkk RETLW k Retorna con literal k en W 2 00 0000 0000 1000 RETURN SLEEP SUBLW k XORLW k Retorna de subrutina Activa Modo standby Resta k W W k EXOR W W 2 1 1 1 00 0000 0110 0011 11 110x kkkk kkkk 11 1010 kkkk kkkk
TO , PD

11 111x kkkk kkkk 11 1001 kkkk kkkk 10 0kkk kkkk kkkk

C,DC,Z Z

00 0000 0110 0100 10 1kkk kkkk kkkk

TO , PD

11 0000 kkkk kkkk 11 00xx kkkk kkkk

C,CD,Z Z

Notacin: d= destino del resultado d = 0 destino W d = 1 destino registro f =direccin del registro (memoria RAM), b= nmero de bit (0 a 7), k= dato de 8 bits

P.G.F.

Las instrucciones estn divididas en tres clases: Orientadas a byte Instrucciones cuya representacin es:
13 8 7 6 0

El bit d especifica el destino del resultado de la operacin: d = 0: destino W d = 1: destino f f = direccin de 7 bits del archivo de registros.

Las instrucciones orientadas a byte reservan los 7 bits de menor peso para indicar la direccin del registro que ser operado. Una vez que se lleva a efecto la operacin usamos el bit d para indicar donde ser almacenado el resultado. Si d es 0 el resultado se almacena en el registro de trabajo W, si d es 1 el resultado ser guardado en el mismo registro (o file) que se opero.

P.G.F.

Orientadas a bit Representada por:


13 10 9 7 6 0

b : Especificacin en tres bits del bit sobre el que se va a operar f = direccin de 7 bits del archivo de registros.

Las operaciones orientas a bit buscan escribir o leer una posicin (bit) dentro de un file o registro.

Una vez mas los 7 bits inferiores son destinados para indicar la direccin de registro o file que vamos a trabajar y los siguientes tres bit especifican el bit dentro del registro.

P.G.F.

Literales o de control Con formato:


Formato general:
13 8 7 0

k : Literal = Valor de un operando de 8 bits

Formato para CALL y GOTO:


13 11 10 0

k : Literal = Valor de un operando de 8 bits

Las instrucciones de control son las que ayudan a formar bucles dentro de los programas as como sirven para llamar a rutinas o procedimientos (instrucciones CALL o GOTO).
En este caso en particular se emplea los 11 bits inferiores para enviar la direccin a la cual el contador de programa (PC) saltar. Los bits superiores de la instruccin sirven para identificar a la instruccin.

En ocasiones es necesario cargar constantes a los registros del microcontrolador, las instrucciones literales nos sirven para mover las constantes a un registro en particular, en este caso empleamos los 8 bits inferiores para definir la constante que deseamos almacenar, en tanto que los bits restantes sirven para identificar la instruccin. P.G.F.

Partes de un programa en ASM


DIRECTIVAS Antes de codificar el diagrama anterior es conveniente revisar algunos conceptos breves de las partes que componen un programa en ensamblador para el PIC16F877 usando el MPLAB. Adems de las instrucciones que necesitamos es necesario revisar las directivas de compilacin que son comandos que permiten mejorar la programacin.

Directiva ORG [<etiqueta>] ORG <exp>


Sirve para indicar la direccin de memoria en la cual ser colocada el cdigo generado a continuacin . Si el ORG no es indicado se empieza en la direccin 0. Ejemplo ORG 0x04 nop Indica que el siguiente nop se colocar en la direccin 0x04 de la direccin de programa.

P.G.F.

DIRECTIVA EQU <identificador> EQU <expresin>


Permite asignar el valor de expresin al identificador. El general el identificador es un nombre que le es mas familiar al programador.

Ejemplo
CONF_ADCON1 EQU b'00000110 Crea el identificador CONF_ADCON1 con valor 0x06

DIRECTIVA END
END
Es de uso obligatorio y siempre se coloca al final del programa sirve para marcar el final del programa. El MPLAB solo reconoce las lneas que estn escritas previas a la aparicin de la directiva END.

P.G.F.

DIRECTIVA LIST

Sirve para indicarle al MPLAB cual es el formato del archivo *.list dentro de los parmetros esta el tipo de procesador que se va a emplear. Ejemplo: list p=16F877

DIRECTIVA INCLUDE
include <file> Sirve para incluir en el ensamblado el archivo indicado por el parmetro file. Es como si el file fuera parte del archivo, como si se hubiera situado en la posicin en la cual la directiva aparece. El parmetro file puede incluir el path o camino en el cual se encuentra el fichero a incluir. En caso se omita asumir los directorios del MPLAB y del archivo fuente. Ejemplo include <p16f877.inc> Incluye el archivo p16F877.inc que contiene las etiquetas genricas del PIC16F877

P.G.F.

PRIMERAS INSTRUCCIONES BSF Sintaxis: Operandos:


Operacin: Afecta Status: Descripcin:

Bit Set f [ label ] BSF f,b 0 f 127 0b7 1 (f<b>) No El bit 'b' del registro 'f' es puesto a 1-lgico.

BCF Sintaxis: Operandos:


Operacin: Afecta Status: Descripcin:

Bit Clear f [ label ] BCF f,b 0 f 127 0b7 0 (f<b>) No El bit 'b' del registro 'f' es puesto a o-lgico.

P.G.F.

CLRF Sintaxis: Operandos: Operacin:

Clear f [ label ] CLRF f 0 f 127 00h (f) 1Z Afecta Status : Z Descripcin: El contenido del registro f es puesto a 0-lgicos y el bit Z del STATUS es puesto a 1-lgico.

GOTO Sintaxis: Operandos: Operacin:

Unconditional Branch [ label ] GOTO k 0 k 2047 k PC<10:0> PCLATH<4:3> PC<12:11> Status Afecta Status: No Descripcin: GOTO es un salto incondicional. Los once primeros bits son cargados en el registro PC bits <10:0>. Los bits superiores del PC son cargados de PCLATH<4:3>. GOTO es una instruccin que demora dos ciclos de instruccin.
P.G.F.

MOVLW Sintaxis: Operandos: Operacin: Afecta Status: Descripcin:

Move Literal to W [ label ] MOVLW k 0 k 255 k (W) No Los ocho bits literales de 'k' son cargados dentro del registro W.

MOVWF Sintaxis: Operandos: Operacin: Afecta Status: Descripcin:

Move W to f [ label ] MOVWF f 0 f 127 (W) (f) No Mueve el dato del registro W al registro 'f'.

P.G.F.

Lectura y escritura en puertos

Desarrollar un programa que configure las lneas del puerto A como entrada y las lneas del puerto B como salida. Y que muestre en forma permanente la entrada del puerto A en el puerto B.

Si desarrollamos el algoritmo se reduce a : 1. Configurar PA como entrada y PB salida 2. W= PA 3. PortB=W 4. Ir paso 2

P.G.F.

Diagrama de Flujo
Inicio

Programa
list p=16F877 include "p16f877.inc CONF_ADCON1 equ b'00000110' ; Configuracin PORTA E/S digital

Ir a banco 1

org nop nop bsf bcf

0x000

; Origen del cdigo ; No operacin ; No operacin ; Ir banco 1

ADCON1=00000110

STATUS,RP0 STATUS,RP1

movlw CONF_ADCON1 ; Configurar el PORTA como digital movwf ADCON1


PORTA=00111111

movlw b'00111111' movwf TRISA clrf TRISB bcf bcf STATUS,RP0 STATUS,RP1

; PORTA como entrada ; PORTB como salida ; Ir banco 0

Ir a banco 0

W=PORTA

BUCLE movf PORTA,W movwf PORTB goto BUCLE END

; W=PORTA ; PORTB=W ; Ir bucle ; Fin del programa

PORTAB=W

P.G.F.

ESTIMADOS ALUMNOS, CON LO VISTO HASTA AHORA:


ARQUITECTURA DEL PIC, Y CONJUNTO DE INSTRUCCIONES

PUEDEN COMENZAR A PROGRAMAR Y DESARROLLAR LAS GUIAS PDTA: COPIE ARCHIVO ANTERIOR Y EJECUTELO EN MPLAB. LUEGO IDENTIFIQUE EL ERROR

P.G.F.