Professional Documents
Culture Documents
Microcontroladores PIC
Introduccin
1
Introduccin
MICROPROCESADOR
BUS DE DIRECCIONES
BUS DE DATOS
P
BUS DE CONTROL
PERIFERICOS PERIFERICOS
MICROCONTROLADOR
PERIFERICOS PERIFERICOS
En esta arquitectura, el CPU se conecta de forma independiente y con buses distintos con la memoria
de instrucciones y con la de datos.
MEMORIA DE MEMORIA DE
DATOS CPU INSTRUCCIONES
8 14
La arquitectura Harvard permite al CPU acceder simultneamente a las dos memorias lo cual propicia
numerosas ventajas al funcionamiento del sistema como se irn describiendo.
CLK
ciclo
Fin INSTR0
Fin INSTR1
Fin INSTR2
Las instrucciones de salto ocupan dos ciclos al no conocer la direccin de la siguiente instruccin
hasta que no se haya completado la de bifurcacin.
ra ra
BSQUEDA 3 EJECUCIN 3
Figura 5: La segmentacin permite solapar en el mismo ciclo la fase de ejecucin de una instruccin y la de la bsqueda de la
siguiente, excepto en las instrucciones de salto.
Todas las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las
de la gama media tienen 14 bits y ms las de la gama alta. Esta caracterstica es muy ventajosa en la
optimizacin de la memoria de instrucciones y facilita enormemente la construccin de
ensambladores y compiladores.
Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los de la gama media
y casi 60 los de la alta.
Esto significa que todos los objetos del sistema (puertos de E/S, temporizadores, posiciones de
memoria, etc.) estn implementados fsicamente como registros.
g) Herramientas de soporte
La empresa Microchip y otras que utilizan los PIC ponen a disposicin de los usuarios numerosas
herramientas para desarrollar hardware y software. Son muy abundantes los programadores, los
simuladores software, los emuladores en tiempo real, ensambladores, Compiladores C, Intrpretes y
Compiladores Basic, etc. Entre ellas tenemos:
Ensamblador MPASM.
Compilador de lenguaje C, MP-C.
Programador universal PICSTART PLUS
Emulador universal PIC MASTER.
Para resolver aplicaciones sencillas se precisan pocos recursos; en cambio, las aplicaciones grandes
requieren numerosos y potentes recursos. Siguiendo esta filosofa, Microchip construye diversos
modelos de microcontroladores orientados a cubrir, de forma, las necesidades de cada proyecto. As,
hay disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros
complejos y ms costosos para las de mucha envergadura.
La mayora de los sistemas de control incrustados requieren CPU, memoria de datos, memoria de
instrucciones, lneas de E/S, y diversas funciones auxiliares como temporizadores, comunicacin
serie y otras. La capacidad y el tipo de las memorias, el nmero de lneas de E/S y el de
temporizadores, as como circuitos auxiliares, son parmetros que dependen exclusivamente de la
aplicacin y varan mucho de unas situaciones a otras. Para adaptarse de forma ptima a las
necesidades de los usuarios, Microchip oferta tres gamas de microcontroladores de 8 bits
Con las tres gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo
seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las
memorias, el nmero de lneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las
versiones estn construidas alrededor de una arquitectura comn, un repertorio mnimo de
instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen
del voltaje de alimentacin.
PIC17CXX
OTP/
EPROM
Gama Alta
PIC16CXXX
OTP/EPROM
Gama Media
PIC16C5X
OTP/EPROM/EEPROM
PIC12CXX
OTP
Gama Baja
Figura 5: Las tres gamas de Microcontroladores PIC
3. Arquitectura Interna
3.1 Procesador:
Aqu se almacenan todas las instrucciones del programa de control. No se pueden utilizar memorias
externas. Los tipos existentes son: ROM con mscara, EPROM, OTP (Programable una vez),
EEPROM y FLASH.
La memoria de programa siempre est direccionada desde el Contador de Programa (PC), mientras
que la memoria de datos puede direccionarse directamente desde parte del cdigo OP de la
instruccin o indirectamente a travs de un registro denominado FSR (Registro de Seleccin del
Banco).
La memoria de programa (o de instrucciones) tiene una capacidad de 8k de 14 bits. Durante la fase
de bsqueda, la direccin de la instruccin la proporciona el PC, el cual normalmente se
autoincrementa en la mayora de las instrucciones, excepto en las de salto. Con las instrucciones de
salto se carga la Pila con el valor inicial del PC incrementado una unidad. Posteriormente, las
instrucciones de retorno, situadas al final de las rutinas, devuelven el valor almacenado en la Pila al
PC.
El PC consta de 13 bits con los que se puede direccionar una memoria de cdigo con una capacidad
de hasta 8k palabras de 14 bits cada una. La memoria se organiza en paginas de 2k de tamao.
El byte de menos peso del PC se corresponde con el contenido del registro PCL ubicado en la
posicin 02h del banco 0. Los 5 bits de mas peso del PC se corresponden con los 5 bits de menos
peso del registro PCLATH en la posicin 0Ah del banco 0. Los bits de mas peso del PC solos se
pueden escribir a travs del registro PCLATH.
En las instrucciones de salto relativo, el resultado de la misma afecta solo a los 8 bits de menos peso
del PC. Los 5 bits de mas peso se suministran desde PCLATH<4:0>.
Jos Oliden Martnez 6
Introduccin
En las instrucciones GOTO y CALL los 11 bits de menos peso del PC se suministran desde el cdigo
OP. Los dos bits de mas peso del PC se cargan con los bits <4:3> del registro PCLATH. Como la
memoria de programa se organiza en paginas de 2k, la posicin la seleccionan los 11 bits de menos
peso, mientras que con los 2 bits de mas peso del PC se elige la pgina.
Un reset pone a 0 todos los bits del PCL y PCLATH, obligando a que la direccin de reinicio sea
0000h.
1. Para todas las instrucciones menos los saltos del programa, el PC se autoincrementa para
apuntar la siguiente instruccin a la que se est ejecutando.
2. Las instrucciones de salto GOTO cargan en el PC directamente los 11 bits de menos peso desde
el cdigo OP de la propia instruccin. Cuando el rea de programa es superior a las 2k posiciones,
los 2 bits de ms peso del PC (Al0 y A9) se cargan con el valor de los bits PA1 y PA0 del Registro de
Estado.
3. Las instrucciones CALL, antes de su ejecucin, guardan en la Pila el valor del PC inicial
incrementado una unidad. Dicho valor se restituye al PC cuando se ejecuta la instruccin de retorno
cuyo mnemnico es RETLW.
Las posiciones de la memoria de datos tienen 8 bits de longitud. La memoria de datos se organiza en
"bancos" (4). Los bancos tienen un tamao de 128 bytes cada uno.
La memoria de datos funciona de forma similar al "banco de registros" de un procesador por lo cual
sus posiciones implementan registros de propsito especial y propsito general.
En la figura 9 se presenta la organizacin de la memoria compuesta por cuatro bancos. Se indican los
nombres de los registros especficos en las primeras posiciones del banco 0.
1. Direccionamiento directo
Aqu se utilizan los 7 bits de menos peso del cdigo OP de la instruccin para apuntar cualquiera de
las 128 posiciones del banco 0. Si el dato no se halla en el banco 0, se usa un sistema de paginacin
para seleccionar el banco adecuado se emplean los bits RP1 y RP0 del Registro de estado <6:5>,
seleccionan el banco.
2. Direccionamiento indirecto
En este caso el operando de la instruccin hace referencia al registro INDF, que ocupa la posicin 0
del rea de datos (00h del banco 0). Se accede a la posicin que apunta el registro FSR, que se halla
situado en la posicin 04h del banco 0. Los 7 bits de menos peso de FSR seleccionan la posicin y su
bit de mas peso junto con el bit IRP del Registro de estado <7>, seleccionan el banco. El registro
INDF no se halla implementado fsicamente. Cada vez que se le referencia, se utiliza el contenido del
registro FSR para direccionar al operando.
Cualquier instruccin usando el registro INDF hace referencia al registro apuntado por FSR.
A excepcin de las 2 patitas de alimentacin, las del cristal del reloj (para regular la frecuencia de
trabajo) y la del reset, las restantes patitas del microcontrolador sirven para controlar o comunicarse
con perifricos externos. Las lneas de E/S que se adaptan con los perifricos manejando informacin
entre ellos se agrupan en conjuntos de 8 y reciben el nombre de puertos o puertas. As para el PIC
16F877 tenemos 5 puertos: Puerto A, B, C, D y E, a cada uno de ellos podemos acceder en forma
paralela (control de bit) o utilizar funciones preestablecidas de comunicacin o control (canal de
2
comunicaciones sncrono SSP con modo I C y SPI, canal USART/SCI, control PWM, conversores AD
de 10 bits). Las descripcin de las patitas y sus funciones estn en la hoja tcnica, en la figura 11 se
muestra esta en forma resumida.
5. Recursos Auxiliares
Segn las aplicaciones cada modelo de microcontrolador incorpora una diversidad de complementos
que refuerzan su potencia y flexibilidad. Entre los recursos ms comunes se citan los siguientes:
Programacin I
Vamos a comenzar a familiarizarnos con las instrucciones de manejo de bytes y bits del microPIC.
Instruccin mov
En la prctica se utiliza:
Instrucciones aritmticas
En la primera y 4 ltimas instrucciones vistas, funciona el sealizador FZ(bit 2 del registro STATUS),
que se pone a 1 cuando el resultado de la operacin/instruccin es cero. Adems en las dos ltimas
funcionan los sealizadores FC (acarreo de suma de los dos bits de mas peso de los operandos, bit
0) y el FDC (que es 1 cuando ocurre acarreo al sumar los bit que ocupan el 4to lugar de los
operandos, bit 1). Este ltimo es til cuando se trabaja con dgitos BCD.
Estos sealizadores o banderas tambin funcionan con las instrucciones lgicas.
Instrucciones especiales
Estas son todas las instrucciones que se utilizarn en la programacin del microcontrolador.
Registros Especiales
Adems de las instrucciones vamos a ver los registros especiales que se deben configurar para el
trabajo con los PICs. Aqu vamos a realizar una descripcin muy breve de los ms importantes.
STATUS (03h)
Los bits de este registro tienen tres misiones distintas:
1. Se encargan de avisar las incidencias del resultado de la ALU (C, DC y Z)
2. Indican el estado de Reset (TO# y PD#)
3. Seleccionan el banco a acceder en la memoria de datos (IRP, RP0 y RP1)
OPTION_REG (81h)
La misin principal de este registro es controlar el TMR0 (temporizador) y el divisor de frecuencia.
Adems configura la interrupcin externa INT y las resistencias pull-ups del puerto B.
La figura 13 muestra la descripcin de los bits del registro OPTION.
INTCON (0Bh)
La mayor parte de los sealizadores y bits de permiso de las fuentes de interrupcin en los
PIC16X8XX estn implementados sobre los bits de este registro que ocupa la direccin 0Bh del
banco 0 y se encuentra duplicado en los dems bancos.
En la figura 14 encontramos el nombre de cada bit y en la 15 encontramos las funciones de cada uno.
PORTA
Algunos de los puertos de E/S son multiplexados para algunas otras funciones. Los registros de los
puertos en el banco 1 (TRIS) son para configurar los puertos.
Los registros asociados con el PORTA son los que se muestran en la figura 17
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF
INICIO:
movf PORTA,W ; W = PORTA
addlw 0x02 ; W = W + 02
movwf PORTB ; PORTB = W
goto INICIO ; regresar a INICIO
PORTB
PORTC
PORTD
PORTE
El mismo valor puede ser representado en assembler con la notacin 0x100 derivada del lenguaje C
o H0100. Estos cdigos, completamente privados de sentido para un ser humano, son los nicos
que el PIC est en grado de entender. Para facilitar la tarea al programador, se recurre a algunos
instrumentos y convenciones para hacer las instrucciones ms comprensibles. La primera convencin
es aquella de asociar a cada opcode una sigla mnemnica es decir, una sigla que ayude a recordar
el significado de la instruccin. Por ejemplo el opcode 0100H corresponde a la instruccin mnemnica
CLRW que ya hemos visto. Otras convenciones permiten de definir las variables, las constantes, las
etiquetas (label) de referencia a las direcciones de memoria, etc. El conjunto de estas convenciones
para facilitar la escritura de un programa para los PIC es el llamado lenguaje assembler. Un
programa escrito en lenguaje assembler puede ser escrito en un PC utilizando cualquier procesador
de palabra o editor en grado de generar archivos de tipo ASCII. Un archivo ASCII o, mejor dicho, un
archivo de texto que contenga un programa en assembler es llamado source o fuente assembler.
Una vez preparado nuestro source assembler (veremos mas adelante como), es necesario un
programa en grado de traducir las instrucciones mnemnicas y todas las otras formas convencionales
con las cuales fue escrito nuestro source en una serie de nmeros (los opcode) reconocibles
directamente por el PIC. Este programa se llama compilador assembler o assemblador. En la
figura 26 viene esquematizado el flujo de operaciones y el archivo (file) que se genera para pasar de
un source assembler a un PIC programado. Como se dijo la primera operacin a efectuar es escribir
el source assembler y su memorizacin en un archivo (file) de texto con extensin .ASM. Para hacer
esto vamos a utilizar el editor del MPLAB (se puede utilizar cualquiera como por ejemplo el
NOTEPAD.EXE de Windows o el EDIT.EXE de MS/DOS).
Editor
Compilador
PIC
.COD .LST .ERR .HEX 16F877
Programador
Para utilizar el MPLAB se tiene que crear un proyecto (sobre el cual se trabajar) de la siguiente
manera.
Vamos a Project>New Project y damos un nombre a nuestro proyecto dentro de un directorio en el
formulario que muestra la figura 27.
Luego seleccionamos el lenguaje toolsuite que usaremos. Entramos a Project>Set Language Toolsuit
y seleccionamos Microchip MPASM Toolsuit.
Luego de haber creado un Project, abrimos o creamos un archivo .asm, vamos a File y luego a
New, como mostramos en la figura 28.
Ponemos un nombre a nuestro archivo y lo que a continuacin viene es conectar nuestro Project con
el archivo .asm. Seleccionamos Project>Add Files to Project, la pantalla que veremos la mostramos
en la figura 29, y escogemos el archivo .asm que hemos creado, y listo!, a comenzar a trabajar.
Una vez creado nuestro programa en el editor (como ejemplo puede tipearse el programa de
configuracin de los puertos A y B), paso sucesivo es la compilacin del source es decir, la
transformacin en opcode de los cdigos mnemnicos o instrucciones assembler en los contenidos.
El compilador assembler que utilizaremos es el MPASMWIN.EXE del entorno MPLAB. Los pasos de
la compilacin son simples. Una vez revisado nuestro programa lo compilamos, este proceso lo
hacemos seleccionando Project y luego Make project o directamente presionando la tecla F10. El
compilador nos muestra las advertencias (warning) y los errores (error) de nuestro programa,
indicando en qu lnea se ha cometido este falla. Si nuestro programa es correcto el mensaje sera el
siguiente:
Building <nombre>.HEX...
Compiling <nombre>.ASM:
Command line: "C:\ARCHIV~1\MPLAB\MPASMWIN.EXE /e+ /l+ /x- /c+ /p16F877 /q C:\ARCHIV~1\MPLAB\<nombre>.ASM"
Durante la compilacin del source, el compilador assembler genera una serie de archivos con nombre
idntico a la source pero con extensin distinta:
.HEX es el archivo que contiene los cdigos operativos para enviar al PIC a travs del
programador.
.LST es un archivo de texto el cual contiene todo el source assembler y la correspondiente
traduccin en opcode. No es utilizable para la programacin del PIC pero es extremadamente
til para verificar los procesos de compilacin realizados por el compilador.
.ERR contiene la lista de los errores de compilacin encontrados y el numero de lnea en el
interno del source assembler en la cual se encontraron.
Los archivos .LST, .ERR vienen utilizados para el control de lo realizado en la compilacin. Solo el
archivo .HEX viene utilizado realmente para programar el PIC. El archivo .HEX no es un archivo en
formato binario y no corresponden directamente al contenido que deber tener la EEPROM del PIC.
Pero su formato si corresponde directamente a cuanto ser transferido al PIC en forma legible y con
unas instrucciones de ms.
Jos Oliden Martnez 23
Introduccin
Adems de nuestro source con extensin .ASM es necesario entregar al compilador un segundo
archivo producido por Microchip con extensin .INC diferente segn el tipo de PIC que estemos
utilizando. En nuestro caso el archivo es el PIC16F877.INC. Esta source contiene algunas
definiciones dependientes del chip utilizado.
BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Si, salta la siguiente instruccin
BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Si, salta la siguiente instruccin
RLF f,d Rotale Left f through Carry d = f << 1 (donde d puede ser W f)
RRF f,d Rotale Right f through Carry d = f >> 1 (donde d puede ser W f)