Está en la página 1de 70

INTRODUCCIN A LA PROGRAMACIN EN LENGUAJE DE BAJO Y ALTO NIVEL PARA EL MICROCONTROLADOR

Ensamblador (Set de Instrucciones y Modos de direccionamiento), Lenguaje C, Sintaxis de Control en C, Declaracin de Variables y Constantes en C, funciones en C, Estructura de Programacin base; Maquina de Estados en C, Manejo del MPLAB.

INTRODUCCION AL ENSAMBLADOR
El juego de instrucciones de un microprocesdor o microcontrolador es el conjunto de entradas binarias que producen acciones definidas durante un ciclo de instruccin. Un juego de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una puerta lgica, un registro de desplazamiento o un sumador. Por supuesto, las acciones que realiza un microcontrolador con cada instruccin, son ms complejas que las que realizan los dispositivos y puertas antes mencionados. Una instruccin es un patrn de dgitos binarios el cual debe estar a disposicin del microcontrolador en el tiempo y forma que ste lo requiera. Por ejemplo, cuando el procesador de un microcontrolador PIC16F84A recibe el patrn binario de 12 bits '0000 0100 0000' en el momento adecuado, significa: Clear (borrar o poner a cero) el registro W, y corresponde a la instruccin CLRW.

CONDICIONES QUE CUMPLEN LAS INSTRUCCIONES DEL PIC16F84A


Juego de instrucciones reducido: Por ejemplo, solo existen 35 instrucciones en el PIC16F84A. Sencillas y rpidas: La mayora se ejecuta en un ciclo de instruccin, y solo las de salto precisan 2 ciclos. El ciclo de instruccin consta de 4 ciclos de reloj principal. De esta manera un dispositivo con un cristal de cuarzo de 20 MHz realiza 5 millones de instrucciones por segundo. Ortogonalidad: La ubicacin de los operandos que manejan es muy flexible. Cualquier objeto del procesador puede actuar como origen o como destino. Formato uniforme de las instrucciones: Todas las instrucciones tienen una longitud fija de bits. Esta caracterstica significa un notable ahorro de la memoria de programa y una facilidad en la construccin de compiladores.

Formato uniforme de los datos.


Podramos decir que el lenguaje ensamblador "es complejo por su sencillez". Esto quiere decir que, a diferencia de los lenguajes de alto nivel, aqu no hay funciones que solucionen y simplifiquen algoritmos, si no que hay que implementar hasta los pasos ms elementales.

PROGRAMA EN ENSAMBLADOR
Para introducir un programa en ensamblador en un sistema basado en CPU tenemos que traducirlo a hexadecimal o a binario. Para realizarlo a suavez se utiliza un programa de ordenador, llamado programa ensamblador. ste sera un ejemplo de programacin en ensamblador o mnemnicos:
org 0 Start movlw 0Eh movwf REG1 movlw 100 addwf REG1,1 end

DESVENTAJAS DEL ENSAMBLADOR


Existe una gran diferencia entre el juego de instrucciones de un sistema basado en CPU y las tareas que este debe realizar. Las instrucciones tienden a hacer cosas como: sumar contenidos de dos registros, desplazar el contenido de un acumulador un bit, o colocar un nuevo valor en el contador de programa. Por otro lado, centrndonos en el caso de los microcontroladores, este deber hacer cosas como: reaccionar cuando una entrada digital se activa, comprobar si un valor analgico se ha excedido de un cierto umbral, activar un rel en un momento determinado, mostrar resultados en un panel LCD, comunicarse va serie con otros dispositivos, etc. El programador en lenguaje ensamblador debe "traducir" estas tareas a secuencias de simples instrucciones. Esto no suele ser fcil y consume tiempo de trabajo. Otro inconveniente es la no portabilidad. Cada microprocesador o microcontrolador posee su propio juego de instrucciones en el y su propia arquitectura interna. Un programa en ensamblador escrito para el PIC16F84A, no correr en un 65C02, Z80, 8080, 8051, o cualquier otro sistema basado en CPU. Incluso dentro de los PIC hay diferencias entre las distintas gamas como nmero y tipo de instrucciones, recursos disponibles, direccin de registros o uso de la memoria. Para solucionar estos problemas estn los programas de alto nivel, como el lenguaje C o Basic.

MNEMNICOS
La tarea principal del ensamblador es la traduccin de los cdigos de operacin en mnemnico en sus equivalentes binarios. El ensamblador realiza sta tarea usando una tabla como si lo hicisemos "a mano" pero adems debe determinar cuantos operandos requiere la instruccin y de que tipo. Esto es un poco complejo; algunas instrucciones (como CLRW, SLEEP) no tienen operandos, otras (ADDLW 13, GOTO FIN) tienen una, mientras que otras (BSF STATUS,C o BTFSS PORTA,O) requieren dos.

IDENTIFICACION DE ELEMENTOS FLAGS O BANDERAS


Los Flags o banderas son marcadores, representados por bits dentro del registro de STATUS, los mas importantes son:
Z: Flag de cero, se pone a 1 cuando una operacin que le afecta da como resultado un 0. C: Flag de Carry, se pone a 1 cuando la operacin que le afecta sobrepasa el nivel de representacin del procesador, en nuestro caso es 8 bits, de esta manera si sumamos a 1111 1111 b un 0000 0011 b el resultado seria 0000 0010 b y el bit de Carry pasara a 1. DC: Flag de carry del nibbles inferior, este se comporta igual que el bit de Carry, solo que el limite de representacin son los 4 bits inferiores, de esta manera si tenemos 0000 1111 b y sumamos 0000 0111 b, el resultado ser 0001 0110 b y el bit de DC se pone a 1, el bit de Carry estar a 0 al no superarse los 8 bits y el bit Z a 0 al ser el nmero diferente de 0.

REGISTROS
Un registro es un espacio en la memoria de datos del microcontrolador en el que podemos guardar informacin, existen tambin unos registros en los cuales podemos configurar el microcontrolador o saber el estado de este o algunos de sus perifricos. Un registro est compuesto por 8 bits los cuales se representan dndoles un numero segn su posicin, de esta manera el bit menos significativo (LSB) se le da el nmero 0 y el ms significativo (MSB) el 7. Donde X puede ser 1 0. A los bits del 0 al 3 se les denomina nibbles inferior, y del 4 al 7 se denominan nibbles superior. La forma de representacin de parte de los bits de un registro suele ser: Registro<3:0>, lo que indica los bits del 3 al 0 del registro. De esta forma, para identificar el BIT Z de STATUS se pondra: STATUS<2>

BIT

REGISTRO

X X X X X X X X

ELEMENTOS DE UNA INSTRUCCION

ESTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR


Los ficheros de cdigo fuente llevarn la extensin *.ASM Los ficheros de listado llevarn la extensin *.LST Los ficheros de cdigo objeto llevarn la extensin *.OB] Los ficheros de errores llevarn la extensin *.ERR Los ficheros ejecutables en formato Intel Hex llevarn la extensin *.HEX Comentario descriptivo del programa (utilizar una cabecera estandarizada). Definir el microcontrolador que se usar (con las directivas LIST e INCLUDE). Introducir las opciones de compilacin (que sern vistas ms adelante) (opcional). Establecer las constantes que se usarn (con la directiva EQU). Reservar espacios de memoria (directiva RES) (si es necesario). Configurar los puertos. Desarrollar el programa con comentarios, en lo posible explicando cada lnea de cdigo.. Los mnemnicos escritos en minscula y las constantes y variables en mayscula hacen que el cdigo escrito sea ms visible. Colocar las rutinas en el mismo sitio, todas contiguas. Dibujar diagramas de flujo o escribir seudocdigo

DEFINICION DE LAS COLUMNAS


Columna 1: Etiquetas. Las etiquetas se rigen por las siguientes normas:
Debe situarse en la primera columna. Debe contener nicamente caracteres alfanumricos. El mximo de caracteres es de 31.

Columna 2: Operacin. En esta columna se situarn las instrucciones. El campo del cdigo de operacin es el nico que nunca puede estar vaco; ste siempre contiene una instruccin o una directiva del ensamblador. Columna 3: Operandos El campo de operandos o de direccin puede contener una direccin o un dato, o puede estar en blanco. Normanmente contendr registros o literales con los que se operar (f, l o k , b y w). Columna 4: Comentario. El campo del comentario o de etiquetas es opcional. Aqu se situar cualquier comentario personalizado que deseemos. Estos son tiles para saber qu hace un programa sin tener que descifrar el cdigo entero. El compilador (ensamblador) ignorar todo texto ms all del carcter punto y coma ";".

DELIMITADORES Y ETIQUETAS
Delimitadores (separacin entre campos)
Los campos van separados slo con espacios y/o tabulaciones. No agregue nunca otros caracteres (comas, puntos, etc.) No utilice espacios extra, particularmente despus de comas que separan operandos.( Ej: movlw 5, w ) No use caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.

Etiquetas (label)

Las etiquetas se sitan a la izquierda de las instrucciones y sirven para agrupar fragmentos de cdigo. Estos fragmentos pueden ser de dos tipos: El primer tipo no es un fragmento tal cual, si no que es un punto del programa al que podremos saltar de manera incondicional a travs de la instruccin adecuada. El segundo tipo es denominado subrutina. Este empieza con una etiqueta y acaba con la instruccin RETURN o RETLW, que veremos ms adelante. Deberemos tener en cuenta:

La etiqueta es el primer campo en una lnea en lenguaje ensamblador y puede no existir. Si una etiqueta est presente, el ensamblador la define como el equivalente a la direccin del primer byte correspondiente a esa instruccin. Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instruccin. El ensamblador reemplazar sta etiqueta por el valor de cuando fue creada. Se usan frecuentemente en las instrucciones de salto. No puede existir ms de una etiqueta en la primera columna o primer campo de instruccin. No pueden usarse como nombres de etiquetas a palabras ya reservadas por el ensamblador ( ORG, EQU, etc.) o nombres de instrucciones ( movlw, call, nop, etc.)

EJEMPLOS DE ETIQUETAS:

Instrucciones orientadas a registros MNEMNICO OPERANDOS ADDWF f,d ANDWF f,d CLRF CLRW COMF DECF f f,d f,d DESCRIPCIN w+fd w AND f d 00 h f 00 h w Complemento de f d f-1d f - 1 d (si es 0 salta) f+1d f + 1 d (si es 0 salta) w OR f d fd wf No operacin Rota f izq por carry d Rota f dcha por carry d f-wd w XOR f d CDIGO OP
00 0111 dfff ffff 00 0101 dfff ffff 00 0001 1fff ffff 00 0001 0xxx xxxx 00 1001 dfff ffff 00 0011 dfff ffff 00 1011 dfff ffff 00 1010 dfff ffff 00 1111 dfff ffff 00 0100 dfff ffff 00 1000 dfff ffff 00 0000 1fff ffff 00 0000 0xx0 0000 00 1101 dfff ffff 00 1100 dfff ffff 00 0010 dfff ffff

BANDERAS NCIC NOTAS C, DC, Z Z Z Z Z Z Ninguna Z Ninguna Z Z Ninguna Ninguna C C C,DC,Z 1 1 1 1 1 1 1(2) 1 1(2) 1 1 1 1 1 1 1 1 1 1,2 1,2 2 1,2 1,2 1,2,3 1,2 1,2,3 1,2 1,2 1,2 1,2 1,2 1,2 1,2

DECFSZ f,d INCF INCFSZ IORWF MOVF f,d f,d f,d f,d

MOVWF f NOP RLF RRF SUBWF SWAPF f,d f,d f,d f,d

Intercambia nibbles de f d 00 1110 dfff ffff Ninguna


00 0110 dfff ffff

XORWF f,d

Instrucciones orientadas a bit MNEMNICO OPERANDOS BCF BSF BTFSC BTFSS f,b f,b f,b f,b DESCRIPCIN CDIGO OP BANDERAS NCIC NOTAS 1 1 1(2) 1(2) 1,2 1,2 3 3

Pone a 0 bit b de registro f 01 00bb bfff ffff Ninguna Pone a 1 bit b de registro f 01 01bb bfff ffff Ninguna Salto si bit b de reg. f es 0 01 10bb bfff ffff Ninguna Salto si bit b de reg. f es 1 01 11bb bfff ffff Ninguna

Instrucciones con literales y de control MNEMNICO OPERANDOS ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW k k k k k k k k k DESCRIPCIN w+kw w AND k w Llamada a subrutina k Borra temporizador del WDT Ir a direccin k w OR k w kw Retorno de una interrupcin Retorno con k en w Retorno de una subrutina Modo Standby k-ww w XOR k w CDIGO OP 11 111x kkkk kkkk 11 1001 kkkk kkkk 10 0kkk kkkk kkkk 00 0000 0110 0100 10 1kkk kkkk kkkk 11 1000 kkkk kkkk 11 00xx kkkk kkkk 00 0000 0000 1001 11 01xx kkkk kkkk 00 0000 0000 1000 00 0000 0110 0011 11 110x kkkk kkkk 11 1010 kkkk kkkk BANDERAS C,DC,Z Z Ninguna TO,PD Ninguna Z Ninguna Ninguna Ninguna Ninguna TO, PD C,DC,Z Z NCIC 1 1 2 1 2 1 1 2 2 2 1 1 1 NOTAS

EJEMPLO DE UN PROGRAMA EN ENSAMBLADOR ASM

CONTINUACION:

LENGUAJE C PARA MICROCONTROLADOR PIC16F887


Mayor flexibilidad. Programacin modular.

Reciclaje de programacin.
Programas en base a maquinas de estados. Necesario un compilador CCS.

EL PROGRAMA C MINIMO

CICLO DE DESARROLLO DE UN PROGRAMA EN C PARA PICS

EDITAR MPLAB

ARCHIVO PRINCIPAL MAIN.C SUBPROG. *.C HEADER *.H

COMPILACION CON CCS MAIN.OBJ

GENERACION DE ARCHIVO *.HEX

CON FALLLO

PRUEBAS DE VALIDACION

PROGRAMAR EL PIC

SIN FALLLO

FIN

CICLO DE DESARROLLO DE UN PROGRAMA EN C PARA PICS

obj EXE Programa ejecutable obj Encadenador

Programa fuente

Compilador

obj HEX Programa grabar en el microcontrolado r

DIRECTIVAS A PREPROCESADOR

DIRECTIVA #DEFINE

DIRECTIVA #DEFINE

DIRECTIVA #INCLUDE

DIRECTIVA #INCLUDE
ARCHIVOS INCLUIDOS DENTRO DE OTRO ARCHIVO

ARCHIVO suma_tipo_a.h

DIRECTIVA #IF

DIRECTIVA #IF

ESTRUCTURA TIPICA DE UN PROGRAMA C PARA PICS


DEFINICION DE ARCHIVOS DE CABECERA *.H #INCLUDE
DEFINICION DE CONSTANTES #DEFINE

DEFINICION DEL MAIN PRINCIPAL DEFINICION DE VARIABLES


ESTATUTOS, ITERACIONES FUNCIONES Y OPERACIONES ARITMETICAS

COMO DECLARAR VARIABLES


GLOBAL FUERA DEL MAIN

MAYUSCULA O MINUSC. LA VARIABLE SIEMPRE EN MINUSCULA EL TIPO DE DATO

LOCAL DENTRO DEL MAIN

LAS VARIABLES PUEDEN ESTAR EXTERNAS AL MAIN, ES DECIR EN LOS SUBPROGRAMAS

Variables locales y globales.


Una variable local es aquella cuyo mbito se restringe a la funcin que la ha declarado se dice entonces que la variable es local a esa funcin. Esto implica que esa variable slo va a poder ser manipulada en dicha seccin, y no se podr hacer referencia fuera de dicha seccin. Cualquier variable que se defina dentro de las llaves del cuerpo de una funcin se interpreta como una variable local a esa funcin.

Una variable global es aquella que se define fuera del cuerpo de cualquier funcin, normalmente al principio del programa, despus de la definicin de los archivos de biblioteca (#include), de la definicin de constantes simblicas y antes de cualquier funcin. El mbito de una variable global son todas las funciones que componen el programa, cualquier funcin puede acceder a dichas variables para leer y escribir en ellas. Es decir, se puede hacer referencia a su direccin de memoria en cualquier parde del programa.

TIPOS DE DATOS BASICOS

FORMATOS DE DATOS Y ALGUNAS DECLARACIONES

Especificador de formato

Tipos de calificadores

Cdigos ASCII

OPERADORES VALIDOS POR EL COMPILADOR CCS

OPERACIONES ARITMETICAS Operadores Aritmticos


+ * / Mod Suma Resta Multiplicacin Divisin Modulo (residuo de la divisin entera)

OPERACIONES RELACIONALES
Su misin es comparar dos operandos y dar un resultado entero: 1 (verdadero); 0 (falso). La siguiente tabla ilustra estos operadores:
Operadores Relacionales > < >= <= != == Mayor que Menor que Mayor o igual que Menor o igual que Distinto de Igual

OPERADORES LOGICOS
Al igual que los operadores relacionales, stos devuelven 1 (verdadero), 0 (falso) tras la evaluacin de sus operandos. La tabla siguiente ilustra estos operadores.

Operador

AND
Operando1 0 0 1 1 F F T T Operador AND Operando2 0 1 0 1 F T F T Resultado 0 0 0 1 F F F T

Operador

OR
Operando1 0 0 1 1 F F T T Operador OR Operando2 0 1 0 1 F T F T Resultado 0 1 1 1 F T T T

Operador

NOT
Operando1 0 F 1 T Resultado 1 T 0 F

OPERADORES LOGICOS

Ejemplos: a = 10 b = 12 c = 13 d =10 1) ((a > b)||(a < c)) && ((a == c) || (a > = b)) F T F F T F F

2)

((a > = b) || (a < d)) && (( a > = d) && (c > d)) F F T T F T F

3)

! (a == c) && (c > b) F T T T

OPERADORES DE BIT

Los operadores de desplazamiento otorgan al C capacidad de control a bajo nivel similar al lenguaje ensamblador. Estos operadores utilizan dos operandos enteros (tipo int): el primero es el elemento a desplazar y el segundo, el nmero de posiciones de bits que se desplaza. Se resmen en la siguiente tabla:

OPERADORES DE DESPLAZAMIENTO

ESTATUTOS DE CONDICION Y CICLOS DE ITERACION


ESTATUTO IF ESTATUTO SWITCH ITERACION FOR ITERACION WHILE ITERACION DO-WHILE

ESTATUTO IF

MODO 1

MODO 2

MODO 3

ESTATUTO IF
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++

Condicin Smbolo de decisin indica la realizacin de una comparacin de valores.

No
No: z= ( a+b)

Si SI ( a < b)

Si (a<b) z= a*b Sino z=a+b Fin si

Si : z= ( a*b)

If (a<b) { z= a*b; } else { z=a+b; }

MODO 3

MOD. ALTERN.

ESTATUTO IF
MODO1 MODO 2

ESTATUTO SWITCH

ESTATUTO SWITCH
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++

Condicin segn sea el caso. Si (caso)


SI ( caso)

caso1:( a+b ) caso2:( a-b ) caso3:( a*b )


Caso 3 ( a*b)

Caso 1 (a+b)

Caso 2 (a-b)

por default fin caso

switch (caso) { caso 1: (a+b);break; caso 2: (a-b);break; caso 3: (a*b);break; default: print(salir); }

ESTATUTO SWITCH

CONSTANTES NUMERICAS

ESTATUTO SWITCH

CONSTANTES TIPO CARACTER

ITERACION FOR
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++

VC=LI

VC<LS

No

Si

VC=VC+1

Hacer para VC=LI a VC< LS paso 1 ciclo Fin Para

for(vc=1;vc<ls;vc++) { ciclo }

Ejemplo:
CUERPO DEL CICLO

Ejemplo: Ciclo del 1 al 10 for(vc=1;vc<=10;vc++) { printf (cuenta= %d;vc); }

Ciclo del 1 al 10 Hacer para Vc=1 a Vc<=10 paso 1 Imprime Vc Fin para

Vc =variable de control LI= Limite Inferior LS=Limite Superior

ITERACION WHILE

DIAGRAMA DE FLUJO

PSEUDO CDIGO

CODIFICACIN EN C++

Evala la condicin, y posteriormente ejecuta el bloque mientras la condicin sea verdadera.

Hacer mientras ( a<b) z= a-b fin mientras

while (a<b) { z=a-b; }

No (a<b)
caso)

Si bloque z = (a-b)

ITERACION DO-WHILE
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++

Ejecuta el bloque y posteriormente evala la condicin, sigue mientras la condicin sea verdadera.

Repetir z=(a-b) Hasta ( a<b)

do { z=a-b; } while(a<b) ;

z = (a-b)

No (a<b)

Si bloque

ARREGLOS SIMPLES

CADENAS

Una cadena suele ser representada entre comillas dobles superiores ("palabra"), mientras que un carcter de esa cadena (un char en ingls) suele ser representado entre comillas simples ('p'). Por ejemplo, en C:
char c = 'a'; char str[5] = "hola";

En C una cadena se define como un array de caracteres que termina en un carcter nulo (\0).

FUNCIONES

EL ESTATUTO RETURN PASA EL RESULTADO A LA FUNCION LLAMADA suma_tipo_d

TIPOS DE FUNCIONES
FUNCIONES SIN ARGUMENTOS Y QUE NO RETORNAN VALOR. FUNCIONES CON ARGUMENTOS Y QUE NO RETORNAN VALOR. FUNCIONES SIN ARGUMENTOS Y QUE RETORNAN VALOR. FUNCIONES CON ARGUMENTOS Y QUE RETORNAN VALOR.

HEADER

PROGRAMA MAIN

SUBPROGRAMA

FUNCIONES

FUNCIONES SIN ARGUMENTOS Y QUE NO RETORNAN VALOR

HEADER

PROGRAMA MAIN

SUBPROGRAMA

FUNCION

FUNCIONES CON ARGUMENTOS Y QUE NO RETORNAN VALOR.

HEADER

PROGRAMA MAIN

FUNCION

SUBPROGRAMA

FUNCIONES SIN ARGUMENTOS Y QUE RETORNAN VALOR.

HEADER

PROGRAMA MAIN

FUNCION

SUBPROGRAMA

FUNCIONES CON ARGUMENTOS Y QUE RETORNAN VALOR.

VARIABLES ESTATICAS

VARIABLES ESTATICAS
MAIN.C

HEADER *.H

VENTANA DE PROYECTO

SUBPROGRAMA *.C FUNCION CON VARIABLE ESTATICA j

ESTRUCURA BASE DE PROGRAMACION RECOMENDADA: MAQUINA DE ESTADOS


DEFINICION DE ARCHIVOS DE CABECERA *.H #INCLUDE DEFINICION DE CONSTANTES #DEFINE VARIABLES GLOB.

INICIADOR DE SECUENCIA DE ANILLO

DEFINICION DEL MAIN PRINCIPAL DEFINICION DE VARIABLES LOC.


ITEREACION WHILE ESTATUTO SWITCH DENTRO DE CADA CASO PUEDE HABER OPERACIONES, ITERACIONES, ESTATUTOS Y LLAMADAS DE FUNCIONES

También podría gustarte