Presentacion Pic16f887 3
Presentacion Pic16f887 3
Presentacion Pic16f887 3
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.
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
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.
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
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
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
CONTINUACION:
Reciclaje de programacin.
Programas en base a maquinas de estados. Necesario un compilador CCS.
EL PROGRAMA C MINIMO
EDITAR MPLAB
CON FALLLO
PRUEBAS DE VALIDACION
PROGRAMAR EL PIC
SIN FALLLO
FIN
Programa fuente
Compilador
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
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.
Especificador de formato
Tipos de calificadores
Cdigos ASCII
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)
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
ESTATUTO IF
MODO 1
MODO 2
MODO 3
ESTATUTO IF
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++
No
No: z= ( a+b)
Si SI ( a < b)
Si : z= ( a*b)
MODO 3
MOD. ALTERN.
ESTATUTO IF
MODO1 MODO 2
ESTATUTO SWITCH
ESTATUTO SWITCH
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++
Caso 1 (a+b)
Caso 2 (a-b)
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
ITERACION FOR
DIAGRAMA DE FLUJO PSEUDO CDIGO CODIFICACIN EN C++
VC=LI
VC<LS
No
Si
VC=VC+1
for(vc=1;vc<ls;vc++) { ciclo }
Ejemplo:
CUERPO DEL CICLO
Ciclo del 1 al 10 Hacer para Vc=1 a Vc<=10 paso 1 Imprime Vc Fin para
ITERACION WHILE
DIAGRAMA DE FLUJO
PSEUDO CDIGO
CODIFICACIN EN C++
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.
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
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
HEADER
PROGRAMA MAIN
SUBPROGRAMA
FUNCION
HEADER
PROGRAMA MAIN
FUNCION
SUBPROGRAMA
HEADER
PROGRAMA MAIN
FUNCION
SUBPROGRAMA
VARIABLES ESTATICAS
VARIABLES ESTATICAS
MAIN.C
HEADER *.H
VENTANA DE PROYECTO