Baixe Compilador C Ccs Y Simulador Proteus Para Microcontroladores Pic e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity! Polpa
HOT TA HH EA
Y SIMULADOR PROTEUS
DT
CADA dh
EE)
Ea RpEEE EE
FZ &
ComriLaDor € CCS
Y
SimuLadOR PROTEUS
PARA
MicrOCONTROLADORES PIC
Eduardo Garcia Breijo
LON Alfaomega
icion es lécnicas
vi
DIA D
3.3.2 LCD gráfico.
3.3.3 Teclado (keypad 3x4)
4. Las interrupciones y los temporizadores.
4.1 Introducción...
4.2 Interrupciones
4.21 Interrupciones en
4.3 TIMER
4.3.1 TIMERO en C
44 TIMERI y TIMERZ
4.4.1 TIMERI y TIMER? en €
5. Convertidor Analógico — Digital
5.1 Introducción...
5.2 Módulo Convertidor (gama media)
5.2.1 Registros FSR.
2 Proceso de conversió:
5.2.3 Efecto del modo SLEEP y R]
5.3 Módulo AD en C..
6. Módulo CCP — Comparador, Captura y PWM.
6.1 Introducción
6.2 Modo Captura
6.3 Modo Comparación..
6.4 Modo PWM.
6.5 Módulo CCP en C
7. Transmisión serie.
7.1 Introducción...
7.2 El módulo USART/SCI.
7.2.1 Introducción.
7.2.2 El módulo USART en C
7.2.3 La norma R$232.....
7.3 Puerto serie síncrono (SSP)
7.3.1 Interfaz Inter-Circuitos (I2C)
8. Gama Alta — PICI8..
8.1 Introducció
8.2 Organización de la memori;
8.2.1 Arquitectura HARDVARD.
8.2.2 Memoria de Program:
8.2.3 Contador de Program
8.2.4 Memoria de Configuración..
en el módulo AD
PEDIA
8.2.5 Pila
8.2.6 Memoria de Dato:
8.2.7 Memoria EEPROM
8.2.8 Modos de Direccionamiento
Interrupciones.
8.2.9.1 Registros de salvaguarda.
8.2.10 Registro W
8.2.11 Oscilador.
8.2,12 Unidades Funcionale:
8.2.12.1 Puertos de entrada /salida
8.2.12.2 Temporizadores.
82.12.3 Convertidor Analógico-Digital.
8.2.12.4 Canal de Comunicación Serie (BUSART)
8.2.12.5 Modulo Master SSP (MSSP)....
8.2.12.6 Modulo de Compración/Captura/PWM (CCP)
8.2.12.7 Modulo Comparador
8 Modulo de referencia.
8.2.12,9 Modulo detector de Alto/Bajo Voltaj
9. RTOS — Real Time Operating System.
9,1 Introducción
9.2 RTOS en C
10. USB — Universal Serial Bus
10.1 Introducció;
10.1.1 Migración de R$232 a USB
10.1.1.1 USB CDC (Communication Device Class)
10.2 USB con ISIS y CCS C..
10.2.1 USB en ISIS
10.2.2 USB en CCS
vii
+
Introducción
El estudio de los microcontroladores PIC no consiste sólo en dominar su arquitec-
tura interna o el código maquina sino también en conocer programas auxiliares que
facilitan el diseno de los sistemas donde intervienen.
Entre los muchos programas para el desarrollo de sistemas con PICmicroO desta-
can, por su potencia, el PROTEUS VSM de OLabcenter Electrónics y el compilador
€ de OCustom Computer Services Incorporated (CCS).
El programa PROTEUS VSM es una herramienta para la verificación vía software
que permite comprobar, prácticamente en cualquier diseno, la eficacia del progra-
ma desarrollado. Su combinación de simulación de código de programación y si-
mulación mixta SPICE permite verificaciones analógico-digitales de sistemas basa-
dos en microcontroladores. Su potencia de trabajo es magnífica.
Por otra parte, tenemos el compilador C de CCS, ya que después de conocer y “do-
minar” el lenguaje ensamblador es muy útil aprender a programar con un lenguaje
de alto nivel como el C. El compilador CCS C permite desarrollar programas en C
enfocado a PIC con las ventajas que supone tener un lenguaje desarrollado espe-
cificamente para un microcontrolador concreto. Su facilidad de uso, su cuidado
entorno de trabajo y la posibilidad de compilar en las tres familias de gamas baja,
media y alta, le confieren una versatilidad y potencia muy elevadas.
Al escribir este libro se plantean muchas dudas, sobre todo a la hora de concretar
el temario. Escribir profusamente sobre los PIC o sobre el PROTEUS o sobre el CCS
C supone, casi seguro, escribir un libro para cada uno de estos temas. Por ello, el
planteamiento ha sido diferente, desarrollar los conocimientos básicos necesarios
para manejar cada programa, apoyarlo con el mayor número de ejercicios y dejar
al lector la posterior ampliación de conocimientos. Así lo he decido en base a la
experiencia que me da estar impartiendo clases sobre PIC en la carrera de Ingenie-
ros Técnicos Industriales, especialidad de Electrónica Industrial, de la Universidad
Politécnica de Valencia.
Con estas premisas espero que el libro sirva a lector para aumentar sus conocimien-
tos sobre el PIC o para iniciarlos en el caso de los que desconozcan este mundo.
popitaçneto
popipteçnetas
1. ISIS de PROTEUS VSM
Figura 3. Submenús de trabajo dei botón derecho del ratón
Para dibujar, lo primero es colocar los distintos componentes en la hoja de trabajo.
Para ello, se selecciona el modo componentes (figura 4) y, acto seguido, realizar una
pulsación sobre el botón P de la ventana de componentes y librerías (figura 5).
ms Db
4H
Dv
Figura 4. Modo componentes Figura 5. Boton “pick”
Tras activar el botón P se abre la ventana para la edición de componentes (figura 6)
donde se puede buscar el componente adecuado y comprobar sus características.
Al localizar el componente adecuado se realiza una doble pulsación en él, de tal
forma que aparezca en la ventana de componentes y librerías (figura 7). Se pue-
de realizar esta acción tantas veces como componentes se quieran incorporar al
esquema. Una vez finalizado el proceso se puede cerrar la ventana de edición de
componentes.
LIA
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Permite localizar por tipo, clase y fabricante
Permite localizar componentes por nombre
Lista de dispositivos disponibles y sus características
Símbolo de esquema
y modelo
Encapsulado
para placa
Pequefio editor de las caracteristicas
de un componente (situar el ratón sobre 61)
Figura 6. Ventana para la edición de componentes
RES
SW-SPSTMOM
Figura 7. Los componentes afiadidos
Para situar un componente en el esquema tan sólo debemos seleccionarlo de la
lista. Al hacerlo se puede comprobar su orientación (tal como se representará en el
esquema) en la ventana de edición (figura 8). Si deseamos modificar la rotación o
la reflexión del componente podemos acceder a ello a través de la barra de herra-
mientas correspondiente (figura 9).
Haciéndolo de esta forma, “todos” los componentes de la lista tendrán la misma
orientación (si se desea orientar un único componente deberemos hacerlo una vez
ya situado en el esquema).
o EI
£ 1. ISIS de PROTEUS VSM
>
+
] %
B
k
E cor th
Figura 8. Selección y orientación Figura 9. Barra de rotación y reflexión
del componente
Ahora sólo falta realizar una pulsación sobre la ventana de trabajo y se colocará
el componente. El cursor del ratón se convierte en un lápiz blanco (figura 10). Se
pueden colocar varios componentes del mismo tipo simplemente realizando varias
pulsaciones, Para terminar de colocar un componente se debe seleccionar otro com-
ponente de la lista o pasar a otro modo de trabajo.
y en botón izquierdo coloca el component
Figura 10. Cursor en el modo de colocación
Es importante activar la herramienta de referencia automática (Real Time Annota-
tion). De esta forma, los componentes tendrán una referencia distinta y de forma
consecutiva; en los circuitos integrados con varios componentes encapsulados tam-
bién se referenciarán según dicho encapsulado (U1A, U1B, etc.). Esta herramienta
se activa o desactiva desde la opción de menú TOOLS > Real Time Annotation.
Una vez situados los componentes en el área de trabajo se pueden mover, al pasar
por encima del componente el cursor se convierte en una mano (figura 11) y al rea-
lizar una pulsación, el cursor se transforma en una mano con una cruz, indicando
que se puede mover el componente (quedan seleccionados al ponerse en rojo) y se
puede arrastrar (atención: si se vuelve a realizar otra pulsación del botón izquierdo
| se editan las características del componente). También se puede cambiar su orienta-
ción utilizando los comandos de rotación y reflexión a través de una pulsación del
botón derecho del ratón (figura 12) y se pueden eliminar con dos pulsaciones con el
botón derecho sobre ellos (o con el botón derecho y el comando Delete Objet).
y) Selección del componente
a Mover componente, se debe arrastrar el ratón
Figura 11. El cursor en modo de selección y mover
popupteçnitas
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Las uniones entre cables se pueden realizar de forma automática. Para ello, mien-
tras se traza un camino debemos realizar una pulsación sobre el cable objeto de la
unión eléctrica (figura 18). También se pueden realizar de forma manual mediante
el modo de unión (figura 19); en este modo tan sólo hay que ir haciendo pulsacio-
nes sobre los puntos donde deseamos realizar la unión.
NS
siste
Figura 18. Unión eléctrica entre cables Figura 19. Modo de unión
Se puede modificar el trazado de los cables. Para ello, se realiza una pulsación so-
bre el cable, en ese instante el cursor se convierte en una doble flecha (figura 20) y
se puede arrastrar el ratón para modificar el cable.
Figura 20. Mover los cables
También se pueden utilizar buses para las uniones multicable. Los buses permiten
conectar varios terminales entre sí utilizando un único elemento (figura 21); en este
caso, el cursor se convierte en un lápiz azul (figura 22). Pero para distinguir los
distintos cables que forman parte del bus y distribuirlos en la entrada y en la salida
se deben etiquetar mediante labels. En el caso de los cables se indicará una etiqueta
única LCDO, LCDJ1, etc. y al bus una etiqueta conjunta según el formato LCD[0..3]
que indique el nombre y la cantidad de cables que lo forman.
Figura 21. Cableado por bus
PEDIATRA
1. ISIS de PROTEUS VSM
Figura 22. Cursor en modo de trazado de bus
El etiquetado también permite unir cables virtualmente. Para ello, tan sólo es nece-
sario que los dos cables se Ilamen igual aunque no estén conectados entre sí. Para
etiquetar cables o buses se utiliza el modo label (figura 23). Al activar este modo y
realizar una pulsación sobre un cable o bus se abre una ventana donde podemos in-
troducir la etiqueta, además de seleccionar posición, orientación y estilo (figura 24).
ELA
Figura 23. Modo label Figura 24. Ventana de edición de etiquetas
Otro modo de unión virtual es a través de terminales. Al activar el modo terminal
(figura 25) se pueden seleccionar distintos tipos de terminales, entre ellos el utiliza-
do por defecto (default). Al utilizar este terminal en varios componentes y darle el
mismo nombre en todos ellos se consigue una unión eléctrica.
>
+
o
=
ud
T
k.
pe
1 jo
o
Figura 25. Modo terminal
EDU E
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
ROZICEET
|
eblhhbbe bhbbkl
RCSISDO
o RXD O———— RXD
xo 0——— mo
Figura 26. Unión eléctrica a través de terminales
Mediante este modo también se pueden colocar las masas y alimentaciones del
circuito utilizando las opciones Ground y Power (figura 26). De esta forma se puede
finalizar el circuito (figura 27).
2
[2
pe
[20
2
o [28
pa
te
pts
pé
15
[6
ar
[18
Figura 27. Circuito cableado
Tan sólo queda modificar las características de los componentes que lo requieran,
por ejemplo modificando el valor de los componentes pasivos. Para ello, se seleccio-
na un componente realizando una pulsación con el botón derecho, aparece el menú
contextual y se selecciona la opción EDIT PROPERTIES; también se puede utilizar
el modo edición (figura 28) en el cual tan sólo es necesario hacer una pulsación con
el botón izquierdo sobre el componente; en este modo el cursor se convierte en una
flecha (figura 29). Al ejecutar esta acción se abre la ventana de edición donde se
pueden cambiar las características de los componentes (figura 30), por ejemplo la
resistencia de 10K a 180 ohm. También se puede editar directamente la referencia o
el valor de un componente si la pulsación se realiza encima de estos elementos.
10
so = = 2 CET
1. ISIS de PROTEUS VSM
| Source
EM
38 Define Code Generation Tools...
Setup External Text Editor...
Bula a
1. borra,asm
Figura 33. Generador de código de ficheros fuente
En el caso del compilador CCS C, después de compilar se generan, entre otros, los
archivos *.HEX y *+.COF, los cuales se pueden utilizar para trabajar con el entorno
PROTEUS VSM. Para ejecutar el programa desde ISIS se debe abrir la ventana de
edición del microcontrolador (figura 32) y en el item PROGRAM FILE se puede
indicar el fichero de código fuente utilizado.
Además, en esta ventana se puede indicar la frecuencia de trabajo con la opción
PROCESSOR CLOCK FREQUENCY (debemos observar que para la simulación no
es necesario colocar elementos externos de oscilación en el PIC, tan sólo hacen falta
en caso de realizar la placa). En la opción ADVANCED PROPERTIES podemos ha-
bilitar o configurar muchos más elementos: configurar el wnacthdog, habilitar avisos
de desbordamiento de pila, accesos no correctos a memoria, etc.
Una vez cargado el microcontrolador con el programa fuente, se puede proceder a
la simulación del circuito empleando la barra de simulación (figura 34). Esta barra
se compone de la opción MARCHA, PASO A PASO, PAUSA y PARADA.
Figura 34. Barra de simulación
Con la opeión MARCHA la simulación se inicia (el botón se vuelve verde) y fun-
ciona en modo continuo. La simulación NO es en tiempo real y dependerá de la
carga de trabajo del PC. En la barra de estado se indica la carga de la CPU del PC
(a mayor carga menos real será la simulación) y el tiempo de ejecución; este tiempo
indica el tiempo que tardaria, en la realidad, el circuito en realizar un proceso (por
ejemplo esto implica que, dependiendo de la carga de trabajo de la CPU, un tiempo
de 1 sen el circuito puede significar varios minutos de simulación).
Di JM [om] animatin: 00:00:0265 (CPU load:
Figura 35. Barra de estado en la simulación
13
PEDIA
Compilador C CCS y Simulador PROTEUS para Microcontrotadores PIC
La opción STOP para totalmente la simulación mientras que PAUSE la para de for-
ma momentánea permitiendo hacer uso de las herramientas de depuración.
La opción PASO a PASO permite trabajar en tramos de tiempo predefinidos y, ade-
más, permite utilizar las herramientas de depuración. Esta opción está ligada a
la configuración de la animación (figura 36): SYSTEM > SET ANIMATION OP-
TIONS > SINGLE STEP TIME donde se puede definir el incremento de tiempo
que se desea que pase cada vez que se pulsa esta tecla.
comiguraigm RE
> Simulation Speed-———. [——>=Animation Options ————
Frames per Second: | | ShowVotage 5 Cunent on Probes? iv |
Timestep per Frame: | Show Logic State of Pirs? vo
Singlo Step Tama: | Showie Voltage by Cow? 1
| ShowiWre Cunert with Anowa?
Figura 36. Set animation options
En este cuadro de diálogo también se pueden cambiar los siguientes parámetros:
FRAMES PER SECOND: numero de veces que la pantalla de ISIS se refresca
en un segundo (por defecto 20).
* TIMESTEP PER FRAME: indica el tiempo de simulación por cada uno de los
frames; lo ideal es que sea el valor inverso del escogido en la opción FRAMES
PER SECOND.
ANIMATIONS OPTIONS: permite habilitar la visualización de las sondas de
tensión y corriente, mostrar los niveles lógicos en los pines, mostrar el nivel de
tensión en los cables mediante colores o mostrar la dirección de la corriente en
los cables mediante flechas.
VOLTAGE/CURRENT RANGES: permite determinar el umbral de tensión
(&V) y corriente para utilizar en la visualización de las correspondientes ANI-
MATIONS OPTIONS.
En este punto se puede simular (y animar) un sistema con el PICmicro (figura 37).
Lo más interesante de la simulación con microcontroladores es la utilización de las
herramientas de depuración. Es decir, visualizar mediante ventanas las distintas
partes internas del microcontrolador: memoria de programa, memoria de datos,
pila, etc. La mayor parte de estas ventanas sólo se pueden visualizar durante una
PAUSA.
14
DIADEMA
t Er E 1. ISIS de PROTEUS VSM
Sw5,
so
SW-spsT
1
É so
E
2.
oo
augsenaê ERES
UNOS
Figura 37. Una simulación en marcha
Desde el menú DEBUG (figura 38) también se puede iniciar la simulación pero
pensando en la depuración. Con la opción START/RESTAR DEBUGGING se pue-
de iniciar la simulación pero haciendo una pausa para ver las distintas ventanas
de depuración. También se puede ejecutar el programa directamente con la opción
EXECUTE, EXECUTE WITHOUT BREAKPOINT o EXECUTE FOR SPECIFIED
TIME que permite ejecutar directamente un programa, ejecutarlo sin puntos de
ruptura (en el caso de tenerlos) y ejecutarlo en un tiempo concreto.
Figura 38. El menú DEBUG antes de la simulación
15
LIA
Compilador € CCS y Simulador PROTEUS para Microcontrotadores PIC
Con WATCHPOINT CONDITION se pueden habilitar puntos de ruptura median-
te condiciones sobre las distintas variables (figura 44); se indica la variable, la más-
cara de la condición (NONE, AND, OR, XOR) y el tipo de condición (NONE, ON
CHANGE, EQUALS, etc.).
Hate cla lt ad ob chao
TE
Memo [PIECPU Daia Memoy-UZ
Nome [SAIDA
foto cocmeçe o AR Blob Bio Conan
Er E “Tum ia) watch pot
ás + Suspende emo ANY eqresinitue
ichpoint Condition
“Stop Me simon ori ve ALL epressions ate te.
É Doubt Wii) |
É Quad WB byte)
(IEEE Float byte)
< -JEEE Double (8 bytes)
Figura 43. Add by Address Figura 44. Puntos de ruptura
Hay una ventana de depuración que sólo se visualiza si se ha incorporado un fi-
chero COD o COF al microcontrolador, se trata de la ventana CPU SOURCE CODE
(figura 45). Con esta ventana se puede seguir la simulación línea a línea del archivo
de código fuente,
En esta ventana (también en el menú DEBUG) están disponibles unos botones de
control (figura 46).
18
IDA
1. ISIS de PROTEUS VSM l
* Radalo | o6
“include <Icdimio.c>
4include <kbdMID.c>
2 void main() (
char kj
int vox
1ed-init
kbdcini ti
port b. pu trade
cd puteç'NtListo...Nn');
uríle (TRUE) (
tha gec();
peid 48; //0x30
OD.)
Da
eise
Ted. purctk);
prinef(Icd pure
printfticd pure
printfílcd putc,
Brintr(Tedonutc
printeCIcdlpute, au
caracter
caracter
caracter
valor ascii
valor ascii
valor numerico
sf
Figura 45. La ventana CPU Source code
* | edad] dé
Figura 46. Los controles para la simulación
Simulación en modo continuo, no permite ver las ventanas de depu-
ración.
Permite ejecutar una instrucción; si es una subrutina o una función la
ejecuta directamente.
Permite ejecutar una instrucción; si es una subrutina o una función
entra en ella.
Trabaja en modo continuo hasta que encuentra un retorno de cual-
quier subrutina.
Trabaja en modo continuo hasta que se encuentra con un punto de
ruptura.
Habilita o deshabilita los puntos de ruptura.
19
LIRA
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Hay una ventana de diagnóstico que facilita la depuración, almacenando los erro-
res, mensajes de diagnóstico y avisos producidos durante el proceso de simulación
(figura 47). En la barra de estado (zona inferior del área de trabajo) se muestra un
aviso (figura 48); con una pulsación en el aviso aparece la ventana de diagnosis.
Meseago
ED SIS Ricano 7.07 2 (Bud 3632) C) Lobcente Electonics 1330-2007.
ÃO Source code Dull copied O
3 Compra dest E Nêretwvos de programa abcentes ElectonesAPoteus 7 PlofessionaNsAMPLE.
5 Not complaton completed O.
9 Nest ining complete O
[9 PROSPICE 710.09 fui 2529) (C) Labeentes Elechormos 18932007
[O Lcadedretit O NDCICUME = MEIA CONAIG NTempNL ISA ENT SD fo des 152405 MATCH.
[03 PIC1S mode telaave 7 00.03 (Bud 3685) semulating PICIGEZE deviom
[O Loaded 128 Eyes ol postes EEPROM data
1 Loading HEX He Machuom HEX,
O Roseta ot TOR bes Hom He Macho HE
Loaded 535 program words ar O sa tes
Figura 47. Mensajes de diagnóstico de la simulación
Se pueden configurar las opciones de esta herramienta desde la opción DEBUG>
CONFIGURE DISGNOSTIC (figura 49). En la ventana se muestran los componen-
tes del esquema susceptibles de un diagnóstico en la simulación y las diferentes
posibilidades de diagnóstico y el tiempo de diagnóstico (figura 50).
Lo TJIPTU|a |O sMesses) Rostshesti
Figura 48. Mensajes de la herramienta de diagnóstico
EST = remessa ro
DI Setgtastat Debora cnheio
[EX Exento ne
Exete Without Bresipovts. AbsPIZ
ExeenoFor Species Time
Figura 49. La configuración de diagnósticos
20
DIA
2. Compilador CCS C
Capítulo 2
Compilador CCS €
2.1 Introducción
El Compilador C de CCS ha sido desarrollado especificamente para PIC MCU, ob-
teniendo la máxima optimización del compilador con estos dispositivos. Dispone
de una amplia librería de funciones predefinidas, comandos de preprocesado y
ejemplos. Además, suministra los controladores (drivers) para diversos dispositivos
como LCD, convertidores AD, relojes en tiempo real, EEPROM serie, etc. Las ca-
racterísticas generales de este compilador y más información adicional se pueden
encontrar en la dirección http://www.ccsinfo.com.
Un compilador convierte el lenguaje de alto nivel a instrucciones en código má-
quina; un cross-compiler es un compilador que funciona en un procesador (normal-
mente en un PC) diferente al procesador objeto. El compilador CCS C es un cross-
compiler. Los programas son editados y compilados a instrucciones máquina en el
entorno de trabajo del PC, el código máquina puede ser cargado del PC al sistema
PIC mediante el ICD2 (o mediante cualquier programador) y puede ser depurado
(puntos de ruptura, paso a paso, etc.) desde el entorno de trabajo del PC.
ELCCS C es C estándar y, además de las directivas estándar (finclude, etc.), sumi-
nistra unas directivas específicas para PIC (fdevice, etc.); además incluye funciones
específicas (bit set(), etc.). Se suministra con un editor que permite controlar la sin-
taxis del programa.
NOTA
En el manual de CCS se da mucha más información de la que a continuación
se va a dar. En este capítulo sólo se describirán los elementos más básicos y
esenciales para comenzar a programar.
23
pesipieçnitas
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
2.2 Estructura de un programa
Para escribir un programa en C con el CCS C se deben tener en cuenta una serie de
elementos básicos de su estructura (figura 1).
DIRECTIVAS DE PREPROCESADO: controlan la conversión del programa
a código máquina por parte del compilador.
PROGRAMAS o FUNCIONES: conjunto de instrucciones. Puede haber uno
o varios; en cualquier caso siempre debe haber uno definido como principal
mediante la inclusión de la llamada main().
* INSTRUCCIONES: indican como debe comportar el PIC en todo momento.
* COMENTARIOS: permiten describir lo que significa cada linea del programa.
delay
XT: NOM
standard 10:
Dener Direct
Función
TIMERO dor usa dt
varo
É IvarOo=: quepur bit/PEN BO,
outpur ir PIR BO
Zoé tsmaro
Función principal
Betup timer O RIC INTERNAL/RICC, DIV 2
net tinero
emaBle intecrupto INT TIMERO
cnablo intecrupes global fe ro
Instrucciones
Comentarios
EASSALARALARASESARMo so an rar]
Figura 1. Estructura básica de un programa
2.3 Tipos de datos
CCs C acepta los siguientes tipos de datos:
Tipo Tamafio Rango Descripción
Intt a E
Short Tbit Dal Entero de 1 bit
24
popupteçnetas
2. Compilador CCS C
Tipo Tamafio * Rango Descripción
Int 7
Int8 8bit 0a 255 Entero
Intl6 a a à
Long 16 bit 0a 65.535 Entero de 16 bit
Int32 32 bit O a 4.294.967.295 Entero de 32 bit
A *1,175x10% a
Float 32 bit 23. 402x1058 Coma flotante
Char 8 bit 0a 255 Carácter
Void E E Sin valor
Signed Int8 8 bit -128 a +127 Entero con signo
Signed Intl6 16 bit -32768 a +32767 | | Entero largo con signo
Signed Int32 32 bit -24 a +(2º1-1) Entero 32 bit con signo
2.4 Las constantes
Las constantes se pueden especificar en decimal, octal, hexadecimal o en binario:
123 Decimal
0123 Octal (0)
0x123 Hexadecimal(0x)
0b010010 Binario (Ob)
Ea Carácter
Noto” Carácter octal
AxA5 Carácter hexadecimal
Además, se pueden definir constantes con un sufijo:
Int8 127U
Long SOUL
Signed INT16 80L
Float 3.14F
Char Con comillas simples *C”
También se definen caracteres especiales, algunos como:
dm
Cambio de línea
we
Retorno de carro
25
popipieçnetas
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
2.6.3 Relacionales
Menor que
Mayor que
<
>
> | Mayor o igual que
<= | Menor igual que
= | Igual
!= | Distinto
?: | Expresión condicional
2.6.4 Lógicos
E NOT
&& | AND
H OR
2.6.5 De bits
= | Complemento a 1
& | AND
” OR EXCLUSIVA
I OR
> | Desplazamiento a derechas
<< | Desplazamiento a izquierdas
2.6.6 Punteros
& | Dirección
* | Indirección
-> | Puntero a estructura
28
Orden de precedencia de los operadores:
2, Compilador Cesc
DIA D
Expresiones en orden de precedencia descendente
(expr)
lexpr -expr +expr expr+ --expr | expr--
(typejexpr *expr &value sizeof(type)
exprtexpr expr/expr exprWexpr
expr+expr expr-expr
expr<<expr expr>>expr
expr<expr expr<=expr expr>expr expr>=expr
expr=expr expr!=expr
expr&expr
exprºexpr
expr | expr
expr && expr
expr || expr
expr? exprexpr
lvalue = expr lvalue+=expr | Ivalue-=expr
lvalue*=expr lvalue/=expr | Ivalue%=expr
lvalue>>=expr | Ivalue<<=expr | Ivalue&=expr
lvalue"=expr lvaluel=expr | expr, expr
2.7 Funciones
Las funciones son blogues de sentencias; todas las sentencias se deben enmarcar
dentro de las funciones. Al igual que las variables, las funciones deben definirse
antes de utilizarse.
Una función puede ser invocada desde una sentencia de otra función. Una función
puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica
en la definición de la función; en el caso de no indicarse nada se entiende que es
un int8 y en el caso de no devolver un valor se debe especificar el valor VOID. La
función, además de devolver un valor, puede recibir parâmetros o argumentos.
29
popitagnéto
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
La estructura de una función es:
Tipo Dato Nombre Funcion (tipo param, param2,...)
(sentencias) ;
float trunca (float a) f
float bz
La forma de devolver un valor es mediante la sentencia RETURN:
return (expresión);
return expresión;
Donde expresión debe manejar el mismo tipo de dato que el indicado en la de-
finición de la función. En el caso de no devolver nada se finaliza con RETURN,
al encontrar esta sentencia el compilador vuelve a la ejecución de la sentencia de
amada. También se puede finalizar la función sin RETURN, tan sólo con la llave
de cierre “)”.
Las funciones pueden agruparse en ficheros de libreriías <fichero.h>, que se pueden
utilizar mediante la directiva ginclude <fichero.h>.
2.8 Declaraciones de control
Las declaraciones son usadas para controlar el proceso de ejecución del programa.
Las que admite CCS son:
* IfElse.
* While.
30
Esp
2 Compilador CCSC
IF (A>10)
(IF (A>20) B=15;)
ELSE B=5;
2.8.2 SWITCH
Siwitch es un caso particular de una decisión múltiple
switch (expresión)
t
Case constante 1:
sentencias;
break;
Case constante 2:
Sentencias;
break;
default: f
Sentencias;] +
3
Evalúa la expresión y en orden a la CONSTANTE adecuada realiza las sentencias
“asociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta DE-
FAULT (este comando es opcional).
comando BREAK provoca la salida de SWITCH, de lo contrario se ejecuta el
ente CASE.
pueden existir dos CASE con la misma CONSTANTE.
33
PEDIA
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Ejemplo:
case 3:
B=3;
break,
default: break;
2.8.3 FOR
Se usa para repetir sentencias.
for (inicialización ; condición de finalización ; incremento )
f
sentencias;
En las expresiones del FOR la inicialización es una variable a la cual se Je asigna un
valor inicial con el que controlar el bucle. La condición de finalización sirve para
evaluar ANTES de ejecutar las sentencias si es cierta o no, en el caso de ser cierta se
ejecutan las sentencias y en caso contrario se sale del FOR. Por último, la expresión
de incremento o decremento modifica la variable de control DESPUES de ejecutar
el bucle.
NOTA
Se pueden anidar bucles FOR utilizando distintas variables de control.
34
poppteçnétas
2. Compilador CCS
Si se ejecuta la siguiente expresión se consigue un BUCLE SIN FIN:
Fort; ; )
f
sentencias;
4
Ejemplo:
For (N=1,N<=10;N++)
Printf(*%u",N);
2.8.4 WHILE / DO-WHILE
WHILE se utiliza para repetir sentencias.
while (expresión)
t
sentencias;
y
La expresión se evalúa y la sentencia se ejecuta mientras la expresión es verdadera,
cuando es falsa se sale del WHILE.
PEDIA
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
2.10 Directivas y funciones (Preprocessor
commands y built-in functions)
2.10.1 Directivas
Las directivas de pre-procesado comienzan con el simbolo £ y continúan con un
comando específico. La sintaxis depende del comando. Algunos comandos no per-
miten otros elementos sintácticos en la misma expresión. Muchas de las directivas
utilizadas por CCS son extensiones del C estándar.
ADEFINE IDSTRING 4lFexpr *NOLIST
HELSE HIFDEF id 4*PRAGMA cmd
Estándar C a
+ENDIF ALIST +*UNDEF id
HERROR 4INCLUDE “FILENAME”
. HINLINE INT GLOBAL — 4SEPARATE
Cualificadores
$INT. DEFAULT HINT ox
FEDATR E LINE -PCH
Identificadores | DEVICE cuPEBo:. TIME
FILE PCM — FILENAME
RTOS HTASK AUSE RTOS
Especificación | fDEVICE CHIP ID “filename” 4FUSES options
Dispositivos | sID CHECKSUM fID NUMBER 4SERIALIZE
a USE DELAY CLOCK 4USEFIXED IO — AUSERS232
Eibrerias sUSE FAST IO sUSE RC “USE SPI
predefinidas
*USE STANDARD IO
ASM 4BYTE ideid FROM
*BIT id=id.const *ENDASM TYPE
COMnoLd rr ia-constconst — EILISROM ZERO RAM
memoria
4BUILD ALOCATE id=const
*BYTE id=const SRESERVE
Controlde | CASE *0PTn *PRIORITY
compilador ORG HIGNORE WARNINGS
Alo largo del presente libro se irán viendo varias directivas en su ámbito de apli-
cación particular.
38
popupteçnitas
2. Compilador COS €
Como ejemplo se pueden comentar:
+DEVICE chip, permite definir el PIC con el que se realizará la compilación.
fdevice PICI6FE4
£FUSES options, la cual permite definir la palabra de configuración para progra-
mar un PIC. Por ejemplo, en el PIC16F84 las opciones posibles son:
LP, XT, HS, RC, NOWDT, WDT, NOPUT, PUT, PROTECT, NOPROTECT.
fidevice PICIGFB4
ffuses XT, NOWDT, PUT, NOPROTECT
*INCLUDE “filename”, permite incluir fichero en el programa.
Finclude <16F84.h>
ffuses XT, NOWDT, PUT, NOPROTECT
*USE DELAY (CLOCK=SPEED), permite definir las frecuencia del oscilador del
PIC, el compilador lo utiliza para realizar cálculos de tiempo. Se puede utilizar M,
MHZ, K y KHZ para definir la frecuencia.
FINCLUDE <16F877.h>
fuse delay (clock=4000000)
£ASM y £ENDASM, permiten utilizar código ensamblador en el programa en C.
Se utilizan al inicio y al final del bloque ensamblador.
fasm
bsf TATUS,RPO
moviw 0x8
movwf PORTE
bof STATUS, RPQ
fendasm
DIA D
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
2.10.2 Funciones
CCS suministra una serie de funciones predefinidas para acceder y utilizar el PIC y
sus periféricos. Estas funciones facilitan la configuración del PIC sin entrar en el ni-
vel de los registros especiales. Las funciones se clasifican por bloques funcionales.
ASSERT() GETCH() PUTC()
FGETC() GETCHAR() | PUTCHAR()
FGETS() GETS() PUTS()
E/S R$232
EPRINTE() KBHIT() SET UART SPEED()
FPUTC() PERROR() SETUP. UART()
FPUTS() PRINTF()
ESBUS |SETUPSPI() |SPLDATA IS IN() [spLWRITEO
SPI2-HILOS |SPLXFER() — |SPLREAD()
j E OUTPUT.
GET TRISx() | INPUTK() FLOAT() SET TRIS B()
INPUT() INPUT STATE() | OUTPUT G() [SET TRIS C()
INPUT A() [INPUTX() OUTPUT H() | SET TRIS D()
OUTPUT.
INPUT. B() OUTPUT A() | piGH() SET TRIS E()
INPUT. C() OUTPUT.B() |OUTPUTJ() |SET TRISF()
ES -
DISCRETAS [INPULDO — | OUTPUT.BIT() | OUTPUT K() | SET TRIS G()
INPUT E() OUTPUT. C() | OUTPUT LOW() | SET TRIS H()
OUTPUT TO-
INPUT F() OUTPUT. D() | GaLE() SET TRIS J()
OUTPUT. DRI | PORT A PU- .
INPULG() | vr() LLUPSO SET TRIS K()
INPUT. H() — [OUTPUT.E() | PORTB PULLUPS()
INPUT I() OUTPUT F() [SET TRIS A()
E/S PUERTO | PSP INPUT FULL() PSP OVERFLOW()
PARALELO
ESCLAVO | PSP OUTPUT. FULL() SETUP. PSP()
I2C WRITE() | [2C Slaveaddr() | I2C.ISR STATE()
ESBUSIRC |I2C POLL() |IDCSTART()
RC READ() | PC STOP()
CLEAR INTE- | GOTO,
A = RESET CPU
CONTROL | RRUPT() ADDRESS() = GRC)
PROCESOS | DISABLE IN- | INTERRUPT. .
TERRUPTS() | ACTIVE() RESTART. CAUSE()
40
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
EDITE
* .PJT: fichero de proyecto; contiene toda la información relacionada con el pro-
yecto.
* “LST: muestra un listado con el código C y el código ensamblador asociado
para cada línea de código.
* .SYM: muestra las posiciones y valores de los registros y las variables del pro-
grama.
* STA: muestra una estadística de la utilización de la RAM, ROM y la PILA.
* .TRE: muestra un árbol del programa donde se especifican las funciones y sus
amadas, con la ROM y RAM usada en cada una de ellas.
* .HEX: fichero estândar para la programación del PIC.
* «COF:
depuración correspondiente.
2.12.2 Entorno de trabajo
ichero binario que incluye el código máquina y la información para la
El entorno de trabajo del CCS en PCW y PCWH permite compilar y también sumi-
nistra una gran variedad de herramientas auxiliares. En la figura 2 se muestra los
distintos elementos básicos del entorno de trabajo. Existen dos formas de iniciar
una sesión: abriendo un fichero de código fuente o creando un proyecto.
Comando de manejo
de ficheros.
Barra de
SubComandos
Ss = Para Dan RAS aaa
Dl [77
Programa : Barra de estândar
Barra de
Ventanas
auxiliares
ZONA DE CÓDIGO
Figura 2. Entorno de Trabajo
44
PERUA DS
ú 2. Compilador CCS C
Para abrir un fichero fuente directamente se realiza una pulsación sobre el icono
para el manejo de ficheros (figura 3) y aparece un menú donde podemos crear,
abrir, guardar o cerrar ficheros. Con el comando NEW podemos crear un fichero
fuente, un proyecto, un fichero RTF o un fichero de diagrama de flujo.
Figura 3. Los menus para el manejo de los ficheros
Con la opción NEW > SOURCE FILE, el programa pide el nombre del nuevo fichero
y crea una nueva ventana en blanco donde podemos empezar a escribir (Figura 4).
Figura 4. Fichero fuente nuevo
45
popiptagnéto
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Si se ejecuta el comando PROJECT WIZARD, tras pedir el nombre del nuevo pro-
yecto aparece la ventana de configuración con dos pestanias, una para configurar
las distintas opciones que se muestran en la barra de la izquierda (figura 5) y otra
donde se muestra el código resultante de la configuración (figura 6). Recorriendo
las distintas opciones (general, communications, ete.) se llega a obtener el código de
configuración deseado (figura 7), tras lo cual ya podemos empezar a escribir el
resto del código del programa. Debemos observar como se incluye un fichero de
cabecera *.h donde se encuentra la configuración del dispositivo (figura 8).
e ad nao à E =
Deco [ME =] Oeiuafoneay [ SUB je
T Rest WO ig sto DELA
E aut pu rev cora
lasuses amor “180 vino Tear
Bites Ea Due vio CUT
nses py re Tae
jsESnOPOrECI Parado
une canon;
ne metes ensessng
Figura 6. Ventana de configuración con el código resultante
46
Jo <158876 h
delay clock + anouor
= puerto b
vota main (void
set tris p(0500)
puerto b
do
delay ms (1005
bit ser (puerto b
delay me 1000
hit clear (puerto b
while (TRUE,
152876.»
= delay clock
e puerto b - U
jvoid main (void.
set tris b/Dx00/:
pusrto b - 0
Figura 11. Contrayendo el árbol
Enel editor de texto se puede pulsar el botón derecho sobre cualquier linea (figura
12); en el caso de los ficheros include permite abrirlos en una pestania adicional.
Figura 12. Las opciones del botón derecho
PEDIA D
2 Compitador ces c
49
popipteçnetas
Como ayuda para escribir el programa, CCS ofrece el comando VIEW (figura 13)
que permite visualizar las interrupciones (Valid Interrupts), fusibles de configura-
ción (Valid Fuses), hojas de características (Data Sheet) y una ventana completa don-
de se describe el PIC (Device Table Editor) mediante distintas pestanias (esta opción
también es accesible desde la opción TOOLS > DEVICE EDITOR (ver figura 15).
E
AassbissapaaSssssssasascsagaadãas
Figura 13. Comando VIEW
Se puede proceder a la compilación, que se puede hacer con el comando COMPILE
> COMPILE o directamente con la tecla de función <F9>. Durante la compilación
aparece una ventana donde se informa del proceso de compilación y si hay errores
(figura 14). Tras la compilación aparece una ventana con los mensajes de error si los
hubiese o el porcentaje de utilización de la memoria RAM y ROM si la compilación
ha sido correcta (figura 15).
NOTA
ATENCIÓN! Si se escribe un fichero fuente y a continuación se abre o se crea
un segundo fichero fuente, al compilar este último se compilará el primero.
Siempre se compila siempre el PRIMER fichero abierto.
50
forno p
* Reference Number, P362086211
mms E
Project:
FA.ATURA PlClpracticasiCLASENuz. jnt, clluz.e
Figura 14. Ventana de compilación
2. Compilador CS C
Figura 15. Mensajes de compilación
Tras la compilación se obtiene, entre otros, el fichero HEX para programar O si-
mular el PIC. En OPTIONS > PROJECT OPTIONS > OUPUT FILES, se pueden
configurar los ficheros de salida (figura 16).
[Project Optians. xd
Iecude pes.
Gisbaigafines
Figura 16. Ficheros de salida
51
Losi qual
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
25.4s07
Figura 22. Ventana de WATCH con la variable
54
popupteçnetas
LUQUAU TA
3. La gestión de los puertos
Capítulo 3 |
La gestión de los puertos |
3.1 Introducción |
Los microcontroladores PIC tienen terminales de entrada/salida divididos en puer-
tos, que se encuentran nombrados alfabéticamente A, B, C, D, etc. Cada puerto pue-
de tener hasta 8 terminales que, de forma básica, se comportan como una entrada/
salida digital. Según las características del PIC, cada puerto puede tener, además, |
asignado un bloque funcional: convertidor AD, USART, IC, etc.
Por ejemplo, en la familia PIC16F87X (figura 1), pueden llegar hasta 5 puertos en el !
PIC16F877 donde se pueden encontrar bloques de TIMERS, CCP, MSSP, USART,
PSP y convertidores AD.
Características | Prcierers | PrcioraTa PICI6FS76 PICIGFS7T
Gama Media :
Frecuen: DC20MHz | DC-20MHz DC20MEiz DEZMHZ
Reset (y delays) POR,BOR POR;BOR PORBOR PORBOR
(PWRTOST) | (PWRTOST) (PWRTOST) | (PWRT.OST)
Memoria de Programa FLASH | dk AR BK BK
(palabras de 1á-bits)
Memoria Datos (bytes) 192 19z 368 368
Memoria Datos EEPROM 8 128 26 fasso =
Interrupeiones 1 [14 13 14
Puertos E/S PorisA.BC | PorisABCDE | PorisABC | Ports ABC.DE
Temporizadores 3 3 3
2 2
PSP
E CANALES TR CANALES SCANALES TE CANALES
35
SS Ss Sis iso
Figura 1. Características de la família PIC16F87X
Considerando a los puertos como entradas/salidas digitales, los puertos se carac-
terizan por ser independientes, es decir, se puede programar cada terminal del
puerto para que se comporte como una entrada o una salida digital (figura 2). La
55
popipteçnitas
Compilador G CCS y Simulador PROTEUS para Microcontroladores PIC
habilitación como entrada o salida se realiza a través del registro TRISx (TRISA:
85h, TRISB: 86h, TRISC: 87h, TRISD: 88h o TRISE: 89h en el BANCO 1 de la memo-
ria RAM).
NOTA
Un valor 0 en estos registros indica que el terminal correspondiente del puerto
es de salida, mientras que un valor 1 indica que será de entrada.
La gestión del bus de datos se realiza a través de los registros PORTx (PORTA:
05h, PORTB: 06h, PORTC: 07h, PORTD: 08h o PORTE: 09h en el BANCO 0 de la
memoria RAM).
TERMINAL
BUS DATOS > vo
ESCRITURA
DATOS
ESCRITURA
TRIESTADO
LECTURA
DATOS
Figura 2. Estructura básica de un terminal
También existen algunos terminales que poseen unas características especiales, por
ejemplo:
* Enel puerto A, el terminal RA4 tiene salida en drenador abierto lo que obliga
a utilizar una resistencia de pull-up en el caso de funcionar como salida. Este
terminal tiene entrada en trigger-schmitt lo que permite su utilización como
entrada de contador de eventos externos en conjunción con un modulo tem-
porizador (TIMER).
* Enel puerto B, los terminales tienen una resistencia de pull-up interna que se
puede habilitar a través del bit RBPU del registro OPTION REG (81h, 181h).
Si dicho bit es 1, todas las resistencias de pull-up estarán deshabilitadas, si es
un O estarán habilitadas sólo en el caso de que el terminal funcione como en-
trada (figura 3).
56
popipteçnitas
3. La gestión de los puertos
Ejemplo 1: Se configuran los terminales RB1 como salida y el RBO como entrada
(con resistencia de pull-up). La salida debe tener el mismo valor que la entrada. Se
utiliza un interruptor en la entrada y un led en la salida (figura 5). Componentes
ISIS: PIC16F876, RES, LED-BLUE y SW-SPST-MOM.
Figura 5. Elesquema del ejemplo 1
fínclude <16F876.h>
ffuses XT, NOWDT
duse delay ( clock = 4000000 ) // Reloj de 4 MHz
ABYTE TRISB = 0x86 4) TRISB en 86h.
fBYTE PORTB = 0x06 // PORTB en 06h.
SBYTE OPTION REG = 0x81 // OPTION REG en 81h.
void main() f
bit clear (OPTION REG, 7); // Habilitación Pull-up
bit set (TRISB,0); 44 BO como entrada
bit clear (TRISB,1); 4) Bt como salida
bit clear (PORTB,1); // Apaga el LED
while (1) +
if (bit test(portb,0) == 1) // Si RBO és 1, apaga el LED
bit clear(portb,1);
else
bit set(portb,1); // Si RBO = 0, enciende el LED
Figura 6. El programa del ejemplo 1
pesipiiçnatas
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
3.2.2 A través de las directivas
El compilador ofrece funciones predefinidas para trabajar con los puertos. Estas
funciones son:
output X (valor); /| Por el puerto correspondiente saca el valor (0-255).
input XQ; || Se obtiene el valor en el puerto correspondiente.
set tris X(valor); [| Carga el registro TRISx con el valor (0-255).
port b pullups (valor); || Mediante valor = TRUE o valor = FALSE habilita
| o deshabilita las resistencias de pull-up en PORTB.
get trisX() || Devuelve el valor del registro TRISx
Donde la X es la inicial del puerto correspondiente (A, B, C,...).
Output A(OxFF); // Saca por el puerto À el valor 11111
Valor=Input B(); // Lee el valor del puerto B
Set tris C(0x0F); // Configura el puerto C: CO-C3 entradas, C4-C7 salidas
Existen una serie de funciones asociadas a un terminal o pin”. El parâmetro pin*
se define en un fichero include (por ejemplo, 16F876.h) con un formato del tipo
PIN. Xn, donde X es el puerto y n es el número de pin.
fdefine PIN AQ 40
fdefine PIN Al141
Las funciones son:
output low (pin*); HPinaoO.
output high (pin?); WPinal.
output bit (pin*, valor); /[ Pim al valor especificado.
output toggle(pin*); /| Complementa el valor del pin.
output float (pin*); || Pin de entrada, quedando a tensión flotante...
/| (simula salida en drenador abierto)
input state(pin*); || Lee el valor del pin sin cambiar el sentido del
/I terminal.
input(pin*); // Lee el valor del pin.
Las funciones output x() e input x() dependen de la directiva tipo $USE * TO que
esté activa. Directivas:
“USE FAST JO (PUERTO) [PUERTO: A...]
Con la función output x() se saca el valor al puerto y con la función input x() se lee
el puerto. La directiva no modifica previamente el registro TRIS correspondiente.
so
EDIR
3. La gestión de los puertos
Hay que asegurarse de que los registros TRIS están correctamente definidos. En-
tonces, el ejemplo 1 quedaría :
finclude <16F876.h>
Ffuses XT, NOWDT
fuse delay( clock = 4000000 )
tuse fast io(B)
void main() (
port b pullups (TRUE);
set tris B(0x01)s
output Jow(PIN B1);
white (1)
t
4£ (input(PIN BO) == 1)
output low(PIN B1);
else
output high(PIN B1);
D)
)
*USE STANDARD IO (PUERTO) [PUERTO: A...]
Conla función output. x() el compilador se asegura de que el terminal, o terminales
correspondientes, sean de salida mediante la modificación del TRIS correspondien-
te. Con la función input x() ocurre lo mismo pero asegurando el terminal (termina-
les) como entrada. Es la directiva por defecto. Entonces, el ejemplo 1 quedaria:
finclude <16F876.h>
ffuses XT, NONDT
fuse delay( clock = 4000000 )
fuse standard io(B)
void main() (
port b pullups (TRUE);
output low(PIN B1);
while (1)
t
1f (input(PIN BO) == 1 )
output low(PIN 81);
else
output high (PIN B1);
h
k
*USE FIXED IO (PUERTO OUTPUTS=pin*,...) [PUERTO: A...]
El compilador se encarga de generar el código para definir los puertos de acuerdo
con la información que indica la directiva (donde sólo se indican los terminales de
61
popupteçnetas
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
main()f
byte ud=0, dec=0;
SET TRIS B(0x00);
SET TRIS A(0x00) >
OUTPUT B(O);
For( ss) df
for (de
for (ud=Dpud<lO;ud++)
T A(0x02); /U cat D = apagado, cat U = encendido
B(DISPLAY[ud]); // Digito unidades
sdec<10;dec++) f // Cuenta digito decenas
50); // Para evitar parpadeos
0) output a(0x03); // Si decenas = 0,
// cat D = apagado
else output a(0x01); // Si decenas > 0,
/! cat D = encendido
OUTPUT B(DISPLAY[dec]); // Digito decenas
delay ms (50); // Para evitar parpadeos
Figura 8. El programa del ejemplo 2
Los terminales de los dos displays son comunes por lo que el dato es común; para
que aparezca el digito sólo en las unidades, o sólo en las decenas, se debe apagar
el otro display mediante el terminal de cátodo. Es decir, si se desea visualizar las
unidades se pasa el código “10” al display y si son las decenas se pasa el “01” (con
un 1 el display está apagado y con un O está encendido). La alternancia entre los dos
cátodos debe ser tan rápida que el ojo no se de cuenta del parpadeo. En el caso que
las decenas sean cero, su display se apagará.
CONST DISPLAY [10] = [0x38,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x78,0x6f) permi-
te visualizar de 0 a 9 mediante la combinación de dígitos típica de los displays de 7
segmentos (figura 9). Por ejemplo, en el 0 se encienden a, b, c, d, e y f, lo que signi-
fica 111111, 0x3F en hexadecimal.
Figura 9. Los 7 segmentos del display
64
PELADAS
3. La gestión de los puertos
3.3 Entradas y salidas
3.3.1 LCD
Se acostumbran ha utilizar LCD del tipo HD44780, con un número de líneas varia-
ble y un número de caracteres por línea también variable (por ejemplo, con 2 x 16
se trabaja con dos líneas de 16 caracteres cada una) (ver figura 10).
LCD con driver HD44780
1 ss (Masa)
2.- Vec (Alimentación de 2.7V a 5.5V)
.- Ajuste de contraste (de O a 5.5V)
S (selección de registro)
JW (lectura escritura)
6.- E (enable)
= 7. DO (dato LSB)
13-06
14.- D7 (dato MSB)
Figura 10. El patillaje de un LCD típico
El bus de datos es de 8 bits, aunque también existe la posibilidad de trabajar con 4
bits (con un menor número de caracteres). El compilador C incluye un fichero (dri-
ver) que permite trabajar con un LCD. El archivo es LCD.C y debe Ilamarse como un
ginclude. Este archivo dispone de varias funciones ya definidas:
lcd init 0;
Es la primera función que debe ser llamada.
Borra el LCD y lo configura en el formato de 4 bits, con dos líneas y con caracteres
de 5x 8 puntos, en modo encendido, cursor apagado y sin parpadeo.
Configura el LCD con un autoincremento del puntero de direcciones y sin despla-
zamiento del display real.
led gotoxy (byte x, byte y);
Indica la posición de acceso al LCD. Por ejemplo, (1,1) indica la primera posición de
la primera línea y (1,2) indica la primera posición de la segunda línea.
lcd getc (byte x, byte y);
Lee el carácter de la posición (x,y).
popiptigneta
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
led putc (char s);
S es una variable de tipo char. Esta función escribe la variable en la posición corres-
pondiente. Si, además, se indica:
M se limpia el LCD.
mel cursor va a la posición (1,2).
b el cursor retrocede una posición.
El compilador de C ofrece una función más versátil para trabajar con el LCD:
printf (string)
printf (cstring, values...)
printf (fname, cstring, values...)
String es una cadena o un array de caracteres, values es una lista de variables sepa-
radas por comas y frame es una función.
El formato es %nt, donde n es opcional y puede ser:
1-9: para especificar cuantos caracteres se deben especificar.
01-09: para indicar la cantidad de ceros a la izquierda.
1.1-9.9 para coma flotante.
t puede indicar:
c Carácter.
s Cadena o carácter.
u Entero sin signo.
d Entero con signo.
Lu Entero largo sin signo.
Ld Entero largo con signo.
a Entero Hexadecimal (minúsculas).
E Entero Hexadecimal (mayúsculas).
Lx Entero largo Hexadecimal (minúsculas).
LX Entero largo Hexadecimal (mayúsculas).
f Flotante con truncado.
8 Flotante con redondeo.
e Flotante en formato exponencial.
w
Entero sin signo con decimales insertados. La 1º cifra indica el total,
la 2º el número de decimales.
finclude <167876.h>
ffuses XT,NOWDT
fuse delay (clock= 4000000)
finclude <led.c>
fuse standard io(c)
fuse standard io(A)
enum funciones (med, cal ini);
void medir (voia)(
/falgorítmo correspondiente
output togale(pin CO);
!
void calibrar (void) (
/falgoritmo correspondiente
output toggle(pin Cl);
)
woid inicializar (void)(
//algoritmo correspondiente
output toggle (pin C2);
F
Roi run func(int numfunc) (
switch (numfunc) (
case med:
medir ()s
break;
case cal:
calibrar();
break;
case ini:
inicializar();
break;
DES main) (
Ehar item;
b
popiptaçneto
3 la gestión de los puertos
// Asigna un valor a cada elemento
//'med =0, cal=1 e ini-2
// Función de medir
n de calibrar
/! Eunción de inicializar
// Asignación de la función a realizar
// viene dada por la variable “item”
/! Variables de funciones
PEDIA D
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
char n menus = 3; /4 Número de funciones
4) bit set(TRISA,0);
led init()s
while (1) f
i£ (input (PIN AO) f // Detecta botón de selección
item++; // St pulsa aumenta la variable
delay ms (300); // Rara evitar rebotes
lcd pute( NE); /
if (item > (nmenus-l)) ( // Si la variable supera el
item = 0; ) 4) f£unciones la inicializa
switch (item) (
case 0:
lcd gotoxy (1,1);
printf(led pute, “MEDIR");
led gotoxy(1,1);
break;
case 1:
printé(lcd puto, “CALIBRAR*) ;
led gotoxy(1
break;
case 2:
printf(lcd pute, “INICIALIZAR");
lcd gotoxy(1,1) 7
break;
ción..,
/! Si se pulsa el botón de sel
|
(input (PIN A
(delay ms(200);
run func(item);) 4/ se llama a la función correspondiente
Figura 14. El programa del ejemplo 3
3.3.2 LCD gráfico
Se puede utilizar un LCD gráfico con una controladora KS0108 (como el de la figura
15), por ejemplo la ASI-A-1286AS-L]-EWS/W de la casa ALL SHORE INDUSTRIES.
70
PEDIA
3. La gestión de los puertos
Figura 15. LCD gráfico con controladora KS0 108
La distribución de patillas es la siguiente:
VSS: masa.
VDD: alimentación.
Vo: tensión de contraste.
D/I: entrada de datos/entrada de códigos de instrucción.
R/W: lectura/escritura.
E: enable.
DBO..DB7: datos de entrada.
CS1..CS2: chip select.
RST: reset.
El compilador C suministra varios drivers para este tipo de LCD gráficos, el GLCD.C,
GRAPHICS.C o, el más específico, HDM64GS12.C.
La conexión definida en estos ficheros es la siguiente:
P// 0 LOLA LLC LCA ALA ee A ECA AA AEE
mu ur
1H LCD Pin connections: mt
1H (These can be changed as needed in the following defines). ll!
HI VSS is connected to GND Hu
Hi! VDD is connected to +5V uu
HH! VO - LCD operating voltage (Constrast adjustment) uu
HH DII - Data or Instruction is connected to B2 un
di RIW - Read or Write is connected to B4 tu.
Hit! Enable is connected to B5 Hu
HH Data Bus O to 7 is connected to port d um
n
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
popipteçnetas
gled text57(97, 30,AL, 1, 1)
gled text57(113, 30,40, 1, 1);
glcd text57(30,5,1N, 2, 1);
while(1)f
74
1£ (input state(PIN A5)==0)
glcd rect(32,40,46,60,1,1);
else
glcd rect(32,40,46,60,1,0);
gicd rect(32,40,46,60,0,1);
if (input state(PIN A4)==0)
glcd rect (48,40,62,60,1,1)4
else
glcd rect(48,40,62,60,1,0):
glcd rect (48,40,62,60,0,1);
if (input state(PIN A3)==0)
glcd rect (64,40,78,60,1,1);
else
glcd rect (64,40,78,60,1,0);
glcd rect (64,40,78,60,0,1);
if (input state(PIN A2)==0)
gled rect (80,40,94,60,1,1);
else
gled rect (80,40,94,60,1,0) é
glcd rect(80,40,94,60,0,1);
if (input state(PIN Al)==0)
glcd rect (96,40,110,60,1,1)+
else
glcd rect (96,40,110,60,1,0);
gled rect (96,40,110,60,0,1);
if (input state(PIN A0)==0)
glcd rect(112,40,126,60,1,1);
else
gicd rect(112,40,126,60,1,0):
glcd rect(112,40,126,60,0,1);
delay ms (400);
4
Figura 17. El programa correspondiente al ejemplo 4
pontaria
3. La gestión de los puertos
3.3.3 Teclado [keypad 3x4)
Las entradas a través de un pulsador son muy habituales en los sistemas con micro-
controladores para trabajar con una mayor información o información alfanumérica.
Por ejemplo, se utilizan los teclados matriciales de 1x4, 3x4 0 4x4 (ver figura 18).
Ra
o À
9
*
=
Figura 18. Diferentes tipos de teclados matriciales
El compilador de C incluye el driver KBD.C para manejar el teclado (3x4). Las fun-
ciones que incorporan son las siguientes:
kbd init()
Inicializa el sistema, debe ser la primera función en el programa.
kbd getc()
Devuelve el valor de la tecla pulsada en función de la tabla que tiene programada
(ver figura 19).
4! Reypad layout:
char const KEYS[4][3] = 4€1','
eu
Figura 19, La definición de teclas en el archivo KBD.C
A través de la modificación de esta tabla podemos adecuar el resultado del progra-
ma a las distintas carátulas del teclado.
Elarchivo KBD.C está pensado para trabajar con el PORTB o el PORTD (ver figura
20). Activando o no la línea fdefine use portb lcd TRUE podemos seleccionar el
PORTB (ver figura 21).
7
popiptaneta
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
TIT deFim or Eb Kbd
nnyto/kbd =
kbd = 8
wit defined use portb kbd
nderine set tris kbd(yj set tris b(x)
Relse
uderine set tris kbd(h) set tris d(x)
Hendif
Figura 20. La configuración de puertos
Figura 21. La selección del PORTB
Las conexiones vienen dadas en el fichero pero se pueden modificar:
Tderine COLO (1
define COLA (1 << 6)
udefine COL2 (1 << 7)
derine ROWO (1 << 1)
define ROW (1 << 2)
naerine ROW2 (1 << 3)
ldefine
Figura 22. La asignación de patillas
76
3. La gestión de los puertos
385 cão ungosas
Figura 26. El esquema del ejemplo 6
finclude <16F876.h>
ffuses XT,NOWDT, NOPROTECT, NOLVP
fuse delay (clock= 4000000)
fuse standard io(a)
Hinclude <lcd.c>
finclude <kbd.c>
finclude <stdlib.h>
from 0x2100=[7",'2t,"3") // Posición 0,1 y 2 de la Eeprom con los datos...
4 TZ, Y 3 respectivamente
void main() f
char k;
int iz
char data[3), clave[3]; // Matrices para guardar clave y datos
led init()s
kbd init()s
port b pullups (TRUE) ;
while (TRUE) (
i=0; // posición de la matriz
printf(lcd putc,”lfpulsar tecla 1ln”); // Para primer dato
while (ix=2) ( 4! Para tres datos
k=kbd getc(); // Lee el teclado
79
popiptagneto
DIA
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
1£ (k!=0) /f SY se ha pulsado alguna tecla
(data [i]=k
// se guarda en la posición correspondiente
i++; // de la matriz
printf(lcd pute,”Vpulsar tecla tuln”,i+1); »// Siguiente dato
/
for (i=Dzi<:
IH) df // Basa datos de eeprom a la matriz clave
clave[i]
((datalo.
f printé(Jed pote,” fem
ead eeprom(i);]
lave[0])&4 (data [1]==clave[1]) s&(dat.
2]==clave[2]))
Abierta”); // Compara los datos y la clave
output bigh(PIN AO); (4 Si es igual da pulso al relé
delay ms (500);
output low(PIN AO)
else printf(lcd putc, “VíPuerta Cerrada”); // Clave erronea
delay ms(1000) ;
3
Figura 27.- Programa del Ejemplo 6
Ejemplo 7: Introducir los datos, a través de un teclado, de velocidad de un mo-
tor y generar una senial modulada en ancho de pulso proporcional al dato de la
velocidad (figura 28). Se dispone de los siguientes componentes ISIS: PICI8F876,
KEYPAD-PHONE, RES, 25K1058, CELL y MOTOR.
Ea
3
t
aa
=
Em
=
DECGEGEE PARE:
FERE
Figura 28. El esquema del ejemplo 7
3. La gestión de los puertos
Se genera una serial modulada en ancho de pulso PWM (sin utilizar el modulo
CCP de los PIC) donde el semiperiodo de sefial a nivel alto está fijado por el valor
introducido en el teclado. Para ello, se utiliza un registro de 8 bits para fijar el semi-
periodo a nivel alto (PWMH) y el semiperiodo a nivel bajo (PWML) (ver la figura
29). Como el valor máximo del registro es 255, este debe coincidir con el valor
máximo del teclado, es decir 9; por lo tanto, la relación entre el valor del teclado y
el semiperiodo PWMH será:
PWMHe= (255/9) x Tecla, aproximadamente PWMH=28*Tecla.
Figura 29. La modulación PWM
Según dicha ecuación cuando el valor de teclado sea O la salida será O de forma
continua y el motor estará parado. Cuando el valor de teclado sea 9, el semiperiodo
PWMH será de 252 (no llega a 255) y el motor estará casi a toda marcha. El semipe-
riodo a nivel bajo PWML se obtiene de restar el PWMH a 255.
finclude <16£876.h>
ffuses XT,NOWDT, NOPROTECT, NOLVP.
fUSE DELAY (CLOCK=4000000)
FINCLUDE <kbd.c>
AUSE STANDARD TO (a)
VOID MAIN()
f
CHAR k,kant="0"; 4) X valor de teclado, k valor anterior de teclado
char PhMH=D,PWML=0; // Semiperiodo alto y bajo
kbd init()s
PORT B PULLUPS (TRUE) >
WHILE (1) f /! Bucle infinito (siempre consulta el teclado)
k=kbd gete() 4) lee en ASCII el valor de ia tecla pulsada
2F (k=="V0") k=kant; // Si no se pulsa tecla (VD) se usa
41 el valor anterior
df ((k=="82) |] (k=="[")) k=t0" 7 // Si se pulsa * o f se asigna
/! un valor cero.
81
RDI
ESA
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
posición de memoria del programa principal desde la que saltó al producirse la
interrupción.
Las fuentes de interrupción dependen del PIC utilizado. Por ejemplo, el PIC16F84
tiene 4 fuentes de interrupción y la familia PIC16F87X tiene entre 13 y 14.
Los PIC de gama baja y media tienen un único vector de interrupción situado en
la dirección 04h de programa (figura 1), mientras que los de gama alta tienen dos
vectores de interrupción de distinta prioridad, alta y baja, situados en la posición
08h y 18h de la memoria de programa.
pe<t20>
CALL, RETURN
RETPIERETLW,
NiveltdolaPila |
Nivel2dolaPila | 8
Vector de Reset Oooh
Vector de Interrupción | o004h
0005h
Pagina O
o7FFh
osooh
Pagina 1 |
| orFFh
4000h
Pagina 2
A7FFh
APFEh
Pagina 3
Figura 1. Memoria de programa fposición del vector de interrupción)
Al poseer un único vector de interrupción (dos en la gama alta), el PIC posee unos
registros de control donde mediante la utilización de banderas, o flags, el usuario
puede determinar que es lo que ha producido la interrupción; además, en estos
registros, se pueden habilitar o no las distintas fuentes de interrupción (máscaras
de interrupción) e, incluso, permite una habilitación general.
Cuando la habilitación general está activa y algunas, o todas, la particulares tam-
bién lo están, los flags se activan en el caso de producirse algunas de las interrup-
ciones, de tal manera que el programador puede, mediante el testeo de dichos flags,
actuar de la forma más adecuada.
8
| Powatronica ça
4. Las interrupciones y los temporizadores
La familia PIC16F87X tiene hasta 14 fuentes de interrupción. Posee un registro de
control, INTCON (figura 2), que permite la habilitación de interrupciones y el manejo
delos flags. La habilitación general se activa mediante el bit GIE (INTCON<7>), el cual
es desactivado en el reset; por lo tanto, hay que habilitarlo por programa. Existen 4
registros adicionales para la gestión de las interrupciones: PIR1, PIR2, PIEI y PIE2.
Cuando se responde a una interrupción, el bit GIE es inhabilitado para evitar inte-
rrupciones sucesivas. La dirección de retorno del programa principal se almacena
enla pila y el contador de programa se carga con la dirección 0004h. Una vez en la
rutina de atención a la interrupción se puede determinar la fuente de la interrup-
ción mediante el testeo de los diferentes flags. Los flags activos deben ser “borrados”
antes de abandonar la rutina de interrupción para evitar reentradas erróneas.
Registro ITCON (dirección RAM: 0Bh/8Bh/10Bh/18Bhj) [PIC16F87x]
RW-O RIWO RIWO RIWO RWO RWO RWO RW
ce [Pee [Toc [inte [re [tor [inte [Re
Bit7 Bito
Figura 2. Registro INTCON
bit7: —GIE: Bit de habilitación global de las interrupciones.
1 = Habilita todas las interrupciones no enmascararbles.
0=Las deshabilita.
bitó: | PEIE: Bit de habilitación de las interrupciones de periféricos.
1 = Habilita todas las interrupciones no enmascarables de
periféricos.
0=Las deshabilita.
bit5: —TOIE: Bit de habilitación de la interrupción por desbordamiento del
TMRO:
1 = Habilita la interrupción del TMRO.
0=La deshabilita.
bit4: INTE: Bit de habilitación de la interrupción externa RBO/INT.
1= Habilita la interrupción del RBO/INT.
0=La deshabilita.
bit3: —RBIE: Bit de habilitación de la interrupción por cambio en el PORTEB.
1 = Habilita la interrupción del PORTB.
0=La deshabilita.
EDIR
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
bit2: -TOIF: Bit de flag de la interrupción del TMRO.
1 =El registro del TMRO se ha desbordado (debe borrarse
por software).
O= El registro del TMRO no se ha desbordado.
bitl: INTE: Bit de flag de la interrupción del RBO/INT.
1=Se ha producido una interrupción externa por RBO/INT
(debe borrarse por software).
0=No se ha producido la interrupción.
bitO: RBIF: Bit de flag de la interrupción por cambio en PORTB.
1=Al menos uno de los terminales RB7:RB4 ha cambiado de estado
(debe borrarse por software).
0=No se ha producido cambio en dichas patillas.
Registro PIE1 (dirección RAM: 8Ch) [PIC16F87x]
RIWO RIWO RIWO RIWO RIWO RWO RIWO RW
[pspE [Ave [Rree [Txe [sspiE [ccrrE | TMRZE | TMRIE
Bit? Bito
Figura 3. Registro PIE1
bit7: | PSPIE: Bit de habilitación de interrupción por lectura/escritura del puerto
paralelo esclavo:
1= Habilita la interrupción por lectura/escritura del PSP.
0=La deshabilita.
bitó: | ADIE: Bit de habilitación de interrupción por conversión A/D.
1= Habilita la interrupción.
0=La deshabilita.
bt5: —RCIE: Bit de habilitación de interrupción por recepción del USART.
1= Habilita la interrupción.
0=La deshabilita.
bit4: | TXIE: Bit de habilitación de interrupción por transmisión del USART.
1 = Habilita la interrupción.
0=La deshabilita.
popiptegnetas
4. Las interrupciones y los temporizadores
Interrupciones Descripción
FINT COMP2 Comparador 2.
INT CR Encriptación finalizada.
*INT EEPROM Escritura EEPROM finalizada.
INT EXT Interrupción externa (RB0).
INT EXTI Interrupción externa £1.
HINT EXT2 Interrupción externa $2,
“INT EXT3 Interrupción externa 23.
&INT RC Interrupeión I2€ (14000).
FINT ICI Entrada captura £1.
INT IC2 Entrada captura 42.
HINT IC3 Entrada captura £3.
HINT LCD Actividad LCD
FINT LOWVOLT | Detectado bajo voltaje.
*INT LVD Detectado bajo voltaje.
*INT OSC FAIL | Fallo en oscilador.
&INT OSCF Fallo en oscilador.
*INT PSP Dato de entrada en puerto paralelo.
&INT PWMTB Base de tiempo PWM.
&INT RA Cambio de estado en AO-AS5.
INT RB Cambio de estado en B4-B7.
&INT RC Cambio de estado en C4-C7.
INT RDA R$232 dato recibido.
FINT RDAO R$232 dato recibido en buffer O.
INT RDAI R$232 dato recibido en buffer 1.
INT RDA2Z R$232 dato recibido en buffer 2.
FINT RTCC Desbordamiento del Timer O (RTCO).
*INT PSP Escritura/lectura del puerto paralelo.
| dowatronica | [Lita
4. Las interrupciones y los temporizadores
Interrupciones Descripción
INT COMP2 Comparador 2.
4INT CR Encriptación finalizada.
*INT EEPROM Escritura EEPROM finalizada.
4INT EXT Interrupción externa (RB0).
*INT EXTI Interrupción externa £1.
*INT EXT2Z Interrupción externa $2.
HINT EXT3 Interrupción externa £3.
&INT 12C Interrupción 12€ (14000).
*INT IC1 Entrada captura £1.
INT IC2 Entrada captura £2.
HINT 1C3 Entrada captura 43.
“INT LCD Actividad LCD
tINT LOWVOLT | Detectado bajo voltaje.
&INT LVD Detectado bajo voltaje.
sINT OSC FAIL | Fallo en oscilador.
&INT OSCF Fallo en oscilador.
INT PSP Dato de entrada en puerto paralelo.
“INT PWMTB Base de tiempo PWM.
| FINT.RA Cambio de estado en AQ-AS.
INT RB Cambio de estado en B4-B7.
INT RC Cambio de estado en C4-C7.
INT RDA R$S232 dato recibido.
INT. RDAO R$232 dato recibido en bugfer O.
INT RDAI R$232 dato recibido en buffer 1.
FINT RDA2Z R$232 dato recibido en buffer 2.
sINT RTCC Desbordamiento del Timer O (RTCC).
HINT PSP Escritura/lectura del puerto paralelo.
LOUDUAUE
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Interrupciones Descripción
*INT SSP Actividad en SPI o 12€.
sINT SSP2 Actividad en SPI o 12C Port 2.
*INT TBE R$232 buffer de transmisión vacio.
*INT TBEO R$232 buffer O de transmisión vacio.
*INT TBE1 R$232 buffer 1 de transmisión vacio.
INT TBEZ R$232 buffer 2 de transmisión vacio.
INT TIMERO Desbordamiento del Timer O (RTCC).
*INT TIMER1 Desbordamiento del Timer 1.
“INT TIMERZ Desbordamiento del Timer 2.
INT TIMER3 Desbordamiento del Timer 3.
INT TIMER4 Desbordamiento del Timer 4.
INT TIMERS Desbordamiento del Timer 5.
sINT USB Actividad en el USB.
Existe una directiva fINT. DEFAULT que implica que se utilizará la función que le
acompania si se activa una interrupción y ninguno de los flags está activo.
La directiva INT. GLOBAL implica que la función sustituye todas las acciones que
inserta el compilador al aceptarse una interrupción. Se ejecuta solamente lo escrito en
dicha función. No se suele utilizar y si se hace debe hacerse con mucho cuidado.
Si se utilizan las directivas de interrupción, el compilador genera el código nece-
sario para ejecutar la función que sigue a la directiva. Además genera el código
necesario para guardar al principio y restituir al final el contexto; también borrará
el flag activo por la interrupeión.
El compilador C incluye funciones para el mejor manejo de las directivas de inte-
rrupción:
enable interrupts (nivel);
nivel es una constante definida en un fichero de cabecera (16F87X.h figura 5-) y
genera el código necesario para activar las máscaras correspondientes, afectando a
los registros ITCON, PIE1 y PIEZ2.
En el PIC16F876, los “niveles” permitidos son: