Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso PIC - PPSX
Curso PIC - PPSX
2
Equipo necesario
Requerimientos mínimos
3
INSTALACIONES
4
CONTENIDO
INTRODUCCIÓN.
TEMA I. GENERALIDADES DE LOS MICROCONTROLADORES PIC
TEMA 2. PROGRAMACIÓN DEL PIC16C54.
TEMA 3. MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y
TEMPORIZADORES
TEMA 4. CARACTERÍSTICAS ESPECIALES DEL HARDWARE
TEMA 5. OTROS MICROCONTROLADORES DE LA GAMA BÁSICA
TEMA 6. MICROCONTROLADOR PIC 16F84A
TEMA 7. MICROCONTROLADORES DE LA SERIE PIC16F87X
CONCLUSIÓN
ANEXOS
• El objetivo primordial que nos movió a diseñar este material, es el de
que adquieras, a través de su estudio teórico y práctico, las habilidades
y destrezas necesarias para conocer los microcontroladores y diseñar
circuitos basados en algunos de ellos.
• Se explicará y describirá qué son los microcontroladores, cuáles son sus
aplicaciones y funciones, y se describirán ejemplos de circuitos, para
aprender a manejarlos.
• Para ello hemos decidido trabajar con los microcontroladores PIC de
Microchip, debido a que, en la actualidad, son los que tienen mayor
popularidad, tanto en las universidades del continente americano y
europeo, como en las diversas industrias que desarrollan proyectos en
electrónica.
• Este material se ha dividido en siete temas, con los cuales irás
aprendiendo poco a poco acerca de los microcontroladores PIC, desde el
más básico, el PIC16C54, luego podrás observar las diferencias con otros
miembros de la serie PIC16C5X, si así lo deseas. Después podrás
conocer al microcontrolador PIC16F84A que es uno de los más básicos la
gama media, y finalmente se hablará sobre los microcontroladores de la
serie PIC16F87X, los cuales son los más utilizados de la gama media.
6 INICIO
• La metodología empleada consiste en explicar de manera secuencial, desde el
microcontrolador más básico, hasta que poco a poco vayas conociendo aquellos
componentes con mayor complejidad. Por otro lado, se incluirá desde un principio,
nociones básicas del software que te ambientará en el desarrollo de tus programas: El
MPLAB, el cual irás empleando, a medida que vayas elaborando tus programas,
instrucciones del lenguaje ensamblador, métodos para simular tus programas, elaboración
de interfaces electrónicas para la adaptación de señales y el uso del programador, para
que puedas hacer el montaje de los circuitos que has desarrollado.
• Este módulo instruccional te ofrece además, algunos anexos, los cuales podrás
consultar para profundizar tus conocimientos acerca de los microcontroladores y el
software que emplearás, definiciones comúnmente utilizadas en este campo, y
sugerencias para la elaboración de circuitos electrónicos con microcontroladores PIC.
7 INICIO
DIVISIÓN DE LOS TEMAS
8 INICIO
TEMAS RELACIONADOS CON
MICROCONTROLADORES MÁS AVANZADOS
• Tema 4: Aquí verás las características de los circuitos internos o hardware del
microcontrolador PIC16C54. En este tema podrás informarte acerca de la
inicialización del circuito, los temporizadores internos, el modo de reposo o bajo
consumo y los tipos de osciladores que puedes utilizar.
9 INICIO
UNOS CONSEJOS MÁS
ANTES DE EMPEZAR
• Para el mejor aprendizaje de este módulo es conveniente que leas y practiques con
este material de manera ordenada, para que tú, como interesado en esta área,
conozcas los microcontroladores, su tecnología electrónica avanzada y su aplicación en
la actualidad.
• Es importante que cuentes, al menos con una computadora compatible con las PCs que
trabaje en ambiente Windows, e instales el MPLAB IDE, el cual lo puedes bajar
gratuitamente en la dirección microchip.com. Si tienes la posibilidad de obtener el
PICSTART PLUS, y conseguir algunos microcontroladores, tales como el PIC16F54, el
PIC16F84 y el PIC16F877 sería mucho más provechoso para ti todavía, ya que podrás
contar con la posibilidad de hacer tus propios montajes.
• Si no tienes la posibilidad de obtener el PICSTART PLUS, en el anexo 7 encontrarás
un circuito y un software que podrás utilizar para grabar tu microcontrolador PIC.
• Finalmente, te aconsejamos que para empezar a estudiar con microcontroladores,
será necesario que tengas conocimientos de electrónica analógica y electrónica digital:
Circuitos con resistencias, condensadores, diodos, leds, transistores, tiristores,
amplificadores operacionales, interfaces, Álgebra de Boole, sistemas numéricos
binarios y hexadecimales, aritmética de números binarios, compuertas lógicas, bloques
funcionales combinacionales, contadores, etc.
• Mientras mayores conocimientos tengas de electrónica, circuitos digitales,
instrumentación y otros campos relacionados o no con la electrónica, mejor provecho
podrás sacar a estos microcontroladores para tus planes en el futuro.
10 INICIO
Te recomendamos que leas el material detalladamente, porque así
comprenderás mejor el contenido.
11 INICIO
Generalidades de los Microcontroladores PIC
1.1.- Contexto histórico de los microcontroladores
1.2.- Definiciones de microcontroladores
1.3.- Funciones de los microcontroladores
1.4.- Aplicaciones de los microcontroladores
1.5.- Algunos fabricantes de microcontroladores
1.6.- Consideraciones que debes tener antes de seleccionar un microcontrolador
1.7.- Familia de los microcontroladores PIC
1.8.- Principales características del PIC16C54
1.9.- Descripción de los microcontroladores PIC16C54
1.10.- Arquitectura del microcontrolador PIC16C54
1.11.- Instrucciones del PIC16C54 y los PIC de la gama básica
INICIO
Objetivos Terminales:
INICIO
1.1.- Contexto histórico de los
Microcontroladores
Al comenzar la década de 1970, los microcontroladores hicieron su aparición, y han
encontrado una gran aceptación en los diseños de aplicaciones electrónicas que
requieren un nivel básico de automatización y programación. Hoy en día su uso se
extiende en casi cualquier elemento que contenga componentes electrónicos: equipos de
sonido, televisores, hornos de microondas, aires acondicionados, sistemas de alarmas,
automóviles, periféricos de computadoras, teléfonos inalámbricos y celulares,
calculadoras, agendas electrónicas, traductores de idiomas, controles inalámbricos,
relojes despertadores, equipos de control industrial, equipos médicos, medidores
digitales, y así puede nombrarse un sinnúmero de aparatos los cuales tienen al
microcontrolador como circuito de control para el funcionamiento de éstos.
La razón de tal aceptación, se debe a que un microcontrolador, es básicamente una
computadora en miniatura, y como tal, puede desarrollar un gran número de funciones
según los programas que tenga grabado en su memoria.
Hoy en día existen microcontroladores con un potencial superior al de las primeras
computadoras personales, lo cual indica las posibilidades que se pueden desarrollar con
ellos, y todo esto en un pequeño circuito integrado.
14 INICIO
El primer microcontrolador
15 INICIO
Surgimiento de los PICs
16 INICIO
La “GI Microelectronics División” se convirtió en una empresa subsidiaria, llamada
“GI Microelectronics Inc.” Finalmente, en 1985, la empresa fue vendida a un grupo
de inversores de capital de riesgo, los cuales, tras analizar la situación,
rebautizaron a la empresa con el nombre de “Arizona Microchip Technology”, y
orientaron su negocio a los PICs, las memorias EPROMs paralelo y las EEPROMs
serie. Se comenzó rediseñando los PICs, que pasaron a fabricarse con tecnología
CMOS, surgiendo la familia de gama básica PIC16C5X, considerada como la
"clásica".
El éxito de los microcontroladores PIC ha sido vertiginoso. Mientras en 1990
ocupaba la vigésima posición en ventas de microcontroladores de 8 bits, en 1999
subió a la segunda posición, y desde 2002 se mantiene en la primera. En febrero
de 2004 llegaron a totalizar las tres mil millones de unidades vendidas y la
tendencia es seguir aumentando esta cantidad.
17 INICIO
Las razones del éxito de los PIC se basa quizás en muchas cosas: simplicidad en el
uso, conjunto de pocas instrucciones con alta eficiencia de código, rapidez en la
ejecución de programas, compatibilidad de instrucciones desde la gama básica a la
alta, gran variedad de modelos, multiplicidad de interfaces, soporte de software,
librería de aplicaciones prácticas. En pocas palabras, son elementos de muy alta
versatilidad que pueden utilizarse en un sinnúmero de diferentes diseños electrónicos
y, cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su
repertorio de instrucciones, es muy fácil emplear otro modelo.
Los fabricantes de los PICs, ofrecen una gama de diversos tipos de
microcontroladores, que pueden ser usados en muchas aplicaciones; desde un sencillo
reloj digital, hasta el control de velocidad de motores de inducción y circuitos de
control que utilizan lógica difusa en aplicaciones de robótica y procesos industriales.
18 INICIO
La diversidad de modelos, abarca los microcontroladores básicos, los cuales tienen:
memoria de datos (RAM), puertos y temporizadores. Hay otros, más avanzados, que
convertidores D/A, memoria EEPROM y FLASH (que pueden mantener sus datos después
19 INICIO
1.2.- Definiciones de Microcontrolador
20 INICIO
1.3.- Funciones de los
Microcontroladores
80
60
40
Interfaces
20
AUTOR: César Álvarez
DISEÑO INSTRUCCIONAL:
M. Sánchez y C. Álvarez
21 INICIO
1.4.- Aplicaciones de los
Microcontroladores
22 INICIO
1.5.- Algunos Fabricantes de
Microcontroladores
Fabricante Microcontroladores Capacidad de Memoria
Intel MCS51, 151, 251 8KB - 16KB ROM, 256B - 1KB RAM
Siemens C540U (8051) 4KB - 8KB ROM, 256B RAM
Dallas, Atmel 8051-52 2KB - 16KB ROM, 256B - 16KB RAM
Motorola 68HC05 0 - 16KB ROM, 176B – 512B RAM
68HC08 16KB - 32KB ROM, 512B - 1KB RAM
68HC11 4KB - 32KB ROM, 256B - 2KB RAM
Texas Instruments TMS370 0KB - 64KB ROM, 128B - 2KB RAM
NEC m PD7890xxx 2KB - 24KB ROM, 128B – 512B RAM
m PD780xxx 8KB - 60KB ROM, 256B - 2KB RAM
Toshiba TLCS-870 4KB - 60KB ROM, 256B - 2KB RAM
TLCS-90 0 - 60KB ROM, 0 - 2KB RAM
Hitachi H8/300 8KB- 60KB ROM, 256B - 2KB RAM
SGS- ST-6 1KB- 8KB ROM, 64B – 320B RAM
THOMSON ST-7 4KB- 60KB ROM, 256B - 2KB RAM
(ST-Micro) ST-9 0KB-128KB ROM, 512B - 4KB RAM
National COP820, 840, 880C, 912 1KB- 4KB ROM, 64B – 128B RAM
Semiconductor COP884xx, 888xx 4KB-32KB ROM, 128B –1088B RAM
Zilog Z8 0,5KB - 32KB ROM, 61B – 237B RAM
Microchip 16Cxx 512X12 - 4KX14 ROM, 25B –192B RAM
18Fxx 2K - 32Kx16 ROM, 232B – 2KB RAM
INICIO
Las compañías de mayor producción de
microcontroladores de 8bits 1990 - 2002
INICIO
1.6.- Consideraciones a tomar antes
de seleccionar un Microcontrolador:
Principalmente se debe tomar en cuenta, en qué aplicación quieres que éste opere.
Si deseas seleccionar algún fabricante específico, para desarrollar muchas
prototipos, entonces se deberá escoger aquél que ofrezca ciertas ventajas tanto en
las características del hardware como del software.
25 INICIO
En principio, para la selección de un microcontrolador en una aplicación específica,
deberás tomar en cuenta muchos factores para que esta escogencia resulte en una
relación efectiva de bajo costo. Entre estos factores están: tensión de
alimentación, tipo de fuente a utilizar, capacidad de memoria de programa y de
datos, tipos de señales a manejar, cantidad de líneas de entrada y salida, tipos de
memorias para programa y datos, capacidad de interrupción, tamaño y otros
factores más.
Podría darse el caso, de tomar en cuenta muchos de estos factores y luego
encontrar otro microcontrolador que se adapte mejor a lo que tú deseabas. En este
sentido, no hay mayor problema, ya que el programa que elaboraste en el primer
microcontrolador, podrá ejecutarse en otro, si éste es de la misma gama o de una
gama superior.
Por otro lado podríamos dar una idea inicial de aquellos microcontroladores que
ofrece Microchip, según la serie a la cual pertenece. En las páginas siguientes de
este módulo instruccional se mencionan las características principales de estos
microcontroladores. Para un análisis más detallado, deberás consultar con las
especificaciones que presenta el manual del fabricante.
Finalmente, en este módulo encontrarás cómo trabajar con los microcontroladores
más utilizados de Microchip. Obteniendo un buen aprendizaje, podrás seleccionar el
microcontrolador más adecuado para tu aplicación específica.
26 INICIO
1.7.- Familia de los
Microcontroladores PIC
La familia de los microcontroladores de 8 bits de Microchip, es muy variada, y
prácticamente hay un tipo de microcontrolador para cada aplicación. La siguiente
tabla resume las características principales de cada familia hasta comienzos de 2004.
La serie dsPIC, que aparece al final de la tabla, es una familia de procesadores
señales de 16bits que entró en producción recientemente.
27 INICIO
PIC 16FXXX 0,5K - 8K x 14 A/D C de 10bits, PWM, USART, EEPROM,
FLASH o ROM, Manejo de Interrupciones,
I2C, Comparador Digital, Vel: 5 MIPS,
Disponibles en 18, 28,40 y 44 Terminales.
PIC 17C4X/7XX 2K - 8K x 16 Multiplicador de 8x8 bits, Comparador
Digital, PWM, Opciones en: OTP, EPROM
y FLASH - ROM, USART, I2C,Velocidad:
8,5 MIPS, manejo de Interrupciones,
Disponibilidad de hasta 44 Terminales.
Conjunto de 58 instrucciones de 16 bits.
PIC18CXX /18FXX 0 - 65K x 16 Similar a la serie PIC 17C7XX. Conjunto
de 77 instrucciones de 16 bits velocidad
de 10 MIPS. Compilación en C eficiente
28 INICIO
1.8.- Principales características del
PIC16C54
Protección de programas.
29 INICIO
1.9.- Descripción del Microcontrolador
PIC16C54
30 INICIO
1.10.- Arquitectura del
Microcontrolador PIC16C54
El microcontrolador PIC16C54 utiliza una arquitectura Harvard, lo cual significa que la
memoria de programa y la de datos está separada en dos buses diferentes. Esto
mejora la velocidad en el acceso a instrucciones y datos, y permite utilizar palabras de
una longitud para las instrucciones y otra para los datos.
31 INICIO
Diagrama de Bloques del Microcontrolador
PIC16C54
TMRO F
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
32 INICIO
Al examinar la figura de la arquitectura, se puede ver que arriba a la izquierda se
encuentra la memoria de programa EPROM o ROM; su capacidad es de 512 palabras
de 12 bits, y allí está el programa desde la posición 000h.
A la derecha de la memoria de programa, se encuentra el registro PC o Contador de
Programa, del cual salen los valores de las direcciones que se leerán en la memoria
de programa. El programa del microcontrolador comienza en la dirección 0 que
corresponde a la siguiente instrucción después de la inicialización.
Los datos que salen de la memoria de programa, que corresponden a los códigos de
instrucción, que son las líneas del programa codificadas en binario, van al Registro de
Instrucciones. En este registro se almacena temporalmente el código de la
instrucción a ejecutar, la cual es interpretada por el Decodificador de Instrucciones.
El Decodificador de Instrucciones traduce el código o valor binario que está en la
memoria del programa a una instrucción que se va a ejecutar. Esta instrucción puede
tomar dos caminos: Si la instrucción implica un salto de dirección, entonces se
colocará en el registro PC (vía directa) un nuevo valor, el cual corresponde a la nueva
dirección del programa; si la instrucción consiste en hacer una operación con uno de
los Registros de Propósitos Generales (véase el bloque en la parte derecha de la
figura) o con el registro W, se tomarán unas líneas del Registro de Instrucciones
para especificar la dirección de acceso al registro, y las otras líneas para colocar el
código de la operación que se realizará en la Unidad de Lógica y Aritmética.
33 INICIO
En la Unidad de Lógica y Aritmética se puede hacer cálculos aritméticos, tales
como la suma y la resta binarias, u operaciones lógicas, tales como: “and”, “or”,
“exor”, complemento y desplazamientos. Las operaciones se pueden ejecutar con
una o dos variables de 8 bits, que pueden estar en el registro de trabajo W o en
un registro indicado por medio de la dirección F, que señala una posición de la
memoria de datos o Registro de Propósitos Generales, un Puerto, un registro TRIS
o el temporizador TMR0, como puede observarse en la parte inferior de la
arquitectura PIC 16C54.
En la parte superior derecha de la figura, se puede observar el bloque que se
refiere a la Palabra de Configuración, la cual define si se va a inhabilitar el
Temporizador WDT (perro guardián), si se va a hacer la Protección de Códigos del
programa de la memoria y cuál palabra de configuración se va a emplear para
seleccionar el tipo de oscilador en el bloque Oscilador, Tiempo y Control.
El registro Option, el cual se escribe por medio del registro W, es el encargado
de colocar la palabra de configuración en el Escalamiento de WDT y TMR0. Este
escalamiento fijará la programación del divisor de frecuencia en uno de los
temporizadores.
Finalmente, en la parte derecha del registro PC, se encuentran los registros Pila1
y Pila2, que se utilizan para almacenar la dirección del contador de programa en el
momento en el que se va a ejecutar una subrutina.
34 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
35 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
36 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
37 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
38 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
39 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
40 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
41 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE F REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
42 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
43 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
44 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
45 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
46 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
47 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
48 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
49 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
50 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
51 INICIO
9-11 ENTRADA PALABRA DE
9-11 PILA 1
EPROM-ROM TOCKI CONFIGURACIÓN
OSC1 OSC2 MCLH
PILA 2
512x12 PC INHABILITA
TIPO DE
12 TEMPORIZADOR OSCILAD.
PROTECCIÓN
WDT DE CODIGOS 2
REGISTRO DE
9 OSCILADOR,
INSTRUCCIONES
TIEMPO DE TIEMPO Y
ESCALAMIENTO
ESPERA DEL CONTROL
12 DE TMRO Y WDT
WDT
DECODIFICADOR 8
6
DE SLEEP
INSTRUCCIONES REG. OPTION OPTION
DIRECCIÓN
DIRECTA RAM DE REGISTROS DE
DIRECCIÓN DIRECTA PROPOSITOS
GENERALES
5
STATUS (SRAM)
8 8
25 BYTES
TMRO
UNIDAD
LÓGICA Y BUS DE DATOS
W ARITMÉTICA 8
4 8 8
8 4
52 INICIO
Diagrama de conexiones del
Microcontrolador PIC16C54
PIC
16C54
53 INICIO
1.11.- Instrucciones del PIC16C54
y los PIC de la gama básica
Un programa que se graba en un microcontrolador, es el encargado de ejecutar una
función de aplicación para el circuito a utilizar.
Para hacer un programa, es necesario conocer las instrucciones que ofrece el lenguaje con
el que se va a trabajar y manejar el software necesario para comprobar que el programa
haga lo que se desea.
Queremos hacerte entender que la labor de programación no es difícil. Hacer un
programa es algo así como hablar con alguien para que ejecute una o más acciones. Para
realizar esto, tú necesitas conocer una gran cantidad de palabras del idioma con el que te
puedas expresar, y la persona deberá entender el mismo lenguaje que tú empleas.
Mientras más palabras conozcas, podrás manejar con mayor eficiencia tu lenguaje y tu
modo de expresión. Sin embargo, además de conocer las palabras, necesitarás manejar
también las reglas de expresión o sintaxis. Por ejemplo cuando le dices a alguien:
“Quiero que me traigas 1Kg de azúcar”. En ese caso estás expresando un deseo a ese
alguien, que consiste en que esa persona salga de la casa, camine hacia el abasto, entre
al lugar, busque el azúcar en los estantes, tome un paquete de 1 Kg de azúcar, vaya a la
caja a pagarlo, saque el dinero, tome el vuelto, salga del abasto, regrese a la casa y
finalmente te entregue el paquete de azúcar.
Fíjate que en la expresión utilizada inicialmente, que es bastante corta, implica una serie
de pasos que se deben ejecutar para llegar a la acción final, y estos pasos podrán ser tan
específicos como a nosotros se nos pudiera ocurrir. La expresión “Quiero que me traigas
1Kg de azúcar” podría interpretarse en un software, como una instrucción de un lenguaje
de alto nivel o una subrutina de un lenguaje de bajo nivel, y los pasos que implican realizar
la acción, pueden verse como los códigos del lenguaje del microcontrolador.
54 INICIO
Cuando se quiere dar órdenes a un microcontrolador, se deberá emplear un lenguaje de
programación que él lo entienda directamente. Sabemos que un microcontrolador
entenderá códigos compuestos por “1” y “0”, que nosotros podríamos aprenderlo, pero
invertiríamos mucho tiempo y sería muy fácil equivocarnos al emplear este lenguaje. Sin
embargo, como vamos a contar con una computadora, podremos utilizar un lenguaje un
poco más fácil de entender, y la computadora hará las traducciones necesarias al
lenguaje del microcontrolador. Este proceso se llama “ensamblaje” o “compilación”.
55 INICIO
Para escribir un programa en un microcontrolador, sea cual fuere el lenguaje que vamos
a emplear, debemos utilizar un software que nos facilite la labor de la comunicación.
En este curso se empleará el software MPLAB, ya que es la plataforma de
programación gratuita que ofrece Microchip para todos los microcontroladores que
fabrica, y permite realizar todos los pasos necesarios en la programación del
microcontrolador, sin necesidad de llamar a otro software.
Para escribir un programa en un microcontrolador, debes comenzar por conocer las
instrucciones o el lenguaje que vas a emplear. En este curso comenzaremos por utilizar
el lenguaje Ensamblador, ya que éste nos permitirá conocer con bastante profundidad el
modo de funcionamiento del microcontrolador. Más adelante podrás emplear un lenguaje
de alto nivel; sin embargo queremos que sepas que si puedes hacer un buen programa en
el lenguaje ensamblador, éste se ejecutará con mayor rapidez y empleará menos
cantidad de memoria que al hacer uso de un compilador de lenguaje de alto nivel.
Después de conocer las instrucciones del lenguaje de programación, podrás utilizar el
MPLAB o algún otro software para editar el programa, es decir, escribirlo como si
fuera una carta, pero de manera ordenada; luego deberás ejecutar el comando que
ensambla o compila el programa; después, si no hubo error de sintaxis, podrás hacer la
simulación del programa; y si no hay errores de lógica, podrás finalmente grabarlo en la
memoria del microcontrolador para que, de esta manera, puedas probar si funciona
correctamente en un circuito. En cada fase debe hacerse las correcciones necesarias
según los resultados que se van obteniendo.
56 INICIO
Fíjate en lo siguiente:
• W Registro de trabajo.
• F Dirección del registro de la RAM.
• d Destino, a donde va el resultado (W o F).
• b Dirección del bit a utilizar en el registro de
dirección F.
• K Valor numérico constante.
58 INICIO
Operaciones entre W y f
ADDWF f,d
Indicará sumar (ADD) el registro de trabajo W,
con el registro de dirección f. El resultado se
colocará en W si d=W, o en f si d=f. Si no
colocas ningún destino, el ensamblador
guardará el resultado en el registro de
dirección f y te dará un mensaje de
advertencia.
59 INICIO
Operaciones con literales y bits
IORLW K
60 INICIO
INSTRUCCIONES DEL LENGUAJE
ENSAMBLADOR
61 INICIO
Instrucciones de transferencia
de datos y aritméticas
INSTRUCCIONES ARITMÉTICAS
62 INICIO
Instrucciones lógicas y de borrado
INSTRUCCIONES LÓGICAS
INSTRUCCIONES DE BORRADO
63 INICIO
Instrucciones de rotación
y manejo de bits
INSTRUCCIONES DE ROTACIÓN
64 INICIO
Instrucciones de Salto
65 INICIO
Instrucciones de Control
INSTRUCCIONES DE CONTROL
66 INICIO
ACTIVIDADES A REALIZAR
4.- Explica qué es lenguaje ensamblador y haz un ejemplo de un programa que lea dos
datos ubicados en la memoria de datos y los sume.
67 INICIO
TEMA 2
Programación del PIC 16C54
Contenido
2.1.- Programación de Microcontroladores
2.2.- Pasos para programar un Microcontrolador
2.3.- Representación del circuito.
2.4.- Edición del Programa con el MPLAB
2.5.- Ensamblaje del Programa
2.6.- Simulación
2.7.- Grabación del Microcontrolador
2.8.- Reduciendo el programa
2.9.- Advertencia para un vehículo
2.10.- Control de leds por medio de pulsadores
2.11.- Ejemplo de un programa para sumar
2.12.- Resta de dos números
INICIO
TEMA II: Programación del microcontrolador
PIC16C54
Objetivos Terminales:
•Explicar los pasos necesarios para
programar un microcontrolador para
una aplicación específica.
•Desarrollar programas básicos para
aplicaciones específicas, que puedan
ejecutarse por un microcontrolador
PIC16C54.
69
INICIO
2.1.- Programación de
Microcontroladores
70 INICIO
Recuerda que es indispensable el grabador,
encargado de escribir el programa en la memoria
Debes tener en cuenta que, además de del microcontrolador. Existen grabadores muy
los compiladores o intérpretes de los completos capaces de trabajar con muchos modelos
lenguajes usados, es muy interesante de diferentes familias. Otra herramienta de
disponer de simuladores de programas, desarrollo, es el emulador en circuito, que consiste
que consisten en un software que en un complejo dispositivo físico que, controlada por
ejecuta las instrucciones que un programador desde tu computadora personal,
representan, en una computadora, el dispone de un conector con cables que van hacia la
comportamiento interno del procesador y computadora y que tiene los mismos terminales que
el estado de las líneas de entrada y el microcontrolador que trata de imitar. El
salida. conector se introduce en la base donde irá el
microcontrolador, con el programa definitivo en la
memoria de la computadora. El emulador en
circuito (ICE) hace funcionar el sistema como si
hubiese un microcontrolador real, pero con la
ventaja de poder observar todo el funcionamiento
en la computadora. Un inconveniente de los
emuladores, es su elevado precio que los aleja de
los usuarios personales
71 INICIO
2.2.- Pasos para programar un
Microcontrolador:
Simular el programa
Después de cada fase, se
deberá corregir los errores
Ensamblar el programa
hasta que todo funcione bien.
Editar el programa
Representar el circuito
72 INICIO
2.3.- Representación del circuito.
Un ejemplo
73 INICIO
Respuestas
De acuerdo a las preguntas planteadas en la página anterior, las respuesta serán las
siguientes:
Se necesitarán doce líneas de entrada y salida, de las cuales cuatro serán entradas,
que corresponderán a los interruptores y ocho serán salidas, que corresponderán a
los indicadores o leds.
Las interfaces se harán de una forma sencilla. Se tomará en cuenta que en los
puertos de entrada, si las líneas no están conectadas, la lectura será indefinida (0 ó
1), entonces se conectará una resistencia de 4,7KΩ al voltaje de alimentación para
cada entrada, y en el mismo punto, se colocará un interruptor a la referencia
negativa o tierra, de manera que si el interruptor está abierto, se leerá un “1”, y si
está cerrado, se leerá un “0”. En cuanto a las interfaces de salida, se deberá
considerar si los microcontroladores pueden manejar directamente a los leds.
Teniendo en cuenta que los puertos de los microcontroladores pueden entregar o
absorber hasta 25mA a 25ºC con una alimentación de 5V, y para un led basta una
corriente de 5 a 10mA para encenderlo, entonces la interfaz se hará por medio de
una resistencia de 300Ω en serie con cada led. La ecuación para calcular la
resistencia de cada Led, será: Rled=(Vdd-Vled)/Iled
Donde: Vdd = 5V (O la tensión de alimentación que utilizas para el circuito)
Vled 2V (Depende del color del led: Rojo -> 1,6V; Verde -> 2,4V)
Iled 10mA (Depende del brillo deseado y la corriente máxima del led)
74 INICIO
Selección del Microcontrolador
Vdd
PIC
16C54
75 INICIO
2.4.- Edición del Programa
con el MPLAB
Después de representar el circuito, y de asignar cada línea de entrada y salida a los
puertos del microcontrolador, se procederá a editar el programa. Debes tener claro
con qué elemento se conecta cada línea de los puertos del microcontrolador.
Existen muchos editores para programar los microcontroladores PIC. Sin embargo,
se utilizará el MPLAB, debido a que esta herramienta de programación, ofrece la
posibilidad de: Editar, compilar, simular y grabar.
Para entrar al entorno MPLAB, se deberá acceder al software que ofrece
gratuitamente la compañía Microchip (www.microchip.com), o al comprar uno de los
sistemas de desarrollo para estos microcontroladores. Después de instalar el
software, se abrirá el programa MPLAB.
Si deseas alternar entre este módulo instruccional y el MPLAB, puedes hacerlo al
presionar simultáneamente las teclas: Alt y (Tab)
La primera vez que se abre este programa, aparecerá la siguiente pantalla:
Llamada:
Microchip
MPLAB IDE
76 INICIO
Familiarización con el MPLAB
77 INICIO
Opciones del MPLAB
2
78 INICIO
Es importante documentar
bien el programa
79 INICIO
Comentarios
80 INICIO
Los archivos “INCLUDE”
81 INICIO
Las Directivas y las Bases Numéricas
El hecho de que un valor aparezca como H’0000’, sólo significa que se está escribiendo
en hexadecimal. Por otro lado, EQU significa igual, o sea que al escribir la directiva:
W EQU H’0000’, significa que en cualquier instrucción que se escriba W, al codificarse
el texto, se colocará un valor 0 en el programa ensamblador. Una directiva, es algo así
como una instrucción que no se codifica en el programa, pero que realiza una operación
de control en el ensamblador. En otras palabras, la directiva EQU asigna la igualdad
entre una etiqueta y un número, para que en el momento de hacer la codificación del
programa, en donde aparezca la etiqueta, se asignará el número, ya que en el
microcontrolador sólo pueden entrar valores numéricos binarios. El ensamblador permite
también que utilices varios tipos de sistemas numéricos, por ejemplo, el número 11 en
decimal se puede representar de las siguientes maneras:
Base Numérica Representación
Hexadecimal 0B / 0BH / H’0B’ / 0x0B
Binaria B’1011’
Decimal D’11’
Observa que a los números hexadecimales que empiezan por una letra, le debes colocar
un 0 a la izquierda.
A continuación seguimos con la elaboración del programa en la siguiente página, donde
podrás observar, cómo se separa el programa en columnas, por medio de la tecla de
tabulación, de manera que la columna 1 se utiliza para etiquetas, la segunda para la
instrucción, la tercera para los operadores y la cuarta para los comentarios:
82 INICIO
División por columnas
{Instrucciones}
{Etiquetas}
{Comentarios}
{Operadores}
83 INICIO
Comienzo del Programa
84 INICIO
Si no estuvo claro el comienzo, lee
esto detenidamente
85 INICIO
Continuación del programa
86 INICIO
2.5.- Ensamblaje del Programa
87 INICIO
Ensamblando el archivo editado
88 INICIO
Resultados del ensamblaje
89 INICIO
Archivos con errores
Si algo sale mal, es decir, si hay errores al introducir las instrucciones, entonces
habrá que buscar el problema y solucionarlo. Si en tu programa no ha habido errores,
te felicitamos, porque lo copiaste muy bien. En caso contrario, no te preocupes,
porque te ayudaremos a encontrarlos. Primero volveremos a ensamblar el programa
con errores intencionales. Fíjate en esta sección del programa:
90 INICIO
Listado de errores
91 INICIO
Encontrando los errores
Una forma sencilla de encontrar en cuál línea se cometió el error, se logra al hacer
doble clic en el error que queremos ver. Es posible que un error aparezca varias
veces, ya que éste puede reflejarse en las líneas del programa que estén asociadas
con ese problema. Hagamos doble clic en donde aparece el error y caemos en el
programa fuente, en el cual podemos ver la indicación que señala la línea donde se
produjo ese error.
Indicación
de la línea
con error
92 INICIO
2.6.- Simulación
¿Corregiste todo? Es importante que lo hagas, y que te fijes bien, para dar el
próximo paso.
El próximo paso, consiste en la simulación del programa. Esto significa que se debe
revisar si hay errores de lógica, los cuales no se detectan al ensamblar el archivo.
Una vez ensamblado el programa, procederemos a hacer la simulación. Para ello,
vamos a asegurarnos que el MPLAB tiene activada la simulación. Nos colocamos en el
menú “Debugger”:
Debemos asegurarnos que la herramienta MPLAB SIM esté activada, para poder
ejecutar la simulación.
Después de ensamblar el programa, en la “memoria ROM” del MPLAB se encuentra el
programa ensamblado. Podremos ver las memorias y registros en la simulación al
seleccionar en “View”, según veremos en la página siguiente. Las ventanas las
podemos colocar según nuestra conveniencia.
93 INICIO
Ventanas para verificar el programa
Registros
Memoria de
programa
Registro de
funciones
especiales
94 INICIO
Simulación de las condiciones de entrada
Será también útil, colocar un simulador de condiciones, para variar los valores en las
líneas que corresponden al puerto A. Para ello se seleccionará en Debugger,
Stimulus. Esta opción sólo aparecerá, si ya ha sido seleccionada la herramienta de
simulación. A continuación aparece la siguiente ventana.
95 INICIO
Para asignar cada entrada
96 INICIO
Explicación de los estímulos
97 INICIO
Asignación de cada entrada
Tú podrás añadir más entradas de estímulo cada vez que presionas el botón “Add
Row”. Cuando termines de colocar todos los estímulos con sus características,
presionarás “Edit Complete” y luego “Save” para guardar lo que hiciste. Después de
esto podrás comenzar la simulación.
Trata de colocar las entradas del puerto A como estímulo tipo “toggle”:
98 INICIO
Ejecución del programa
Detención Reinicio
del programa
Verificación
de estados Ejecución
animada
Estimulación
de entradas
99 INICIO
Revisión de resultados
Los resultados no los podrás ver en el momento del aplicar los estímulos. Para
observar los cambios, deberás detener el programa.
También tienes la posibilidad de correr el programa paso a paso, para observar el
comportamiento del mismo al ejecutarse cada instrucción, o al presionar F8.
Al ejecutar en forma animada, se observa en el programa editado y en la memoria de
programa, cómo se van ejecutando cada paso del programa. En este modo, al aplicar
los estímulos no siempre obedecen. Esto se podrá verificar en la lectura de los bits
de los puertos.
Después de verificar que el programa se ejecuta correctamente, se deberá proceder a
grabar en la EPROM del microcontrolador.
Si existe algún problema, entonces se deberá revisar el programa, ya sea paso a paso
o entre dos posiciones de la EPROM.
100 INICIO
2.7.- Grabación del Microcontrolador
101 INICIO
Selección del puerto de comunicación serial
102 INICIO
Equipo de Desarrollo PICSTAR Plus
103 INICIO
Comenzando a Grabar
Una vez que escogiste el puerto de comunicación serial y tienes todo conectado, entonces
colocarás el microcontrolador en el conector del programador. Procederemos a llamar al
programador en Programmer, Enable Programmer. Primero se verificará la comunicación
con el programador. Si todo está correcto, entonces aparecerá la siguiente ventana:
104 INICIO
Cargando el programa a la computadora
105 INICIO
Estableciendo las condiciones de Hardware y
grabación en la memoria del microcontrolador
106 INICIO
Si no se dispone del microcontrolador
PIC16C54 o un borrador de EPROM
107 INICIO
Conexiones externas al microcontrolador
Una vez que se ha grabado el microcontrolador, este dispositivo está listo para ser
utilizado en un circuito. Como se vio en el capítulo 1, las conexiones restantes a los
puertos serán: Vdd voltaje de alimentación positiva, cuyo valor continuo, puede estar
comprendido entre 3V y 6V; Vss que corresponde al punto negativo de la fuente o
común; MCLR o inicialización, que en operación normal se deberá conectar a Vdd;
TOCKI, que es la base de tiempo del temporizador TMR0, y que se deberá conectar a
Vdd o a Vss en el caso de no utilizarse. Las otras dos líneas son OSC1 y OSC2, que
se utilizan para conectar el circuito oscilador.
Como primera prueba, se podrá conectar el circuito, según se muestra en la siguiente
página.
Al activar los interruptores, se deberá observar el funcionamiento del circuito, tal
como se programó. En el caso de no ser así, se deberá chequear las conexiones, y
las tensiones en cada punto del circuito, observar si hay oscilación en OSC1 y OSC2,
y chequear si los leds no están invertidos.
En el caso de haber revisado todo, y el circuito sigue sin funcionar, consulta con tu
profesor.
108 INICIO
Circuito final
5V
10K
f680KHz
100 pF
5V
8 Resistencias de 300
4 Resistencias de 4,7K
5V
18 17 16 15 14 13 12 11 10
PIC16C54
1 2 3 4 5 6 7 8 9
5V
109 INICIO
Algunas Preguntas
110 INICIO
2.8.- Reduciendo el programa
111 INICIO
Programa reducido para la
lectura de interruptores
112 INICIO
2.9.- Advertencia para un vehículo
Se desea hacer un circuito que indique señales de advertencia para un vehículo de dos
puertas. Las advertencias se darán según se cumplan las condiciones siguientes:
Condición 1: El motor está encendido y alguna de las puertas está abierta. Se
utilizará la línea RA0 para señalar esta condición.
Condición 2: El motor está encendido y el cinturón de seguridad del conductor está
desabrochado. Se utilizará la línea RA1 para indicar esta condición.
Condición 3: El motor está apagado y las luces están encendidas. Se utilizará la
línea RA2 para señalar esta condición.
Condición 4: El motor está apagado, la puerta del conductor abierta y la llave de
encendido puesta. Se utilizará la línea RA3 para indicar esta condición.
Advertencia General: Si ocurre cualquiera de las condiciones anteriores. Se tomará
la línea RB7 para señalar esta condición.
Cada condición se mostrará por medio de un indicador luminoso (Led) y la advertencia
general se dará por medio de una señal sonora.
Se dispone de seis detectores tipo pulsador, que detectan las señales de entrada y
serán conectadas a cada línea de entrada del puerto B. La lógica de los detectores
se dará de la siguiente manera:
Motor: Indica un “1” si éste está encendido, se conectará a RB0.
Pcond (puerta del conductor): Indica un “1” si ésta está abierta, se conectará a RB1.
Pacom (la otra puerta): Indica un “1” si ésta está abierta, se conectará a RB2.
Cintu (cinturón de seguridad): Indica un 1 si está desabrochado, se conectará a RB3.
Luces: Indica un “1” si están encendidas, se conectará a RB4.
Llave: Indica un “1” si está colocada, se conectará a RB5.
114 INICIO
Circuito y Ecuaciones Lógicas
COND1 = MOTOR.(PCOND+PACOM)
COND2 = MOTOR.CINTU
COND3 = MOTOR.LUCES
COND4 = MOTOR.PCOND.LLAVE
ADGEN = COND1 + COND2 + COND3 + COND4
RA0 = RB0.(RB1+RB2)
RA1 = RB0.RB3
RA2 = RB0.RB4
RA3 = RB0.RB1.RB6
RB7 = RA0 + RA1 + RA2 + RA3
Donde RAn son las líneas que corresponde al puerto A y RBn son las líneas que
corresponden al puerto B.
115 INICIO
Lógica del Programa
Nota: Es muy importante que las direcciones asignadas a cada etiqueta, no coincidan con las reservadas
para cada uno de los registros de propósitos especiales del microcontrolador.
116 INICIO
CONSIDERANDO UN PROGRAMA
MODULAR
En este caso, sabremos que la cantidad de registros utilizada es de 11, y que la posición de referencia
es “MOTOR”, que ocupa la posicón 10H.
117 INICIO
Otra forma de nombrar
bloques de constanes
Otra manera que puedes utilizar para nombrar las etiquetas de tu programa en un
bloque, es la siguiente:
cblock 0x10
MOTOR, PCOND, PACOM, CINTU, LLAVE, LUCES,
COND1, COND2, COND3, COND4, ALGEN
endc
118 INICIO
Asignación de detectores a registros
119 INICIO
Asignación de advertencias
120 INICIO
Condición de Alarma General
121 INICIO
Una alternativa más eficiente
La lógica se basa en sí, en que hay dos operadores: OPER1, donde se colocará las
condiciones del motor y OPER2, donde se asignarán las otras condiciones. Para ello, en el
bit 0 se coloca la condición 1, en el bit 1 la condición 2 y así sucesivamente. Luego se
escribe la condición inicial “0011” a OPER1, que asignará una suposición de que el motor
está encendido. En el caso de detectarse que está apagado, se inviertirá esta condición.
OPER1 (Motor): Motor Motor Motor Motor
OPER2 (Otros): (Llave. Pcond) Luces Cintu (Pcond+Pacom)
Condición4 Condición3 Condición2 Condición1
; COMIENZO DEL PROGRAMA
;
; ASIGNACIONES DE VARIABLES
;
OPER1 EQU 10 ; OPERADOR 1 SE UTILIZARA PARA COLOCAR LAS CONDICIONES
; DEL MOTOR
OPER2 EQU OPER1+1 ; EL OPERADOR 2 SE UTILIZARA PARA COLOCAR LAS OTRAS
; CONDICIONES
ORG 0
PREPAR
CLRW ; EL PUERTO A SERA UTILIZADO COMO ENTRADA
TRIS PORTA
MOVLW 7F ; RB7 SERA UTILIZADO COMO SALIDA Y EL RESTO
TRIS PORTB ; DE LOS BITS DEL PUERTO B SERAN ENTRADAS
122 INICIO
Programa de advertencia reducido
123 INICIO
2.10.- Control de leds por medio
de pulsadores
124 INICIO
Circuito utilizado para leer pulsadores
Vss
PIC
16C54
125 INICIO
Comienzo del Programa
126 INICIO
Preparación y detección
ORG 0
PREPAR MOVLW 0F
TRIS PORTA ; PUERTO A SERA ENTRADA
CLRW
TRIS PORTB ; PUERTO B SERA SALIDA
MOVLW 55
MOVWF PORTB ; SE ALTERNAN 1 Y 0 EN LAS LINEAS DE SALIDA DEL PUERTO B
CLRF PBANTES ; PALABRA DE ESTATUS QUE INDICA EN CADA GRUPO QUE LOS
; LEDS ROJOS ESTAN ENCENDIDOS Y LOS VERDES APAGADOS
CLRF STTUSPA ; PALABRA DE CONTROL PARA MANTENER VALOR EN LA ENTRADA
INICIO BTFSS PORTA,0 ; CONDICION BIT 0 DEL PUERTO A: SI ES 1 => PULSADOR NO PRESIONADO
GOTO CAMBIO0 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 0
BCF STTUSPA,0 ; PONE UN 0 PARA MANTENER CONDICION MIENTRAS SE PRESIONA PULSADOR
GRUPO1 BTFSS PORTA,1 ; CHEQUEA CONDICION BIT 1 DEL PUERTO A
GOTO CAMBIO1 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 1
BCF STTUSPA,1
GRUPO2 BTFSS PORTA,2 ; CHEQUEA CONDICION BIT 2 DEL PUERTO A
GOTO CAMBIO2 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 2
BCF STTUSPA,2
GRUPO3 BTFSS PORTA,3 ; CHEQUEA CONDICION BIT 3 DEL PUERTO A
GOTO CAMBIO3 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 3
BCF STTUSPA,3
SIGCICL CALL RETARDO ; LLAMA RUTINA DE RETARDO PARA ESPERAR TIEMPO DE REBOTE
GOTO INICIO
127 INICIO
Cambio de estado en dos de los grupos
128 INICIO
Eliminación del Rebote
El programa se repite en forma similar para los otros dos grupos. Intenta tú terminar
lo que falta del programa.
Finalmente queda por editar el retardo. Para ello, se asumirá que el oscilador del
microcontrolador, produce una frecuencia de 4MHz, lo cual quiere decir que el período
es igual a 0,25μSeg. Si una instrucción se ejecuta en cuatro períodos del oscilador,
significa que el tiempo de duración de una instrucción es de 1μSeg.
Para eliminar el rebote, se podrá esperar un tiempo de 30mSeg, es decir que se
necesitaría ejecutar 30.000 instrucciones. Esto se puede hacer mediante lazos
repetitivos, como el que se muestra a continuación, que corresponde a la instrucción
siguiente después de la última escritura al puerto B:
129 INICIO
2.11.- Ejemplo de un programa
para sumar
130 INICIO
Programa SUMABYTE
; SUMABYTE
;
; Programa que suma dos números de 8 bits. Los sumadores se encuentran
; en PORTB, luego se ubican en las posiciones 8h y 9h en la memoria de
datos.
; El resultado se guardará en la posición 0Ah y sale por PORTA
PREPAR CLRW ; SE ASUME PORTB COMO ENTRADA Y SE PROGRAMA
PORTA
TRIS PORTA ; COMO SALIEA
INICIO MOVF PORTB,W ; EL CONTENIDO DE PORTB VA A W
ANDLW 0F ; SE TOMAN LOS 4 BITS MENOS SIGNIFICATIVOS
MOVWF 8 ; SE GUARDA VALOR EN LA POSICIÓN 8H
MOVF PORTB,W ; SE VUELVE A LEER EL PUERTO B
ANDLW OFO ; SE TOMAN LOS 4 BITS MAS SIGNIFICATIVOS
MOVWF 9 ; SE GUARDA VALOR EN LA POSICIÓN 9H
SWAPF 9,F ; EL VALOR SE COLOCA EN
CALL SUMABYTE
MOVF 0A,W
MOVWF PORTA
GOTO INICIO ; VA AL INICIO DEL PROGRAMA
SUMABYTE MOVF 8,W ; Mueve Sumador ubicado en la posición 8 a W
ADDWF 9,W ; Suma valor de la posición 9 con W, resultado a W
MOVWF 0A ; El resultado se guarda en la posición 0A
RETLW 0 ; Retorno con W = 0
END
131 INICIO
Resta de dos números
Este ejemplo es similar al anterior. Sin embargo, hay que tomar en cuenta que la
operación “restar” en un microprocesador, se hace por medio de una suma, en donde
el valor negativo se complementa a dos, es decir, se complementa en 1 (se cambia
“unos” por “ceros” y viceversa) y luego se le suma 1.
;
; RESTABYTE
;
; Programa que resta dos números de 8 bits
; Los valores se encuentran ubicados en las posiciones minuendo (8h)
; y sustraendo (9h) en ;la memoria de datos.
; El resultado se guardará en la posición 0Ah
;
132 INICIO
Trata de hacerlo tú
4 1
3 2
133 INICIO
ACTIVIDADES A REALIZAR
Hasta este punto hemos visto los pasos necesarios para realizar programas,
simulaciones y prototipos con microcontroladores desde un punto de vista muy básico.
Algunas de las actividades que puedes realizar, para complementar este tema, son las
siguientes:
1.- Edita, compila y simula los programas que se han explicado en este tema.
2.- Graba un microcontrolador PIC16C54JW, PIC16F54 o PIC16F84 con los programas
que se proponen como ejemplos y monta los circuitos para verificar el funcionamiento.
3.- Hacer un circuito con un microcontrolador, que detecte una clave secreta de 8
bits. El usuario introducirá un valor binario en uno de los puertos y, por medio de un
pulsador, hará válido el código de entrada. Si el código falla tres veces seguidas, se
deberá inhibir el circuito por un período de dos minutos. En el caso de que el código
sea correcto, se deberá activar una luz indicadora.
4.- Hacer un contador binario de 8 bits, con dos pulsadores de entradas, que permita
que cuente en forma ascendente o descendente, de acuerdo al pulsador que se
presione.
134 INICIO
TEMA 3
MEMORIA DE PROGRAMA, REGISTROS,
PUERTOS Y TEMPORIZADORES
CONTENIDO
3.1- Organización de las memorias del PIC 16C54:
3.2.- Organización de la memoria de programa del PIC16C54:
3.3.- Organización de la memoria de datos del microcontrolador PIC 16C54:
3.4.- Registro STATUS
3.5.- Registros INDF y FSR, Modo de acceso indirecto
3.6.- Registro contador de programa PC
3.7.- Registro STACK (pila)
3.8.- Puertos de Entrada y Salida
3.9.- Registro OPTION
3.10.- Temporizador contador
3.11.- Temporizador WDT (Perro Guardián)
INICIO
TEMA III:
MEMORIA DE PROGRAMA, REGISTROS, PUERTOS
Y TEMPORIZADORES
Objetivos Terminales:
•Describir los registros de funciones
especiales del microcontrolador
PIC16C54.
•Mencionar la utilidad de los
temporizadores en los microcontro-
ladores.
136
INICIO
3.1- Organización de las memorias
del PIC16C54
Para entender un poco más las instrucciones, hace falta conocer la organización de la
memoria, cuáles son los registros especiales, dónde se ubican, y cuáles son los
registros de propósitos generales. Poco a poco se irá incluyendo ejemplos con otras
nuevas instrucciones en donde se observará cómo éstas influyen, tanto en los
diferentes registros como en el funcionamiento del microcontrolador. La memoria del
PIC16C54 se organiza en dos tipos:
137 INICIO
3.2.- Organización de la memoria de
programa del PIC 16C54
PC<8:0>
9
CALL, RERLW
NIVEL DE PILA 1
NIVEL DE PILA 2
Espacio 000h
para MEMORIA
memoria DE 0FFh
del 100h
usuario PROGRAMA
138 INICIO
3.3.- Organización de la memoria de
datos del microcontrolador PIC 16C54
Registros de Registros de
funciones propósitos
especiales generales
Estos incluyen:
Se utilizan para guardar
El registro STATUS (Estado)
información de datos y control por
El Registro FSR (Registro medio de las instrucciones del
programa.
apuntador de direcciones de la RAM).
El PCL (Contador de programa)
Los registros PORTA y PORTB
(puertos de entrada y salida)
El Registro TMRO (Temporizador)
139 INICIO
MEMORIA DE DATOS DEL
PIC16C54
00h INDF(1)
01h TMRO
02h PCL
03h STATUS
04h FSR
05h PORTA
06h PORTB
07h
REGISTROS
0Fh DE
10h PROPÓSITOS
GENERALES
1Fh
(1) El registro INDF, no corresponde a una posición física, sino al registro cuya dirección está
contenida en el registro FSR.
140 INICIO
Tipos de Registros
141 INICIO
Función de cada bit de los registros
de funciones especiales
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR
N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB) 1111 1111 1111 1111
N/A OPTION Contiene los bits de configuración del escalamiento, TMRO y WDT --11 1111 --11 1111
00h INDF Registro de la mem. de datos, su dirección está en el registro FSR xxxx xxxx uuuu uuuu
01h TMRO Temporizador contador de tiempo real de 8 bits xxxx xxxx uuuu uuuu
02h PCL 8 bits de bajo orden del Contador de Programa (PCL) 1111 1111 1111 1111
04H FSR Apuntador de la memoria de datos para acceso indirecto 1xxx xxxx
05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu
06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
Por otro lado, los bits TO (Tiempo de espera) y PD (Reposo) no se pueden escribir.
143 INICIO
Bits del Registro STATUS
RRF: Toma el valor del bit menos significativo (LSb) del registro f.
RLF: Toma el valor del bit más significativo (MSb) del registro f.
145 INICIO
Programa para incrementar
un contador BCD
INCLUDE "P16C5X.INC"
CONT EQU 0X10 ; En CONT se encuentra el contador BCD
org 0
clrf CONT ; Se hace CONT igual a 0
Increm incf CONT,F ; Se incrementa CONT en 1
movlw 6 ; Se hace el ajuste a BCD
addwf CONT,W ; suma 6 para corrección digito 0
btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0
movwf CONT ; corrige si hay acarreo digito 0
movlw 60
addwf CONT,W ; suma 60 para corrección digito 1
btfsc STATUS,C ; corrige si hay acarreo digito 1
movwf CONT
goto Increm
end
146 INICIO
3.5 Registros INDF y FSR,
Modo de acceso indirecto
147 INICIO
3.6 Registro contador de programa PC
PIC16C54
8 7 0
PC PCL
Palabra de Instrucción
148 INICIO
Para una instrucción CALL, o alguna instrucción donde el PCL es el destino, los bits 7
a 0 del PC se obtienen del código de la instrucción. Sin embargo, el bit 8 del PC no
viene del código de la instrucción, sino que es puesto en cero.
8 7 0
PC PCL
PIC16C54
149 INICIO
Saltos de dirección del programa
A lo largo de este módulo instruccional, hemos visto algunos ejemplos en los que se
ejecutan algún cambio en la dirección del programa. Recordemos que estas
instrucciones son las únicas que duran dos ciclos de máquinas, es decir, que se
demoran en ejecutar el doble de las otras instrucciones.
Veamos algunos ejemplos de saltos de dirección del programa:
150 INICIO
3.7 Registro STACK (pila)
El registro STACK guarda las direcciones de retorno de las rutinas que se llaman
por medio de la instrucción CALL, y carga la dirección de retorno al PC con la
instrucción RETLW. la longitud de palabra de la pila es la misma que la del PC. La
pila tiene dos niveles:
Una instrucción CALL coloca el contenido del nivel 1 de la pila, en el nivel 2 y luego
coloca el valor del contador del programa actual, incrementando en uno, en el nivel
1 de la pila. Si se llama a más de dos subrutinas en una misma secuencia,
únicamente las direcciones de las dos más recientes serán almacenadas.
Una instrucción RETLW, cargará el contenido del nivel 1 de la pila al PC y el del
nivel 2 al nivel 1. Si más de dos instrucciones RETLW se ejecutan, la pila se
llenará con la dirección almacenada previamente en el nivel 2, y podría dar
problemas en el programa.
NOTA:
Al utilizar la instrucción RETLW, el registro W se cargará con el valor literal en la
instrucción. Esto es útil para la construcción de tablas de conversión con la
memoria de programa.
151 INICIO
Convertidor BCD a 7 Segmentos
Este es un programa típico que utiliza una tabla de conversión BCD a 7 segmentos.
Básicamente se coloca el valor a convertir en el registro W, y se utiliza este valor
para sumárselo al PC, luego se regresa W con el valor convertido en 7 segmentos.
Para esta rutina, se asume que un “1” significa que el valor del segmento es activo, lo
cual se usa en indicadores del tipo cátodo común. El bit menos significativo (RB0)
corresponde al segmento “a”.
include "P16C5X.INC"
valorBCD equ 10
org 0
INICIO movf valorBCD,w ; el valor BCD a convertir se lleva a W
call BCD7SEG
goto INICIO
BCD7SEG ; rutina de conversion BCD a 7 segmentos
addwf PCL,f ; El valor BCD se suma al contador de programa
; en el retorno se convierte en 7 segmentos
retlw b'00111111' ;0
retlw b'00000110' ;1 a (RB0)
retlw b'01011011' ;2
retlw b'01001111' ;3 f (RB5) b (RB1)
retlw b'01100110' ;4
retlw b'01101101' ;5 g (RB6)
retlw b'01111101' ;6
retlw b'00000111' ;7 e (RB4) c (RB2)
retlw b'01111111' ;8 d (RB3)
retlw b'01101111' ;9
end
152 INICIO
3.8 Puertos de Entrada y Salida
Los puertos de entrada y salida pueden ser leídos y escritos como cualquier registro
de datos por medio de las instrucciones de programa. Sin embargo, una instrucción
de lectura (por ejemplo MOVF PORTB, W) leerá los terminales de los puertos,
independientemente si ellos están programados como entrada o salida. Después de
una inicialización, todos los puertos se definen como entrada (alta impedancia), ya
que los registros de control TRISA y TRISB son puestos en 1.
Puerto A: El puerto A es un registro de 4 bits (PORTA), los bits que se utilizan son
los menos significativos (RA3:RA0). Los bits 7-4 se leen como ceros.
153 INICIO
Registro de control de puerto TRIS
Los registros de control de puertos, son cargados con el contenido del registro W,
al ejecutar la instrucción TRIS F. Un “1” en un bit del registro TRIS, coloca el
adaptador del terminal correspondiente en modo de alta impedancia o entrada. Un
“0” en ese bit, coloca el adaptador de ese terminal como salida.
NOTA:
Una lectura de los puertos, lee los terminales de los puertos de salida, y no la
salida que ha sido enviada. Esto significa que si una salida de un terminal es
habilitada para tener un “1” y en el sistema externo, este terminal es forzado a un
nivel bajo, la lectura del puerto indicará que en el terminal correspondiente habrá
un cero.
Los registros TRIS, son registros de escritura solamente, y son colocados en 1
después de una inicialización (RESET todas las líneas de los puertos quedarán
programados como entradas).
Los registros TRIS no tienen una dirección asignada en los microcontroladores de la
gama básica. Sin embargo en los microcontroladores de la gama media si tienen
una dirección asignada, y por lo tanto, en ellos no se recomienda utilizar la
instrucción TRIS.
154 INICIO
Interfaces de Entrada y Salida
Cada terminal de un puerto, puede ser utilizado como entrada o salida. Para
operaciones de entrada, estos puertos no guardan la condición. El nivel de
entrada debe permanecer hasta que la instrucción de lectura se ejecute (por
ejemplo MOVF PORTB, W). En el caso de las salidas, las líneas mantienen su nivel
hasta que haya una nueva instrucción de escritura en el puerto. Para usar un
terminal como salida, la dirección correspondiente del bit de control en TRISA o
TRISB, debe colocarse en cero. Para usar este terminal como entrada, el bit
correspondiente en el registro TRIS debe colocarse en uno.
155 INICIO
Bus de
Datos D Q
Registro
Tipo D
Escribe Vdd
en puerto
CK Q P terminal de
Entrada/Salida
Registro N
W D Q
Vss
Registro
TRIS
TRIS f
CK Q
Inicialización
Lee de Puerto
156 INICIO
La siguiente tabla presenta un resumen de la posición de las líneas en cada uno de los
puertos:
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR
N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB, TRISC) 1111 1111 1111 1111
05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu
06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
157 INICIO
Escritura en un Indicador
7 segmentos
RB0
RB1
RB2
RB4
RB5
RB6
158 INICIO
Escritura en Dígitos Multiplexados
159 INICIO
Rutina para el manejo
de cuatro dígitos
;4IDIGITOS
PREPARA CLRW
TRIS PORTA
TRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS
160 INICIO
Rutina para el manejo
de varios dígitos
;MULTIDIGITO
;Salida para 4 o más dígitos 7 segmentos
INCLUDE "P16C5X.INC"
CBLOCK H'10'
DIGITO0, DIGITO1, DIGITO2, DIGITO3, SELDIGI
ENDC ; VALORES DE SALIDA DE CADA DIGITO
ORG 0
PREPARA CLRW
TRIS PORTA
TRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS
161 INICIO
3.9 Registro OPTION
U-C U-0 W1 W1 W1 W1 W1 W1
TOCS TOSE PSA PS2 PS1 PS0
7 6 5 4 3 2 1 0
162 INICIO
Bit 3: PSA: Bit de asignación del escalamiento.
1 = Se asigna el escalamiento a WDT (perro guardián).
0 = Se asigna el escalamiento al temporizador TMR0 (Timer 0).
Bit 2-0: PS2:PS0: Bits de selección de la relación de escalamiento.
163 INICIO
Cambios en el
preescalador
164 INICIO
3.10 Temporizador contador
165 INICIO
Modo Temporizador
01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
PC (Contador de
programa)
MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0, W
Preparación de
instrucción
Temporizador 0
Instrucción
Ejecutada
Escribir Leer TMRO Leer TMRO Leer TMRO Leer TMRO Leer TMRO
TRMRO Lee NTO+1 Lee NTO+2
Lee NTO Lee NTO Lee NTO
Ejecutado
166 INICIO
Ciclos del Temporizador 0:
Oscilador interno con escalamiento 1 a 2
01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
PC (Contador de
programa)
MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0,W
Preparación de
instrucción
Temporizador 0
Instrucción
Ejecutada
Escribir Leer TMRO Leer TMRO Leer TMRO Leer TMRO Leer TMRO
TRMRO Lee NTO
Lee NTO Lee NTO Lee NTO Lee NTO+1
Ejecutado
167 INICIO
Modo Contador
Entrada con
TOCKI Disparador de
N Schmitt
El escalamiento puede ser usado por TMR0 o por el temporizador WDT “perro
guardián”, pero no por ambos. La asignación del escalamiento se hace por el bit
PSA (bit 3 de OPTION). Si el bit PSA es cero, el escalamiento será asignado al
temporizador TMR0. Los valores de escalamiento pueden ser desde 1/2 hasta
1/256, según la tabla mostrada en el registro OPTION.
168 INICIO
En la tabla siguiente, se muestra un resumen de los registros asociados con
el temporizador TMR0.
N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 11 1111 1111 1111
169 INICIO
Contador de tiempo
Veamos como ejemplo que se quiere incrementar un contador de tiempo cada segundo,
y que en una posición de memoria, se lleve la cuenta del tiempo en minutos.
Supongamos que el microcontrolador tiene un cristal de 10MHz.
Para este caso, si el oscilador es de 10MHz, el período del oscilador es igual a
100nSeg. El ciclo de máquina dura cuatro períodos del oscilador, por tanto
corresponde a 400nSeg. El valor máximo que se puede asignar al preescalador para
el TMR0, corresponde a 256 veces. Es decir que si tomamos el máximo valor, se
obtiene: 400nSeg X 256 = 102,4μSeg. El TMR0 es de 8 bits, por tanto este tiempo
lo podemos ampliar hasta 102,4μSeg X 255 = 26,112mSeg. Si la idea es obtener un
tiempo submúltiplo de 1Seg, podríamos seleccionar por ejemplo 20mSeg o 10mSeg, de
manera que al leer 50 o 100 veces el incremento de un registro que detecte cada vez
que el TMR0 se desborda, entonces obtendríamos 1 segundo respectivamente.
Supongamos que seleccionamos como base del temporizador 10mSeg, entonces
podríamos tomar el valor de escalamiento en 1/128, en vez de 1/256 que es el
máximo. Así se podrá tener mayor exactitud en la medición del tiempo.
El incremento del tiempo se hará en 400nSeg X 128 = 51,2μSeg. En 10mSeg se
necesitarán 10mSeg/51,2μSeg períodos del TMR0, es decir; 195,3125 ciclos de
TMR0. Como éste sólo admite un valor entero, se tomará el 195. El resto podría
corregirse con una rutina que retarde la escritura del temporizador unos 51,2μSeg X
0,3125 = 16μSeg, que corresponde a la ejecución de 40 ciclos del PIC. Sin embargo,
lo mejor sería probarlo sin tomar en cuenta este remanente, y luego corregir.
Para obtener los 195 ciclos del TMR0, debe cargarse el valor 256-195=61; no se
toma en cuenta el retardo en la escritura, ya que el valor del escalamiento es alto.
170 INICIO
El Contador de segundos
y minutos
171 INICIO
Una consideración respecto
al programa anterior
172 INICIO
Uso de un oscilador externo
para TMR0
Si un oscilador externo se usa para el temporizador TMR0, hay que considerar que
debe haber una sincronización con la fase del oscilador externo; sino habrá un
retardo en el incremento del temporizador TMR0 después de la sincronización.
01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
Un pequeño pulso se
Entrada de un pierde en el muestreo
Oscilador Externo o
Salida del (1)
Escalamiento
(3)
Salida del Oscilador
Externo/Escalamiento
Después del muestreo
Incremento del tem-
porizador TMR0 (Q4)
Temporizador TMR0
173 INICIO
Cuando se usa el escalamiento, se obtiene una señal simétrica cuya frecuencia está
divida con respecto a la de la frecuencia de entrada del oscilador. Es necesario que
en la entrada TOCKI, el período sea de por lo menos 4Tosc dividido entre el valor
escalado. Por otro lado, la duración de un nivel debe ser mayor que el mínimo ancho
de pulso requerido de acuerdo a las especificaciones, es decir 10nSeg.
Debido a que la salida del escalamiento se sincroniza con el oscilador interno, cuando
ocurre una transición en la señal externa habrá un pequeño retardo en el incremento
del temporizador TMR0.
174 INICIO
3.11 Temporizador WDT
(Perro Guardián)
175 INICIO
En los PIC16C5X, el temporizador WDT o “perro guardián” es un oscilador
independiente de configuración RC que está dentro del microcontrolador. Esto
significa que este circuito genera una señal, aunque el oscilador principal (terminales
OSC1/CLKIN y OSC2/CLKOUT) se haya detenido, como por ejemplo al ejecutar la
instrucción SLEEP. En una operación normal o en el modo “Reposo” (SLEEP), una
señal de habilitación del WDT, resultará en una inicialización del microcontrolador.
El bit TO (bit 4 de STATUS) se borrará después de esta señal de inicialización.
176 INICIO
Período del temporizador WDT
177 INICIO
Consideraciones al programar
el Temporizador WDT:
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor al Valor después de
Encender TMR0 y MCLR
N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 --11 1111 --11 1111
178 INICIO
Programa que utiliza el WDT
para prevenir lazos infinitos
179 INICIO
ACTIVIDADES A REALIZAR
1.- Hacer un contador BCD con dos pulsadores para el control ascendente y
descendente, y que tenga dos dígitos de salida en formato siete segmentos.
2.- Hacer un control de luces para el semáforo propuesto en el tema 2, en el cual se
lleve la medición del tiempo con el temporizador TMR0. Suponga que la frecuencia
del oscilador es igual a 4MHz.
3.- Hacer un reloj digital, que sincronice su velocidad con el temporizador TMR0.
Este reloj deberá tener la posibilidad de ajustar la hora y minutos, por medio de
pulsadores. Asuma que la frecuencia del oscilador es igual a 20MHz.
4.- Incluir el temporizador WDT en las actividades anteriores, de manera que el
programa se ejecute correctamente, en condiciones normales, y que haga la
inicialización, en el caso de caer en un lazo infinito.
180 INICIO
TEMA 4
Características Especiales del
Hardware
CONTENIDO
INICIO
Objetivos Terminales:
•Describir los modos de
configuración que presentan los
microcontroladores PIC.
•Señalar la importancia que tiene
activar el modo “Reposo” en un
microcontrolador.
•Describir los modos de
inicialización que presentan los
microcontroladores PIC.
182
INICIO
4.1.- Configuración de
la serie PIC16C5X
Dos de los bits son para seleccionar el tipo de oscilador que se va a utilizar, un
bit es para la habilitación del temporizador “Perro Guardián” (WDT) y un bit es
para habilitar la protección del código del programa.
183 INICIO
Diagrama de la palabra de configuración
Registro CONFG
Dirección FFFH
Bits 11-4: No utilizados: Se leen “0”
184 INICIO
Protección de códigos
Si este Bit tiene valor 0, entonces no será posible leer el programa guardado.
185 INICIO
Selección del Oscilador
186 INICIO
En las figuras de la página siguiente, se puede observar la conexión del cristal en
el microcontrolador, y los valores adecuados de los condensadores según el modo de
oscilación seleccionado.
Otra alternativa existente es la de conectar una señal producida por un oscilador
externo en la entrada OSC1/CLKIN, lo cual se puede observar a continuación
187 INICIO
C1(1) OSC1
PIC16C5X
SLEEP
XTAL RF(3)
Hacia lógica
OSC2
interna
Tabla de Selección
RS(2)
C2(1)
HS 4MHz 15 pF 15 pF
8MHz 15 pF 15 pF
20MHz 15 pF 15 pF
188 INICIO
Para las aplicaciones en las cuales no se requiera precisión en la medición del tiempo,
el modo RC ofrece una alternativa económica para el desarrollo de circuitos. La
frecuencia del oscilador RC, depende de los valores del voltaje de alimentación, la
resistencia Rext, el condensador Cext, la temperatura de operación y la tolerancia que
ofrece el dispositivo. Se recomienda utilizar valores de Rext entre 3 K y 100 K.
En cuanto a Cext se recomienda utilizar valores por encima de los 20 pF.
En la siguiente figura se muestra la conexión de circuito RC, nótese que se dispone de
una salida con la frecuencia de oscilación dividida entre cuatro en el terminal
OSC2/CLKOUT.
VDD
N PIC16C5X
Cext
Vss OSC2/ClkOUT
FOSC/4
189 INICIO
Valores típicos de frecuencia que se
pueden obtener en el modo RC
3.3K 5,0MHz
20pF 5K 3,8MHz
10K 2,2MHz
100K 260KHz
3.3K 1,6MHz
100pF 5K 1,2MHz
10K 680KHz
100K 72KHz
3.3K 660KHz
300pF 5K 480KHz
10K 270KHz
160K 29KHz
190 INICIO
4.2.- Modo SLEEP (Reposo)
191 INICIO
Para salir del modo de reposo, existen dos posibilidades: Por medio de una
inicialización externa o al cumplirse el tiempo de espera en el temporizador “perro
guardián” (si WDT había sido habilitado).
Estas dos formas causarán una inicialización del dispositivo, y los bits TO y PD
pueden usarse para determinar cómo se hizo la inicialización.
192 INICIO
4.3.- Inicialización de los PIC16C5X
Los microcontroladores PIC pueden iniciar sus funciones de las siguientes formas:
La siguiente tabla muestra las condiciones de los bits de los registros PCL y STATUS,
después de una inicialización.
193 INICIO
PCL STATUS
Condición
Dirección: 02h Dirección: 03h
Nota: “x” significa “cualquier valor”; “u” significa que mantiene el valor anterior
194 INICIO
Algunos registros se establecerán según la condición de inicialización. Los otros no
serán afectados y sus estados serán indefinidos después de una inicialización al
encender el dispositivo, y mantendrán sus valores para otro tipo de inicialización.
Los bits TO (tiempo de espera) y PD (Reposo); se colocarán en “0” o en “1”,
dependiendo de la condición de la inicialización. Estos bits pueden utilizarse para
conocer la causa de inicialización. A continuación se muestra cómo se afectan los
bits TO y PD según el tipo de inicialización y según ciertas condiciones en el
microcontrolador.
195 INICIO
Estados de los registros,
después de una inicialización
196 INICIO
Registro Dirección Inicialización por Inicialización por
Encendido MCLR o WDT
Registros de
07h-7Fh xxxx xxxx uuuu uuuu
propósitos generales
197 INICIO
En la siguiente figura, se muestra el diagrama de bloques del circuito de
inicialización:
Detector de POR
VDD Encendido (Inicialización
por Encendido)
Tiempo de espera
MCLR/VDD del WDT
Contador de 8 Bits Inicio S Q
Oscilador RC
Asincrónico
Interno (Temporizador de
Arranque) R Q
Inicialización
del Chip
198 INICIO
4.4. El Temporizador de
Inicialización (DRT)
199 INICIO
4.5. Inicialización por
encendido (POR)
200 INICIO
V1
VDD
MCLR
TDRT
POR INTERNO
ESPERA DRT
INICIALIZACIÓN INTERNA
201 INICIO
La siguiente figura muestra el caso en que MCLR se conecta a VDD.
V1
VDD
MCLR
ESPERA DRT
INICIALIZACIÓN INTERNA
202 INICIO
Para los casos en los que la alimentación sube de manera muy lenta, ocurre una
situación problemática. Véase la siguiente figura:
V1
VDD
MCLR
TDRT
POR INTERNO
ESPERA DRT
INICIALIZACIÓN INTERNA
Cuando VDD se eleva lentamente, el tiempo de espera TDRT se acaba antes de
que VDD llegue al valor final. En este ejemplo, el dispositivo tendrá una
inicialización apropiada, únicamente si V1 VDD.
203 INICIO
Cuando el DRT detecta el “1” lógico en la entrada MCLR/Vpp, y ésta no ha llegado
a estabilizar su voltaje, no habrá garantía de que la inicialización en el
microcontrolador se haya hecho correctamente. Para estos casos, se recomienda
colocar un circuito RC como se muestra a continuación, de manera de solventar este
problema.
VDD VDD
D R
R1
MCLR
C
PIC16C5X
204 INICIO
TEMA V
Otros Microcontroladores de la Gama Básica
5.1.- Introducción
5.2.- Familia de los microcontroladores PIC de la gama básica
5.3.- Conexiones externas de los microcontroladores PIC de la gama básica
5.4.- Organización de las memorias de los microcontroladores PIC de la gama básica
5.5.- Registro STATUS
5.6.- Registro Contador de Programa PC
5.7.- Memoria de Datos
INICIO
5.1 INTRODUCCIÓN
Hemos visto hasta ahora todo lo relacionado con el PIC16C54. Este microcontrolador
es muy útil para aplicaciones básicas. En la medida en que aumenta la complejidad de
un circuito, será necesario utilizar dispositivos con mayor capacidad de memoria, o
posiblemente se requiera una mayor cantidad de líneas de entrada y salida, o por el
contrario, pueden haber aplicaciones en las que se requiera pocas líneas y bajo
consumo. Dentro de los PIC de la gama básica, hay otros microcontroladores que
pueden solucionar estos problemas. Recuerda que la idea al utilizar
microcontroladores, es para que este circuito haga prácticamente todas las funciones
electrónicas de la aplicación requerida. En otras palabras, un circuito con
microcontrolador no debería tener, en lo posible, ampliaciones externas de memoria ni
circuitos digitales de soporte. ¿Por qué? Simplemente, porque si se hace esto, estas
soluciones implican la utilización de más circuitos externos y en muchos casos se
sacrificarían líneas que pueden utilizarse como puertos; por otro lado, si en un
programa se pueden realizar todas las funciones lógicas, entonces será más económico
aprovechar la elaboración de rutinas que ejecuten esas funciones. Por ejemplo, no
sería conveniente hacer un contador con un microcontrolador, cuyas salidas vayan a un
decodificador BCD a 7 segmentos. Es más económico y funcional hacer la
decodificación BCD a 7 segmentos, por medio de una rutina de conversión. Tampoco
será lógico añadir una memoria externa para aumentar la capacidad, ya que al
comunicar la memoria con el microcontrolador se utilizarán líneas de puerto, que bien
pueden emplearse para otra actividad. La solución será adquirir un microcontrolador
con mayor capacidad de memoria.
206 INICIO
5.2 Familia de los microcontroladores
PIC de la gama básica
207 INICIO
Familia de los microcontroladores PIC
de la gama básica con memoria FLASH
Podemos observar que las características son idéntica a los PIC16C54 y PIC16C57,
con la diferencia de que la memoria de programa es del tipo FLASH. Esto ofrece una
ventaja considerable, ya que no se necesita el borrador de luz ultravioleta para poder
reprogramar los microcontroladores.
208 INICIO
5.3 Conexiones externas de los
microcontroladores PIC
de la gama básica
A continuación, se presenta la interconexión de los PIC’s 16C54 hasta el 16C58.
Puede observarse que las líneas RA0 a RA3, RB0 a RB7 y RC0 a RC7 constituyen las
líneas de puertos de entrada y salida.
209 INICIO
5.4 Organización de las memorias
de los microcontroladores PIC
de la gama básica
Sabemos que los microcontroladores de la gama básica tienen un mismo conjunto de
instrucciones. Sin embargo, debido a las diferencias que hay entre cada modelo, en
cuanto a las capacidades de memoria y números de líneas de entrada y salida, se
deberá tomar esto en consideración para realizar la programación.
Los 16C54 y 16C55, tienen un contador de programa (PC) de 9 bits, capaz de ubicar
al programa, en una de las 512 direcciones del espacio de memoria que se utiliza la
palabra de 12 bits.
PC<8:0>
9
CALL, RERLW
NIVEL DE PILA 1
NIVEL DE PILA 2
Espacio 000h
para MEMORIA
memoria DE 0FFh
del 100h
usuario
PROGRAMA
VECTOR DE INICIALIZACIÓN 1FFh
210 INICIO
Organización de las memorias de los
microcontroladores PIC16C56, 57 y 58
PC<10:0>
11
CALL, RERLW
NIVEL DE PILA 1 PC<9:0>
10
NIVEL DE PILA 2 CALL, RERLW
NIVEL DE PILA 1
000h
MEMORIA DE NIVEL DE PILA 2
PROGRAMA 0FFh
(página 0) 100h
000h
1FFh MEMORIA DE
MEMORIA DE 200h
Espacio PROGRAMA 0FFh
PROGRAMA 2FFh para 100h
300h (página 0)
(página 1) memoria 1FFh
3FFh MEMORIA DE
del 200h
Espacio MEMORIA DE 400h
usuario PROGRAMA
PROGRAMA 4FFh 2FFh
para 500h (página 1) 300h
memoria (página 2) 5FFh
del MEMORIA DE 600h
VECTOR DE INICIALIZACIÓN 3FFh
usuario PROGRAMA 6FFh
(página 3) 700h
Memoria de programa del PIC16C56
VECTOR DE INICIALIZACIÓN 7FFh
211 INICIO
5.5 Registro STATUS
212 INICIO
5.6 Registro Contador de
Programa PC
Cuando una instrucción es ejecutada, el contador de programa (PC) contendrá la
dirección de la próxima instrucción a ejecutarse. El valor del PC se incrementa en
uno por cada ciclo de instrucción, al menos que la instrucción cambie el valor del
PC.
Para una instrucción GOTO, los bits 8 a 0 del PC se incluyen en dicha instrucción.
El registro PCL toma los bits 7 a 0. Véase figura a continuación:
9 8 7 0
PIC16C56 PC PCL
Palabra de Instrucción 10 9 8 7 0
PA0 0 PC PCL
7
213 INICIO
Para una instrucción CALL, o alguna instrucción donde el PCL es el destino, los bits 7
a 0 del PC se obtienen del código de la instrucción. Sin embargo, el bit 8 del PC no
viene del código de la instrucción, sino que es puesto en cero.
Para los PIC16C56, 16C57 y 16C58, se debe agregar un número de página. El bit 5
del registro STATUS se transfiere al bit 9 del PC para el PIC16C56, y los bits 5 y
6 del registro STATUS se transfieren respectivamente a los bits 9 y 10 del PC para
los PIC16C57 y PIC16C58. Véase figura a continuación.
214 INICIO
7 0 9 8 7 0
8
PC PCL PC PCL
STATUS
PIC16C56
10 9 8 7 0
PC PCL
2 0 Palabra de Instrucción
PA1 PA0
7 0
STATUS
PIC16C57/58
215 INICIO
Efectos de la inicialización
216 INICIO
Consideraciones para las páginas
en los PIC 16C56/57/58
Por ejemplo, una instrucción NOP en la posición 1FFh (página 0), incrementa el PC
a 200h (página 1). Un GOTO xxh en la posición 200h, hará que el programa salte
a la posición xxh en la página 0 (asumiendo que PA1: PA0 valen 0). Para prevenir
esto, los bits de la página preseleccionada deben actualizarse por medio del
control del programa.
217 INICIO
ecuerda
La memoria de programa está seleccionada en páginas de 512 palabras de 12 bits.
Cada posición en una página, puede ser accedida directamente cuando se va a
ejecutar un salto de dirección por medio de las instrucciones: CALL, RETLW o
GOTO.
Para los dispositivos con capacidad de más de 512 palabras, se utilizan los bits de
selección de página PA1 y PA0, los cuales se encuentran en el STATUS.
218 INICIO
5.7 Memoria de datos
PIC16C54, 55 y 56
(1) El registro INDF, no corresponde a una posición física, sino al registro cuya dirección está
contenida en el registro FSR.
219 INICIO
Memoria de datos PIC16C57
08h REGISTROS
DE
PROPÓSITOS
GENERALES 2Fh 4Fh 6Fh
0Fh
10h REGISTROS 30h REGISTROS 50h
REGISTROS 70h REGISTROS
DE DE DE DE
PROPÓSITOS PROPÓSITOS PROPÓSITOS PROPÓSITOS
GENERALES GENERALES
1Fh GENERALES GENERALES
3Fh 5Fh 7Fh
Banco 0 Banco 1 Banco 2 Banco 3
220 INICIO
Memoria de datos PIC16C58
FSR<6:5> 00 01 10 11
Dirección
de registro00h
INDF(1) 20h
01h TMRO 40h 60h
02h PCL
03h STATUS
04h FSR
05h PORTA Este Mapa de Direcciones
06h PORTB retoma a las direcciones
07h del Banco 0
REGISTROS
DE
PROPÓSITOS
GENERALES 2Fh 4Fh 6Fh
0Fh
10h REGISTROS 30h REGISTROS 50h
REGISTROS 70h REGISTROS
DE DE DE DE
PROPÓSITOS PROPÓSITOS PROPÓSITOS PROPÓSITOS
GENERALES GENERALES
1Fh GENERALES GENERALES
3Fh 5Fh 7Fh
Banco 0 Banco 1 Banco 2 Banco 3
221 INICIO
TEMA VI
Microcontrolador PIC16F84A
6.1.- Introducción
6.2.- Familia de los microcontroladores PIC16F8X
6.3.- El PIC16F84A
6.4.- Nuevas instrucciones de los PIC de la gama media
6.5.- Organización de la memoria del PIC16F84A
6.6.- El registro STATUS
6.7.- Manejo de Interrupciones en el PIC16F84A
6.8.- La Memoria EEPROM
6.9.- Registro Contador de Programa PC
6.10.- El Registro STACK (Pila)
6.11.- Los temporizadores y algo más de PORTB
6.12- Los Bits de configuración
INICIO
Objetivos Terminales:
223
INICIO
6.1- INTRODUCCIÓN
224 INICIO
6.2- Familia de la serie PIC16F8X
Producto Memoria. de programa EEPROM RAM Líneas Encapsulado Canales Comparadores PWM Temporizadores Puertos Veloc. ICSP BOR/ CCP/ Otras características
MCU FLASH Bytes Bytes E/S A/D C Analógicos 16bits y WDT seriales Máxima PBOR ECCP
225 INICIO
6.3- El PIC16F84A
Inicialmente se hará una descripción del PIC16F84A, ya que éste es uno de los más
sencillos de la familia de los microcontroladores de la serie PIC16F8X. En principio se
establecerán las diferencias con respecto al microcontrolador PIC16C54, luego se harán
unos ejemplos de aplicación con este microcontrolador.
El PIC16F84A es un microcontrolador Microchip de la gama media que presenta las
siguientes características básicas, las cuales se comparan con las del PIC16C54:
226 INICIO
Diferencias entre los microcontroladores
de la gama básica y los de la media
Después de programar y utilizar un PIC de la gama básica, notarás que no hay mucha
diferencia en la programación con respecto a los PICs de la gama media. Algo
importante que debes saber, es que podrás utilizar sin ningún problema el MPLAB para
los PIC de la gama media, tal como se sugirió al ejecutar un programa editado para el
PIC16C54 en un PIC16F84. En otras palabras, si editas un programa para un PIC de la
gama básica, éste se ejecutará en un PIC de la gama media. Sin embargo, existen
algunas diferencias que debes tomar en cuenta al programar los PIC de la gama media.
En primer lugar la longitud de las palabras de instrucción en los PICs de la gama media
es de 14 bits, en comparación con los 12 bits de la gama básica. Esto significa que se
podrá obtener ciertas ventajas en la programación. Por otro lado, los registros TRIS y
OPTION, tendrán una dirección definida, y por lo tanto, las instrucciones asociadas a
ellas cambian. A pesar de que en un programa, estas instrucciones se pueden ensamblar
sin problemas, se recomienda sustituirlas por las instrucciones “MOVWF TRISX”, donde
X es el puerto que se desea configurar (A, B, etc.) y “MOVWF OPTION_REG”.
Una ventaja que aparece en el manejo de instrucciones en los microcontroladores de la
gama media, es que ahora se podrá acceder directamente a 128 registros de la memoria
RAM con una sola instrucción, sin necesidad de seleccionar bancos de memoria, a
diferencia de los PICs de la gama básica, en los cuales sólo se tenía acceso directo a 32
registros de la RAM.
Otra ventaja importante de los PICs de la gama media, es que ahora se cuenta con ocho
niveles de subrutinas, a diferencia de dos en los PICs de la gama básica.
227 INICIO
6.4 Nuevas instrucciones de los
PICs de la gama media
Es importante considerar que existen cuatro nuevas instrucciones en los PICs de la gama
media. Dos de ellas permiten hacer operaciones aritméticas con valores constantes, y
las otras dos se utilizan para retornos de subrutinas e interrupciones. Si eliminamos las
instrucciones TRIS y OPTION, significa que el conjunto de instrucciones de los
microcontroladores PIC de la gama media suman un total de 35.
Las nuevas instrucciones y el grupo al que pertenecen, se presentan a continuación:
INSTRUCCIONES ARITMÉTICAS
ADDLW K ; Suma W con K, donde K es constante y el resultado va a W.
SUBLW K ; Resta K menos W, donde K es un valor constante.
228 INICIO
6.5- Organización de la Memoria
del PIC16F84A
Debido a que los microcontroladores de la gama media tienen una mayor cantidad de
funciones, éstas se configuran por medio de registros. Fíjate cómo en los
microcontroladores de la gama básica encontrábamos registros de funciones especiales
para: INDF, TMR0, PCL, STATUS, FSR, PORTA y PORTB; dependiendo del número
de terminales, también podía aparecer PORTC. Ahora hay que agregar los registros
OPTION, TRISA y TRISB (y otros PORT y otros TRIS según la cantidad de puertos).
Por otro lado existen otros registros de control, que para el PIC16F84A, se resumen
en la tabla de la página siguiente.
En primer lugar, se podrá observar la coincidencia con algunas direcciones de los
registros de los microcontroladores de la gama básica.
En segundo lugar, se puede ver que las posiciones de los registros TRISA y TRISB
están en las direcciones 85h y 86h respectivamente, por otro lado el registro OPTION
está en la dirección 81h. Mientras los primeros registros mencionados pertenecen al
banco 0 de la memoria RAM, estos últimos pertenecen al banco 1, es decir, hay que
considerar en las instrucciones, a cuál banco se está señalando, ya que en la palabra
de instrucción de los PIC de la gama media, sólo podemos acceder de manera directa a
128 posiciones de la RAM. Si estamos en el banco 0, podemos acceder desde la
posición 00h hasta la 7Fh, y si estamos en el banco 1, desde la posición 80h hasta la
0FFh. La selección del banco se hará por medio del bit RP0 del registro STATUS.
Finalmente veremos que hay un grupo de registros que son nuevos para nosotros, y que
serán explicados más adelante.
229 INICIO
Ubicación de los registros del
microcontrolador PIC16F84A
Banco 0 Banco 1
230 INICIO
Asignación de bits en cada registro
Valor después
Valor después
Dirección Nombre de otra
de encender
inicialización
231 INICIO
6.6- Registro STATUS
Bit 7: IRP: Se utiliza para acceso indirecto 0-> 00h a 0ffh. 1-> 100h a 1ffh
(nota: IRP y RP1 no se utilizan en los PIC16F84, por tanto se hacen iguales a 0).
Bit 6-5: RP1-RP0: Selección de banco de la memoria de datos
00 = Banco 0 = (00h - 7Fh)
01 = Banco 1 = (80h - 0FFh)
10 = Banco 2 = (100h - 17Fh) RP1 no se utiliza en los PIC16F84A
11 = Banco 3 = (180h - 1FFh)
232 INICIO
6.7- Manejo de las Interrupciones
en el PIC16F84A
Muchas veces cuando estás desarrollando una actividad, como por ejemplo una tarea
para entregarla al día siguiente, encuentras momentos en que necesitas interrumpir tus
labores, ya sea para comer, para descansar, para atender una llamada telefónica o para
alguna otra cosa. Algo similar ocurre con los programas que se ejecutan en los
microcontroladores. Un programa es una secuencia de instrucciones que ejecutan una
actividad en el microcontrolador. Si ese programa se encarga de leer un dato en
memoria, luego lo muestra en un indicador numérico, y después vuelve a comenzar, para
que cíclicamente ejecute esa actividad, entonces esa actividad podría ser “el programa
principal”. Supongamos que ese dato que se muestra corresponde a la temperatura de
una habitación. Si se quiere leer la señal que corresponde a la lectura de temperatura y
llevarla a la posición de memoria que el programa principal busca y lo lleva al indicador,
se necesitará interrumpir este programa principal por un momento, ejecutar una rutina
de lectura de la señal de temperatura y almacenamiento del dato de temperatura y luego
volver al programa principal en el punto donde fue interrumpido, sin que se pierda los
valores de los registros que utiliza el programa principal, especialmente el registro W, el
registro STATUS y cualquier otro registro que se modifique en la rutina de interrupción.
233 INICIO
100
AUTOR: César Álvarez
DISEÑO
80
60 INSTRUCCIONAL:
Interrupción:
Programa Principal: M. Sánchez y C. Álvarez
40 Lee la señal
Convierte a digital Lee posición de la memoria
20
Guarda en memoria Convierte a 7 segmentos
0
Escribe valor en el indicador
Entonces, se puede definir las interrupciones, como desviaciones del flujo de control del
programa originadas asíncronamente mediante diversas causas que pueden ser externas
al sistema, tales como el cambio de nivel de una entrada; o internas, tal como el
desbordamiento en la cuenta de un temporizador.
La manera de ejecutar una interrupción, es similar al llamado de una subrutina con la
instrucción CALL, ya que se almacena la dirección del PC de la siguiente instrucción a
ejecutar, en el registro PILA, con la diferencia de que en la interrupción, el programa
salta a una posición de la memoria de programa llamada “vector de interrupción”.
234 INICIO
Fuentes de interrupción
en el PIC16F84A
236 INICIO
Guardar W y STATUS en
la rutina de interrupción
237 INICIO
Ejemplo de interrupción
por TMR0
238 INICIO
6.8- La memoria EEPROM
En muchos equipos se hace necesario el uso de datos que deben mantener su valor
después de haber quitado la energía del circuito. Un ejemplo de esto lo podemos ver
en equipos que necesiten calibración. En estos equipos el ajuste de ciertos parámetros
se puede hacer por medio de resistencias ajustables o potenciómetros, los cuales
pueden utilizarse para la calibración del cero, la ganancia, la linealidad, los parámetros
de control y algunos otros más. Si se dispone de una memoria que mantenga los datos
después de apagarse el equipo, estos potenciómetros se hacen innecesarios, ya que
estos factores de ajuste se pueden grabar en esta memoria y ser llamados por medio
de un simple programa que aproveche éstas y otras constantes para poder introducirlas
en ecuaciones matemáticas que compensen las calibraciones. Esto supone una reducción
del espacio en el circuito; una mayor seguridad para la realización de los ajustes, ya
que se puede incluir una clave secreta que también puede ser grabada en la EEPROM
para la solicitud del ajuste; también se puede lograr ajustes con mucha mayor
precisión y en un tiempo mucho más corto.
El uso de una EEPROM tiene semejanzas con el de la RAM; sin embargo, hay que
tomar en cuenta algunas consideraciones que se mencionarán a continuación:
• El tiempo de escritura de una EEPROM está en el orden de los 10mSeg.
• El número de grabaciones en la EEPROM está limitado entre 105 y 107 veces.
• Se debe utilizar un código especial para la grabación de datos, para evitar el
borrado accidental de la EEPROM en el momento de quitarle la alimentación.
239 INICIO
Explicación de los registros
relacionados con la EEPROM
241 INICIO
Lectura de un dato en la EEPROM
Durante la sección del programa que escribe en la EEPROM se recomienda deshabilitar las
interrupciones para que el proceso de escritura se realice correctamente. Después de
iniciarse el proceso de escritura de la EEPROM, se podrá habilitar las interrupciones por
medio de la instrucción “BSF INTCON, GIE”. En la escritura de la EEPROM el bit WR
de EECON1 se colocará en 0 automáticamente. Tú podrás determinar cuándo termina el
ciclo de escritura al leer un 1 en el bit EEIF del registro EECON1. Después de esto se
deberá colocar el bit WREN en 0 para prevenir un borrado accidental de la EEPROM.
Trata de volver a escribir el programa anterior como una rutina, de manera que la
dirección y el dato provengan de registros y no de valores constantes.
Para leer un dato en la EEPROM se podrá utilizar la sección de programa que se muestra
a continuación:
BCF STATUS, RP0 ; Selecciona banco 0 para EEADR
MOVLW DIR_LECT ; Dirección de lectura en W
MOVWF EEADR ; Dirección de lectura en EEADR
BSF STATUS, RP0 ; Selecciona banco 1 para EECON1
BSF EECON1, RD ; Lectura de la EEPROM
BCF STATUS, RP0 ; Selecciona banco 0 para EEDATA
MOVF EEDATA, W ; Coloca dato leído de EEPROM en W
Una buena práctica para escribir un dato en la EEPROM, consiste en verificar si ese dato
ha sido grabado correctamente mediante la lectura del dato escrito y comparación con él
mismo por medio de una resta y al evaluar el bit Z del registro STATUS.
242 INICIO
6.9 Registro contador de programa
Vimos que en los PIC16C5X los 8 bits de menos peso del contador de programa
ocupan la posición 2h de la memoria RAM, y los bits de mayor peso se dividen en
páginas y se encuentran en el registro STATUS. En el caso de los PICs de la
gama media los bits de mayor peso están en los 5 bits de menor peso del registro
PCLATCH que está ubicado en la posición 0Ah u 8Ah. Debido a que el PIC16F84A
sólo tiene acceso a 1024 direcciones de la memoria de programa (000h a 3FFh), se
necesitan 10 bits, de los cuales son efectivos los ocho del PCL y los dos bits
menos significativos del PCLATCH.
En las instrucciones GOTO y CALL se incluyen 11 bits para cargar la dirección del
PC, por tanto se puede tener acceso a 2048 posiciones. Como la capacidad del
PIC16F84A es 1024 bits no tiene sentido hacer divisiones por páginas.
12 11 10 9 8 7 0
PC PCL
11
PCLATCH 4-3
2 Palabra de Instrucción
7 4 0
PIC16F84
PCLATCH
243 INICIO
Para aquellas instrucciones donde el PCL es el destino, en los bits 7 a 0 del PC se
obtienen del código de la instrucción. Los bits superiores provienen del PCLATCH.
Algunas de las instrucciones donde el PCL es el destino, o se le modifica el
contenido, son: MOVWF PCL; ADDWF PCL; BSF PCL, 5; etc. Recuerda que la
dirección del PCL es la 2h
12 11 10 9 8 7 0
PC PCL
5 Resultado de la ALU
PCLATCH
4-0
7 0
PCLATCH
PIC16F84
244 INICIO
6.10 Registro STACK (pila)
El registro STACK guarda las direcciones de retorno de las rutinas que se llaman
por medio de la instrucción CALL o una interrupción, y carga la dirección de retorno
al PC con la instrucción RETLW, RETURN o RETFIE. la longitud de palabra de la
pila es la misma que la del PC. La pila tiene ocho niveles, a diferencia de los dos
niveles que tienen los microcontroladores de la gama básica:
Una instrucción CALL o una llamada de interrupción coloca el contenido del nivel 7
de la pila, en el nivel 8, el nivel 6 lo coloca en el 7 y así sucesivamente hasta
colocar el valor del contador del programa actual, incrementando en uno, en el nivel
1 de la pila. Si se llama a más de ocho subrutinas en una misma secuencia,
únicamente las direcciones de las ocho más recientes serán almacenadas.
245 INICIO
6.11 Los Temporizadores y
algo más de PORTB
El PIC16F84A, utiliza, al igual que los PIC de la gama básica el temporizador TMR0 y
el WDT, los cuales, a su vez se programan según el registro OPTION.
El registro OPTON del PIC16F84 agrega 2 bits que en los PIC de la gama básica no
están asignados. Éstos son: RBPO# (Bit 7) y INTEDEG (Bit 6). Si RBPO# = 0,
conecta resistencias de valor alto a Vdd (Pull up). En el caso de INTEDEG, éste
determina el tipo de transición que llevará la interrupción externa (RB0): 1=>
Transición de subida, 0=> Transición de bajada.
Los circuitos asociados a estos temporizadores son iguales a los de los PIC de la gama
básica, con la diferencia de que si se utiliza el TMR0 como temporizador, la entrada
RA4/TOCKI se convierte en una línea adicional del puerto A.
En el caso de los PIC16F84A la ubicación del registro OPTION, en la memoria de
datos, se encuentra en la posición 81H (banco 1).
Una posibilidad que ofrece los PIC de la gama media, es que cuando se detecta un
desbordamiento en el contador, se genera una señal de interrupción, la cual se puede
verificar en el bit TOI, el cual es el bit 2 del registro INTCON. Esta interrupción se
habilita al colocar un “1” al bit TOIE, que es el bit 5 del registro INTCON
Si deseas repasar el tema de los temporizadores de los PIC de la gama básica,
selecciona el menú siguiente:
OPTION TMR0 WDT INTCON
246 INICIO
6.12 Los Bits de Configuración
Al igual que los PICs de la gama básica, los bits de configuración del PIC16F84A se
acceden sólo en el momento de grabar el programa en el microcontrolador.
Los bits de configuración WDT, FOSC1 y FOSC0 del PIC 16F84 coinciden en lógica y
posición con los de los PICs de la gama básica (Repasar). En el caso del bit de
protección de programa, éste trabaja de la misma manera en ambos casos, pero la
lógica es invertida y la ubicación es diferente, es decir que en el PIC16F84A este bit
se ubica en la posición 4 de la palabra de configuración y un 1 indicará que el
dispositivo no estará protegido, y un 0 indicará que no será posible leer el contenido
del programa ni los datos de la EEPROM.
Finalmente el PIC16F84A tiene adicionalmente el bit PWRTE#, el cual, con un 0
activa un retardo en el reinicio por 72 ms. Este bit ocupa la posición 3 en la palabra
de configuración.
Bit 11 10 9 8 7 6 5 4 3 2 1 Bit 0
247 INICIO
TEMA VII
MICROCONTROLADORES DE LA SERIE
PIC16F87X
7.1 Generalidades
7.2 La familia PIC16F87X
7.3 Registros de funciones especiales
7.4 Las interrupciones de los PIC16F87X
7.5 Las Memorias EEPROM y FLASH
7.6 El Puerto A, el Puerto E y el Convertidor A/D
7.7 El Puerto B
7.8 El Puerto C y los Temporizadores
7.9 El Puerto C y los módulos de Captura, Comparación y PWM
7.10 El Puerto C y el Módulo de Comunicación Serial Síncrona
7.11 El Puerto C y la Comunicación I2C
7.12 El Puerto C y el USART
7.13 El Puerto D, el Puerto E y la Interfaz Paralela
7.14 Palabra de Configuración
248
INICIO
Objetivos Terminales:
249
INICIO
7.1 Generalidades de
los PIC16F87X
En el tema anterior hemos visto al PIC16F84A, con el cual nos iniciamos a los
microcontroladores PIC de la gama media. ¿Quedó todo bien claro? Es importante que lo
hayas comprendido todo bien hasta ahora, para continuar con los PIC16F87x. Estos
microcontroladores presentan una serie de características que permiten una mayor
versatilidad en un sinnúmero de aplicaciones. Estas características se pueden resumir en
las siguientes:
* Mayor capacidad de memoria RAM y EEPROM.
* Manejo de hasta 14 fuentes de interrupción.
* Líneas de entrada y salida adicionales.
* Dos temporizadores adicionales: TMR1 y TMR2.
* Módulos de captura, comparación y modulador de ancho de pulsos.
* Convertidor Analógico a Digital de 10 bits para varias entradas.
* Módulos de comunicación serial.
* Los modelos de 40 terminales tienen un módulo de comunicación paralela.
250 INICIO
7.2 La familia de los PIC16F87X
FLASH 1Kx14 2K x 14 2K x 14 2K x 14 4K x 14 4K x 14 8K x 14 8K x 14
(Programa)
RAM 64 bytes 128 bytes 128 bytes 128 bytes 192 bytes 192 bytes 368 bytes 368 bytes
(Datos)
EEPROM 64 bytes 64 bytes 64 bytes 64bytes 128 bytes 128 bytes 256 bytes 256 bytes
(Datos
permanentes)
Captura, No 1 1 1 2 2 2 2
Comparación y
Modulador de
ancho de pulso
251 INICIO
Conexiones de los PIC16F870/72/73/76
252 INICIO
Conexiones de los PIC16F871/74/77
253 INICIO
7.3 Registros de
funciones especiales
Sabemos que las instrucciones de los microcontroladores PIC16F87X, son las mismas
que las del PIC16F84, ya que todos pertenecen a la gama media. Sin embargo, para la
programación se hace necesario conocer los nuevos registros de funciones especiales
que ofrecen los PIC16F87X con sus características mejoradas. Estos registros se
ubican en la memoria RAM del microcontrolador. Recordemos que para acceder a una
posición de la RAM, contamos con 7 bits en la palabra de instrucción, que corresponden
directamente a 128 posiciones. Para seleccionar un banco de la memoria RAM se
cuenta con los bits RP1 y RP0 que se ubican en el registro STATUS. En el caso del
PIC16F84 sólo se puede modificar el bit RP0, y por consiguiente, únicamente se puede
acceder a dos bancos de la RAM. En el caso de los PIC16F87X, podemos acceder a 4
bancos de la RAM.
Los registros de funciones especiales los podemos ubicar en las tablas de las páginas
siguientes, no hace falta que te lo aprendas todavía, después lo analizaremos con más
detalle. En ellas encontraremos a los siguientes microcontroladores:
PIC16F870 y PIC16F871
PIC16F872
PIC16F873 y PIC16F874
PIC16F876 y PIC16F877
Bits de los registros de Funciones especiales
254 INICIO
PIC16F870 y 871
258 INICIO
Bits de los Registros de
Funciones Especiales (Banco 0)
259 INICIO
Bits de los Registros de
Funciones Especiales (Banco 1)
260 INICIO
Bits de los Registros de
Funciones Especiales (Bancos 2 y 3)
261 INICIO
Diferencias entre los registros de
funciones especiales de los PIC16F87X
Segundo módulo CCPR2L ----- ----- ----- 1Bh 1Bh 1Bh 1Bh
Captura y PWM CCP2CON ----- ----- ----- 1Dh 1Dh 1Dh 1Dh
262 INICIO
7.4 Las Interrupciones de
los PIC16F87X
Básicamente estos registros contienen los bits que permiten o no las interrupciones
en el microcontrolador (registros INTCON, PIE1 y PIE2) y los bits que se
establecen cuando se genera una interrupción (registros INTCON, PIR1 y PIR2). El
registro INTCON es similar al del PIC16F84, con la diferencia de que se sustituye
la habilitación de la escritura de la EEPROM por la de habilitación de los dispositivos
que no están en INTCON. Esto se podrá ver mejor en la siguiente página.
263 INICIO
El registro INTCON
Control de interrupciones
El registro PIE1 contiene 8 bits que se utilizan para la habilitación de ocho de las
interrupciones de los PIC16F87X.
PIE1 (8CH)
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
BIT Función
PSPIE Habilitación de interrupción para escritura o lectura de la interfaz paralela
ADIE Habilitación de interrupción para indicar la finalización de una conversión A/D
RCIE Habilitación de interrupción que indica que se recibió un dato en del USART
TXIE Habilitación de interrupción que indica que se envió un dato desde el USART
SSPIE Habilitación de interrupción para el puerto serial síncrono
CCP1IE Habilitación de interrupción para CCP1 al producirse una captura o comparación
TMR2IE Habilitación de interrupción para un desbordamiento del TMR2
TMR1IE Habilitación de interrupción para un desbordamiento del TMR1
265 INICIO
Registro PIE2
El registro PIE2 contiene 3 bits que se utilizan para la habilitación de tres de las
interrupciones de los PIC16F87X.
PIE2 (8DH)
--- 0 --- EEIE BCLIE --- --- CCP2IE
bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0
BIT Función
EEIE Habilitación de interrupción para finalización de escritura en la EEPROM
BCLIE Habilitación de interrupción para indicar colisión de datos en el bus SSP
CCP2IE Habilitación de interrupción para CCP2 al producirse una captura o comparación
266 INICIO
Registro PIR1
El registro PIR1 contiene 8 bits que se utilizan para la indicación de ocho de las
interrupciones de los PIC16F87X.
PIR1 (0CH)
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
BIT Función
PSPIF Aviso de interrupción por escritura o lectura de la interfaz paralela
ADIF Aviso de interrupción para indicar la finalización de una conversión A/D
RCIF Aviso de interrupción para indicar que indica que se recibió un dato en del USART
TXIF Aviso de interrupción para indicar que indica que se envió un dato desde el USART
SSPIF Aviso de interrupción por el puerto serial síncrono
CCP1IF Aviso de interrupción por CCP1 al producirse una captura o comparación
TMR2IF Aviso de interrupción por un desbordamiento del TMR2
TMR1IF Aviso de interrupción por un desbordamiento del TMR1
267 INICIO
Registro PIR2
El registro PIR2 contiene 3 bits que se utilizan para la indicación de tres de las
interrupciones de los PIC16F87X.
PIR2 (0DH)
--- 0 --- EEIF BCLIF --- --- CCP2IF
bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0
BIT Función
EEIF Aviso de interrupción por finalización de escritura en la EEPROM
BCLIF Aviso de interrupción para indicar colisión de datos en el bus SSP
CCP2IF Aviso de interrupción por CCP2 al producirse una captura o comparación
268 INICIO
Salvando los registros W y STATUS
al atender una interrupción
Hay que tener un especial cuidado cuando se manejan las interrupciones, sobretodo
para recuperar el contenido de los registros W y STATUS en el programa principal, ya
que de lo contrario se pierde el control del programa. En los microcontroladores de la
serie PIC16F87X, encontramos que existen cuatro bancos de la memoria RAM, y si el
programa principal está accediendo a uno de ellos, en una interrupción podríamos
cambiar el acceso a otro banco de la RAM. El reto está en recuperar los valores de
W y STATUS que tenía el programa principal antes de la interrupción.
Si observamos los bancos de memoria en los PIC16F870, 871, 872, 876 y 877; se
puede ver que los registros ubicados en la parte final de cada banco, se acceden por
medio de las direcciones 70h hasta la 7Fh. Por lo tanto lo que tenemos que hacer, es
que en una interrupción se salven W y STATUS en uno de esos registros:
269 INICIO
En el caso de los
PIC16F873 y PIC16F874
270 INICIO
Actividades
Ya hemos visto cómo funcionan las interrupciones, y cómo hacer un programa para
salvar los registros W y STATUS cuando se atiende una interrupción. Debes
considerar siempre estos programas que se han mostrado anteriormente, por tanto te
recomendamos que los escribas, o los copies, y lo guardes en tus archivos personales
de tus programas.
Por los momentos, no te proponemos alguna otra actividad. Pensamos que
comprenderás mejor acerca del manejo de interrupciones, a medida que vayas
conociendo cada módulo de los PIC16F87X, los cuales verás, poco a poco en las
siguientes secciones.
Recuerda que es importante que sepas que básicamente en el manejo de las
interrupciones, cuentas con bits que te habilitan o no cada una de las interrupciones,
y que además puedes acceder a los bits que te avisan cuál fue la interrupción que se
generó mientras se ejecutaba el programa principal.
271 INICIO
7.5 Las Memorias
EEPROM y FLASH
272 INICIO
Registros asociados para la lectura y
escritura de la EEPROM y la FLASH
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR Otros
y BOR Resets
0BH (todos INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
los bancos)
10DH EEADR Registro Dirección EEPROM y la FLASH xxxx xxxx uuuu uuuu
10FH EEADRH ---- ---- ---- Dirección Alta de la FLASH xxxx xxxx uuuu uuuu
10CH EEDATA Registro de Dato de la EEPROM y la FLASH xxxx xxxx uuuu uuuu
10EH EEDATAH ---- ---- Dato Alto de la FLASH xxxx xxxx uuuu uuuu
18CH EECON1 EEPGD ---- ---- ---- WRERR WREN WR RD x--- x000 x--- u000
8DH PIE2 ---- 0 ---- EEIE BCLIE ---- ---- CCP2IE -r-0 0--0 -r-0 0--0
0DH PIR2 ---- 0 ---- EEIF BCLIF ---- ---- CCP2IF -r-0 0--0 -r-0 0--0
273 INICIO
Explicación de los registros
relacionados con la EEPROM
Para acceder a las direcciones de la EEPROM en los PIC16F87X, se deberá utilizar los
registros: EEADR, EEDATA, EECON1 y EECON2. Las direcciones son: 10Ch y 10Dh en
el banco 2, y 18Ch y 18Dh en el banco 3 respectivamente.
• EEADR: Es el registro de 8 bits que tiene la dirección del dato de la EEPROM.
• EEDATA: Es el registro de 8 bits en el cual se escribe o se lee el valor del dato a
guardar en la EEPROM en la dirección que está en el registro EEADR.
• EECON1: Este registro contiene los bits de control de las operaciones en la EEPROM:
• RD, Bit 0 (Lectura). Se escribirá 1 cuando se va a realizar un ciclo de lectura
de la EEPROM, al terminar se colocará en cero. No admite la escritura de 0.
• WR, Bit 1 (Escritura). Se enviará 1 cuando se va a realizar un ciclo de escritura
de la EEPROM, al terminar se colocará en cero. No admite la escritura de 0.
• WREN, Bit 2 (Habilitación de escritura). Si se escribe 1, se permitirá la
escritura de la EEPROM. Si se coloca 0, no permitirá la escritura en la EEPROM.
• WRERR, Bit 3 (Indicador de error). Se lee un 1 si hubo error en la escritura
debido a una inicialización del PIC. Un 0 indicará que la operación se hizo
correctamente.
• EEPGD, Bit 7 (Acceso a EEPROM o FLASH). Un 1 indicará que la operación se
relaciona con la FLASH, un 0 indicará que la operación se relaciona con la
EEPROM.
• EECON2: En este registro se coloca una secuencia clave para evitar grabaciones
accidentales.
274 INICIO
Escribir un dato en la EEPROM
275 INICIO
Lectura de un dato en la EEPROM
Durante la sección del programa que escribe en la EEPROM se recomienda deshabilitar las
interrupciones para que el proceso de escritura se realice correctamente. Después de
iniciarse el proceso de escritura de la EEPROM, se podrá habilitar las interrupciones por
medio de la instrucción “BSF INTCON, GIE”. En la escritura de la EEPROM el bit WR
de EECON1 se colocará en 0 automáticamente. Tú podrás determinar cuándo termina el
ciclo de escritura al leer un 1 en el bit EEIF del registro EECON1. Después de esto se
deberá colocar el bit WREN en 0 para prevenir un borrado accidental de la EEPROM.
Para leer un dato en la EEPROM se podrá utilizar la sección de programa que se muestra
a continuación:
276 INICIO
Escribir un dato en la FLASH
Para escribir un dato en la FLASH, la dirección de acceso no debe estar protegida. Por
otro lado, después del proceso de escritura, el microcontrolador no lee las siguientes dos
instrucciones, y éste se inhibe durante la operación de escritura. A continuación se
presenta una sección de programa para escribir un dato en la FLASH.
277 INICIO
Lectura de un dato en la FLASH
Al igual que en el caso de la EEPROM, se considera buena práctica leer los datos, depués
de que estos sean grabados.
278 INICIO
Protección de la FLASH
La memoria FLASH puede ser protegida totalmente o por secciones, tanto para la lectura
como para la escritura. Para ello, antes del proceso de grabación o lectura, hay que
acceder a los bits CP1, CP0 y WRT de la palabra de configuración del microcontrolador.
Si el bit WRT vale “1” se podrá escribir en la memoria FLASH del microcontrolador, si
vale “0” no se podrá escribir. A continuación se presenta cómo se protege la escritura
de la FLASH según los valores de CP1 y CP0 y el modelo del microcontrolador.
279 INICIO
Actividades
Hemos visto cómo puedes guardar y leer datos de la EEPROM, por supuesto que las líneas
de programa mostradas anteriormente necesitan ser completadas para que pueda trabajar
bien en un programa.
La primera actividad propuesta para esta sección, es que puedas introducir un dato de 8
bits, a través del puerto B, lo guardes en la EEPROM. Después apagues el dispositivo, y
puedas leer el dato que habías guardado en ese puerto. Para ello deberás colocar un
interruptor de control en una línea del puerto C, de manera que en un momento dado el
puerto B trabaje como entrada, lea el dato y lo guarde en una posición de la EEPROM, y
en la otra posición de esa línea del puerto C, el puerto B trabaje como salida y aparezca
el dato desde la posición donde guardaste el dato anteriormente.
La segunda actividad propuesta es hacer un contador de dos dígitos 7 segmentos, que
tenga un pulsador para la cuenta ascendente, otro para la cuenta descendente y uno más
para almacenar el valor de la cuenta en la EEPROM, de manera que al encender el
dispositivo, el valor que aparezca en pantalla, sea el que se almacenó en la EEPROM, y
desde allí se seguirá el conteo.
280 INICIO
7.6 El Puerto A, el Puerto E
y el Convertidor A/D
En vista de que los microcontroladores de la serie PIC16F87X tienen muy diversas
aplicaciones, los terminales de los puertos pueden poseer varias funciones de manera
multiplexada. Por otro lado, los dispositivos de 28 terminales tienen 22 líneas de
entrada-salida (PORTA, PORTB y PORC) y los microcontroladores de 40 terminales
tienen 33 líneas E/S (PORTA, PORTB, PORTC, PORTD y PORTE). Recuerda que cada
terminal de un puerto, si está configurado como E/S digital, se puede programar como
entrada o salida, al colocar el bit asociado del registro TRIS en 1 ó 0
respectivamente.
El puerto A (PORTA) dispone de 6 terminales. La función que puede realizar cada
terminal se resume en la siguiente tabla:
281 INICIO
Registros asociados
a PORTA
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Otros
POR y BOR Resets
05h PORTA --- --- RA5 RA4 RA3 RA2 RA1 RA0 --0x 0000 --0u 0000
85h TRISA --- --- Registro de Configuración de PORTA --11 1111 --11 1111
1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/ --- ADON 0000 00-0 0000 00-0
DONE#
9Fh ADCON1 ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 0--- 0000 0--- 0000
Las líneas PCFG0 – PCFG3 del registro ADCON1 configuran las líneas del puerto A y
el puerto E para que trabajen como entradas analógicas o digitales (los PIC16F870,
872, 873 y 876 no tienen puerto E). Debemos observar que los bits de estos
registros son puestos a 0 después de un RESET, un POR (inicialización por encendido)
o un BOR (inicialización por baja de Vdd). Esto significa, como se verá más
adelante, que la configuración inicial de las líneas de los puertos A y E estarán como
entradas analógicas. Si se desea que todas ellas trabajen en forma digital, deberá
escribirse el valor “011x” en los cuatro bits menos significativos del registro
ADCON1.
282 INICIO
El Puerto E y las entradas
analógicas AN5, AN6 y AN7
En la tabla se indica que cada línea del puerto E, puede trabajar como
Entrada/Salida Digital, como entrada analógica o como control del puerto paralelo.
En esta sección, sólo veremos las dos primeras funciones, y cuando se estudie el
puerto paralelo, se verá la tercera función.
En la dirección 89H se encuentra TRISE, que es el que configura las líneas
digitales del puerto E y la interfaz paralela (Bits 4 a 7). La configuración como
entrada analógica o E/S digital, se hace por medio del registro ADCON1.
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Otros
POR y BOR Resets
89h TRISE IBF OBF IBOV PSP --- Registro de 0000 -111 0000 -111
MODE Configuración de PORTE
283 INICIO
El Convertidor Analógico a Digital
284 INICIO
Descripción del
funcionamiento del AD/C
285 INICIO
Tiempo de lectura del
convertidor A/D
El tiempo de lectura para la señal de cada canal, está dado por el tiempo de
adquisición mas el tiempo de conversión del convertidor A/D.
El tiempo de adquisición está dado por la siguiente ecuación:
286 INICIO
Configuración del Convertidor A/D
287 INICIO
Selección de las entradas analógicas
y las de referencia
Para seleccionar las líneas que se utilizarán como entradas analógicas y las tensiones de
referencia, se selecciona el código apropiado de PCFG3-0 en el registro ADCON1, para
ello se busca en la siguiente tabla la opción más conveniente:
Notas:
1: Estos canales no son disponibles en los PIC16F870, 872, 873 y 876.
2: Esta columna indica el número de canales analógicos y el número de entradas de referencia.
288 INICIO
El oscilador del convertidor A/D
Para seleccionar el oscilador, se debe acceder a los bits ADCS1 y ADCS0 del registro
ADCON0. En la siguiente tabla podrás escoger la opción adecuada:
Debe tomarse en cuenta que el tiempo de conversión de cada bit debe ser mayor o
igual a 1,6μSeg. La frecuencia máxima del cristal según los valores de ADCS1-ADCS0
se muestra a continuación:
289 INICIO
Selección de la escritura en los
registros ADRESH y ADRESL
290 INICIO
Configuración de los registros de
interrupciones para el convertidor A/D
El tiempo de conversión puede variar según la frecuencia del oscilador del convertidor
A/D y la temperatura. Al estar lista la conversión analógica de un dato digital, se
activan las líneas ADON a “0” del registro ADCON0 y se coloca en “1” la línea ADIF
del registro PIR1. Si las interrupciones están habilitadas por medio de un “1” en el
bit GIE del registro INTCON y la interrupción del convertidor A/D está habilitada por
medio de un “1” en la línea ADIE del registro PIE1, al finalizar la conversión del dato
analógico a digital, provocará una interrupción en el microcontrolador y se cargará el
vector de interrupción al contador de programa (dirección 4H). Para atender la rutina
de interrupción debida al convertidor A/D, bastará con leer el bit ADIF del registro
PIR1.
PIE1 (8CH)
c
PSPIE ADIE RCIE TXIE SSPIE c CCP1IE TMR2IE TMR1IE
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
PIR1 (0CH)
c
PSPIF ADIF RCIF TXIF SSPIF c CCP1IF TMR2IF TMR1IF
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
291 INICIO
Manejo del Convertidor A/D
En la siguiente figura se
muestra un esquema de las
conexiones internas del
convertidor analógico a digital.
Podemos observar que las
entradas analógicas van a un
multiplexer analógico, y la
selección del canal a convertir
se realiza por medio de los bits
CHS2, CHS1 y CHS0 del
registro ADCON0.
Por otro lado, vemos que es
posible sacrificar las entradas
AN3 y AN2, para colocar las
tensiones de referencia
externas, y con ello mejorar la
exactitud en las lecturas del
convertidor A/D. Nota 1: No disponible en los PIC16F870, 872,
873 y 876
292 INICIO
Ejemplo de un programa que
configura al convertidor A/D
CONFIGAD
BCF RP1 ; Selecciona el banco 1 de la RAM
BSF RP0
MOVLW 3F ; Configuración de las líneas del puerto A como entradas
MOVWF TRISA
MOVLW B’10000011 ; Configura: RA0, RA1, RA2 y RA4 como entradas analógicas; RA3 será
MOVWF ADCON1 ; la entrada de Vref y los 10 bits de lectura del A/D se alínean a la derecha
BSF PIE1,ADIE ; Habilita la interrupción para el AD/C
BCF RP1 ; Selecciona el banco 0 de la RAM
MOVLW B’10000001 ;
MOVWF ADCON0 ; Se configura el oscilador de 20MHz para dividir por 32 y enciende el ADC
El convertidor A/D queda configurado. Para hacer lecturas de cada canal, se deberá
seleccionar los canales por medio de los bits CHS2, CHS1 y CHS0 del registro ADCON0,
y colocar en “1” el bit Go/Done del mismo registro ADCON0.
293 INICIO
Actividades
Para una mejor comprensión del manejo del convertidor analógico a digital, te
proponemos las siguientes actividades:
Hacer un programa y montar un circuito con un microcontrolador PIC, que lea el canal 0,
y coloque el valor binario en los 8 bits del puerto B, y en 2 bits del puerto C.
Hacer un programa y montar un circuito que haga las veces de voltímetro digital, en
donde se muestre la lectura de un canal a seleccionar y se haga la conversión a BCD, y
luego a 7 segmentos, para presentarlo en un indicador de tres dígitos y medio (0,000 a
1,998), para ello la tensión de referencia deberá ser de 2V.
294 INICIO
7.7 El Puerto B
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Otros
POR y BOR Resets
06h,106h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
81h,181h OPTION_REG RBPU INTEDEG TOCS TOSE PSA PS2 PS1 PS0 1111 1111 1111 1111
#
0Bh, 8Bh, INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000x
10Bh,18Bh
295 INICIO
7.8 El Puerto C y los
Temporizadores
296 INICIO
El Temporizador TMR1
297 INICIO
Registro de control del TMR1:
T1CON
En la figura anterior hemos visto cómo se controla el TMR1 por medio de los bits del
registro T1CON. A continuación se describe el funcionamiento de cada uno de estos
bits.
T1CON (10CH)
---- ---- T1CKPS1 T1CKPS0 T1OSCEN TISYNC# TMR1CS TMR1ON
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
BIT Función
TMR1ON Un “1” en este bit enciende el TMR1
TMR1CS Selección de pulsos del TMR1: “0” fosc/4; “1” Entrada externa (RC0, RC1)
TISYNC# Sincronización con externa con oscilador interno: “0” Sincronizado;
“1” No sincronizado
T1OSCEN Habilitación de circuito oscilador. Si T1OSCEN es “1”, Al colocar un cristal de valor
inferior a 200KHz entre RC0 (T1OSC0) y RC1 (T1OSC1) generará la base de tiempo
del TMR1. Si TOSCEN vale “0” TMR1 funcionará como contador de eventos de RC0
T1CKPS0 Bits del preescalador. Relación de frecuencia según T1CKPS1 - T1CKPS0:
T1CKPS1 0-0 1:1; 0-1 1:2; 1-0 1:4; 1-1 1:8
298 INICIO
Algo más sobre TMR1
299 INICIO
Actividades
Hemos visto la operación del temporizador 1, y que éste tiene una resolución de 16 bits.
Por otro lado, vimos una sección de programa que permite hacer la lectura del TMR1 sin
necesidad de detenerlo. Te proponemos que hagas un circuito y programa de un reloj
digital, que tenga como base de tiempo a la frecuencia del oscilador del PIC y el
temporizador TMR1.
300 INICIO
El Temporizador TMR2
El encendido del TMR2 se hace al colocar un “1” en el bit TMR2ON del registro T2CON.
La salida de TMR2 puede seleccionarse por software, para que en el puerto de
comunicación serial trabaje como generador de baudios. El bit TMR2IF del registro
PIR1 se coloca en 1 al haber un desbordamiento del post-escalador de TMR2 y puede
ser utilizado como interrupción al habilitarla por medio del bit TMR2IE del registro
PIE1.
El registro PR2 (dirección 92H) se utiliza para fijar un valor de conteo máximo del TMR2
cuando se trabaja en modulación de ancho de pulsos (PWM).
301 INICIO
Registro de control del TMR2:
T2CON
T2CON (12CH)
---- - TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2SCKPS1 T2SCKPS0
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
T2SCKPS1 - T2CKPS0 Relación del predivisor TOUTPS3 - TOUTPS0 Relación del postdivisor
302 INICIO
7.9 El Puerto C y los Módulos de
Captura, Comparación y PWM
Los PIC16F870-872 disponen de un módulo CCP1, mientras que los otros PIC de las serie
16F87x tienen dos módulos CCP: CCP1 y CCP2, los cuales son prácticamente iguales.
Las funciones que realizan los módulos CCP son las que se muestran a continuación:
• Modo Captura. Dos registros de un módulo CCP capturan el valor de TMR1 cuando
ocurre un evento especial en el terminal RC2/CCP1 o en el terminal RC1/CCP2.
• Modo Comparación. Se compara el valor de TMR1 con el de los dos registros de un
CCP, y cuando coinciden ocurre un evento en el terminal RC2/CCP1 o en RC1/CCP2.
• Modo Modulación de Ancho de Pulsos (PWM). Se mantiene un nivel alto en la salida
RC2/CCP1 o en RC1/CCP2, según se determina en el módulo CCP correspondiente.
CCP1 utiliza los registros CCPR1H y CCPR1L (posiciones 15H y 16H), y para la
configuración se utiliza el registro CCP1CON (17H). Para CCP2 están CCPR2H, CCPR2L y
CCP2CON. En la siguiente tabla se muestran los terminales involucrados del puerto C:
RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA RC3/SCK/SCL RC2/CCP1 RC1/T10SC1/ RC0/T1OSC0/
CCP2 T1CKI
E/S DIGITAL E/S E/S E/S E/S DIGITAL E/S E/S E/S
c
DIGITAL DIGITAL DIGITAL DIGITAL DIGITAL DIGITAL
RECEPCIÓN TRANSMIS. SALIDA
c ENTRADA RELOJ SPI ENTRADA ENTR. TMR1 ENTRADA
c TMR1
USART USART DATOS DATOS SPI CAPTURA 1 ENTR. CAPT2
SPI
DATOS RELOJ ENTRADA RELOJ I2C SAL COMP1 SAL COMP2 SALIDA TMR1
TRANS TRANS DATOS I2C SAL PWM1 SAL PWM2
SINCRONA SINCRONA
303 INICIO
El Registro CCP1CON
En el registro CCP1CON se utilizan 4 bits para configurar la función del módulo CCP1,
los cuales son CCP1M3-CCP1M0. Por otro lado, los bits CCP1X y CCP1Y sólo se utilizan
en el modo PWM y representan los bits menos significativos del valor de un ciclo de
trabajo. Los 8 bits más significativos del ciclo de trabajo, se encuentran en el registro
CCPR1L. A continuación se presenta la disposición de los bits de CCP1CON y en la tabla
se describe el modo de trabajo de CCP1, según los valores de CCP1M3 – CCP1M0.
CCP1CON (17H)
---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
CCP1M3-CCP1M0 Función
0000 Módulo CCP1 desconectado
0100 Modo captura con cada flanco descendente en RC2/CCP1
0101 Modo captura con cada flanco ascendente en RC2/CCP1
304 INICIO
El Registro CCP2CON
CCP1M3-CCP1M0 Función
0000 Módulo CCP2 desconectado
0100 Modo captura con cada flanco descendente en RC1/CCP2
0101 Modo captura con cada flanco ascendente en RC1/CCP2
0110 Modo captura con cada 4 flancos ascendentes en RC1/CCP2
0111 Modo captura con cada 16 flancos ascendentes en RC1/CCP2
1000 Modo comparación que activa el terminal RC1/CCP2 al coincidir valores
1001 Modo comparación que desactiva el terminal RC1/CCP2 al coincidir valores
1010 Modo comparación que genera una interrupción (no afecta al terminal RC1/CCP2)
1011 Modo comparación que pone a 0 TMR1 y provoca interrupciones periódicas
11xx Modo PWM
305 INICIO
Modo Captura
306 INICIO
Esquema del Modo Captura
En el momento de ocurrir una captura, se activa el indicador CCP1IF del registro PIR1 o
el bit CCP2IF del registro PIR2, según el evento que se registra. La interrupción se
realizará si están activos el bit GIE del registro INTCON y el bit CCP1IE o CCP2IE de
los registros PIE1 o PIE2. Esta interrupción puede ser utilizada para leer el contenido
de CCPR1H-L o CCPR2H-L, ya que si ocurre un nuevo evento, entonces se carga el valor
de TMR1 después de que este nuevo evento ocurra.
En la siguiente figura se puede observar el diagrama de bloques de cómo funcionan los
PIC16F87X en el modo de captura para el módulo CCP1.
307 INICIO
Inicialización en el modo Captura
308 INICIO
Modo Comparación
309 INICIO
Modo Comparación
310 INICIO
Inicialización en el
modo Comparación
311 INICIO
Modo Modulación de Ancho
de Pulsos (PWM)
En este modo se obtienen pulsos lógicos cuyo ancho en el nivel “1” tiene una duración
programable con respecto a un período fijo. La relación entre el tiempo que dura el
nivel “1” y el período total, se denomina ciclo de trabajo. Los PWMs tienen aplicaciones
en convertidores digitales a analógicos (D/A), control de velocidad de motores DC,
disparos de Transistores de potencia en el manejo de motores AC y disparos de relés en
el control de temperatura, entre otras. El promedio del valor DC de salida en un PWM
es igual al ciclo de trabajo multiplicado por el valor de la tensión de la fuente de
alimentación.
La siguiente explicación del funcionamiento del módulo PWM de CCP1 aplica también al
módulo CCP2 para los PIC16F873-77. El valor alto que se ha de mantener en el
terminal RC2/CCP1 está determinado por un tiempo de 10 bits de resolución, donde los 8
bits más significativos del valor que dura el “1” se escribe en el registro CCPR1L y los
otros dos bits se escriben en CCP1X-Y del registro CCP1CON. Los 8 bits más
significativos del período total, están determinados por el valor que está en el registro
PR2. Para ello el TMR2 (8 bits más significativos) y los dos bits de un contador que
está conectado entre el preescalador y TMR2, al comenzar a contar, colocan a R2/CCP1
en 1. Cuando el valor del temporizador coincide con el valor que CCPR1L transfirió a
CCPR1H, la salida RC2/CCP1 se hace 0, y éste se mantiene hasta que los bits más
significativos del temporizador coincidan con el valor de PR2. Cuando esto ocurre, se
reinicia TMR2, se vuelve a establecer en “1” RC2/CCP1, exceptuando si el ciclo de
trabajo es 0. El valor de CCPR1L se carga a CCPR1H, de esta manera es posible
escribir en cualquier momento el valor en CCPR1L, ya que la comparación con ese valor se
efectuará después de reiniciarse TMR2.
312 INICIO
Duración del ciclo en el PWM
En el modo PWM, el bit RC2/CCP1 deberá programarse como salida mediante el registro
TRISC. El valor del período que entra al contador menos significativo que está antes de
TMR2 es igual a Tosc multiplicado por la relación del preescalador. De esta manera, el
período del ciclo es:
Para el módulo CCP1, el ancho del pulso estará dado por la siguiente ecuación:
La resolución del PWM será mejor cuando mayor es el valor de PR2. Para obtener una
precisión de 10bits, PR2 deberá valer 255, ya que de esta manera el valor a escribir en
CCPR1L, y los bits CCP1X y CCP1Y corresponden a 10 bits.
La misma explicación dada hasta ahora se aplica para el CCP2 para los
microcontroladores que tienen dos módulos CCP.
313 INICIO
Diagramas de bloques del PWM
314 INICIO
Configuración del PWM
315 INICIO
Actividades
Las actividades a realizar en esta sección corresponderán a las funciones del módulo de
captura, comparación y modulación de anchos de pulso.
Con respecto al modo captura, te proponemos que hagas un programa y un circuito capaz
de medir el tiempo que tarda en hacer una revolución un motor. Para ello deberás
colocar una marca al eje del motor y un sistema de emisión y recepción infrarroja o
magnética, de manera que cada vez que se detecte esa marca, se medirá el tiempo
transcurrido entre una y otra aparición de la lectura. Por medio de este método,
podrás calcular las revoluciones por minuto del motor.
Para la parte de comparación, te proponemos mejorar la precisión del reloj digital
propuesto en la actividad con el temporizador 1. En este caso, la propuesta es cargar
automáticamente un valor al temporizador, por medio de los registros CCPR1H y CCPR1L,
de manera que el TMR1 se inicialice automáticamente. Esto te permitirá contar con un
contador de tiempo fiel, al cual no tendrás que cargar un valor cada vez que se ponga en
“0”. Para ello podríamos fijar que la inicialización del temporizador se efectúe cada 10
mSeg, y utilices este valor como base para el contador de tiempo.
En cuanto a la modulación de ancho de pulsos, te proponemos hacer un convertidor digital
a analógico que tenga una precisión de 10 bits. Para ello colocarás una resistencia y un
condensador como filtro pasa bajo a la salida del modulador de ancho de pulsos, de
manera que promedie la señal de salida. El valor DC a la salida del circuito RC será
igual a la relación entre el tiempo en que dura el “1” a la salida del PWM y el período
total. Deberás en este caso calcular los valores de R y C para que el rizado sea
mínimo.
316 INICIO
7.10 El Puerto C y el Módulo de
Comunicación Serial Síncrona
La comunicación serial es una manera muy utilizada para la transferencia de datos entre
equipos digitales, esto se debe a la cantidad reducida de líneas que utiliza. Los
PIC16F87X, con excepción de los PIC16F870 y PIC16F871, tienen un módulo MSSP
(Master Synchronous Serial Port) el cual proporciona una interfaz entre el
microcontrolador y otros dispositivos electrónicos tales como: otros microcontroladores,
memorias seriales, pantallas de cristal líquido, convertidores A/D, etc. Para ello
disponen de los terminales: RC3/SDO (Datos de salida), RC4/SDI (Datos de entrada) y
RC5/SCK (señal de sincronización o reloj).
El módulo serial, entre otras cosas, puede trabajar en uno de los siguientes modos de
comunicación: SPI (Serial Peripheral Interface) e I2C (Inter Integrated Circuit), los
cuales son muy utilizados actualmente.
En la figura anexa se presenta el diagrama de
bloques del módulo MSSP. El funcionamiento de
este módulo está basado en el registro de
desplazamiento SSPSR, el cual transmite y recibe
los datos en serie, por medio de las líneas SDO y
SDI respectivamente. La sincronización de SSPSR
se ejecuta mediante la señal SCK. La carga y
recepción de estos datos se realiza por medio del
registro SSPBUF, el cual tiene conexión con el bus
interno del microcontrolador. La selección del tipo
de transición y el control del desplazamiento de
datos del registro SSPSR, se hace por medio de
otros registros internos del PIC16F87X.
317 INICIO
La comunicación SPI
319 INICIO
Formas de onda en modo Esclavo
Para CKE=1
320 INICIO
Registros asociados
En el modo SPI los registros asociados son los que se presentan en la siguiente tabla.
Para mayor detalles de los registros SSPCON y SSPSTAT, nos referiremos a las
páginas siguientes en donde se presenta el funcionamiento de cada bit.
321 INICIO
Registro SSPSTAT
Registro de Estatus del MSSP
322 INICIO
Registro SSPCON
Registro de control del MSSP
323 INICIO
Bits SSPM3-SSPM0
324 INICIO
Programa ejemplo
325 INICIO
Ejercicio: Transmitir un dato en
modo SPI
Configurar el PIC16F87x que vayas a utilizar (con excepción de los PIC16F870 y 871),
para que transmita un dato de 8 bits a un registro de desplazamiento 74xx164. Para
ello deberás buscar las características de este dispositivo, de manera de hacer
compatible la transmisión de datos.
PIC16F87X
74XX164
SDO SI
SCK Clock
326 INICIO
7.11 El Puerto C y la
Comunicación I2C
Este protocolo de comunicación fue desarrollado por Philips en la década de 1980.
Utiliza dos líneas para la transferencia de información entre varios elementos; éstas
son: La SDA, la cual se encarga de la transferencia de datos en forma bidireccional, y la
línea SCL la cual es generada por un dispositivo “maestro” hacia los “esclavos”, y lleva los
pulsos de sincronización. La interconexión entre dispositivos es la que se muestra en la
figura siguiente, en donde puede haber en cada caso, más de un dispositivo “maestro” y
no se necesita que todos los dispositivos tengan la misma tecnología digital.
Los dispositivos involucrados en la comunicación I2C se conectan formando un “AND
cableado” con las líneas SDA y SCL, ya que las salidas de cada uno es del tipo drenador
abierto o colector abierto (open drain or open collector). De allí que sea necesario
colocar resistencias a una de las alimentaciones en las líneas SDA y SCL. Esta
configuración, a la vez evita que ocurra fallas, en el caso de haber colisión de datos
cuando dos dispositivos traten de enviar señales al mismo tiempo. Observa las conexiones
de varios elementos y las resistencias Rp en la figura siguiente.
VDD1
NMOS
327 INICIO
Funcionamiento del protocolo I2C
Cuando el bus está libre, las líneas SDA y SCL se encuentran en “1”, es decir, los
transistores de salida se encuentran en estado “abierto”. Cuando comienza una
transmisión, el dispositivo “maestro” envía una señal “0” en la salida SDA, luego la salida
SCL se coloca en “0” y después se envía el conjunto de 8 bits en modo serial por la línea
SDA, los cuales corresponden a 7 bits de la dirección del “esclavo” con el cual se va a
comunicar y un bit de R/W, según la operación que se va a realizar (lectura o escritura);
simultáneamente se envían los pulsos de sincronización. Los valores de los bits de la línea
SDA se considerarán válidos, en los momentos en que la señal de sincronización está en
“1”. Después de enviada la dirección, se envía el bit de parada, el cual corresponde a un
“1”. Entonces el dispositivo “esclavo” envía una señal de reconcimiento, que corresponde
a un “0”, lo cual indica que se ha recibido la información. A continuación, dependiendo
de si la operación es escritura o lectura, se enviará el dato serial del “maestro” al
“esclavo” o viceversa. Observa las formas de ondas en la figura anexa. En las figuras
de la página siguiente, se observa con mayor detalle, el proceso de comunicación serial
I2C en los PIC16F87X, en los que se detallan las señales de estado de este
microcontrolador.
(RC4)
(RC3)
328 INICIO
Formas de ondas en la transmisión
y recepción en el protocolo I2C
329 INICIO
Colisión de datos
Existe la posibilidad de que en un bus I2C dos dispositivos “maestros” puedan generar
una transmisión simultáneamente. Para resolver este problema los dispositivos
maestros “leen” el valor en la línea SDA y lo compara con el valor enviado. En el caso
de que envíe un “1” y lee un “0”, querrá decir que otro maestro tiene dominio del bus
y por tanto el primero tendrá que ceder e inhibir su salida SDA. Podría suceder que
en este conflicto, el maestro que toma el control esté enviando información al maestro
que cedió el bus. En este caso el maestro que cedió el bus deberá pasarse a la
condición de “esclavo”.
La figura siguiente muestra en un diagrama de tiempo de cómo un primer maestro cede
el bus al segundo maestro, ya que el tiempo en “0” del segundo se mantiene por más
tiempo que el del primero.
330 INICIO
Diagrama de bloques del módulo
I2C en los PIC16F87X
Los PIC16F87X, con excepción de los PIC16F870 y 871, cuentan con un módulo de
comunicación serial que puede configurarse con el protocolo I2C. Este módulo genera
todas las secuencias necesarias para este protocolo, con un mínimo de programación. La
configuración se puede realizar para que trabaje tanto en modo “maestro”, como
“esclavo”.
331 INICIO
Registros asociados al I2C
La siguiente tabla muestra los registros asociados al puerto I2C. En cada uno de los
registros se podrán encontrar la función de cada bit.
332 INICIO
Registro SSPSTAT
(Registro de Estatus del MSSP)
333 INICIO
Registro SSPCON
(Registro de control del MSSP)
334 INICIO
Bits SSPM3-SSPM0
335 INICIO
Registro SSPCON2
(Registro de control 2 del MSSP)
336 INICIO
Configuración del puerto I2C
337 INICIO
Implementación y control del puerto I2C
338 INICIO
Actividad
339 INICIO
7.12 El Puerto C y el USART
DATOS RELOJ ENTRADA RELOJ I2C SAL COMP1 SAL COMP2 SALIDA TMR1
TRANS TRANS DATOS I2C
SAL PMW1 SAL PMW2
SINCRONA SINCRONA
PIC 1 PIC 2
RS-
232C Tx Rx
Rx Tx
Gnd Gnd
341 INICIO
Diagrama de bloques
de la transmisión del USART
En una transmisión serial asíncrona, para enviar un dato de 8 bits, éste se coloca en el
registro TXREG; ese dato se transfiere al registro de desplazamiento TSR, el cual hará
que los datos salgan por el terminal de salida RC6/TX/CK. El dato a enviar, podrá tener
un bit adicional, el cual se utiliza normalmente para colocar la paridad de los datos
transmitidos, según se habilite o no el bit 8 por medio de TX9. Cuando se desea hacer
la transmisión se coloca en “1” el bit TXEN (habilitación de transmisión) y con ello, el
oscilador del generador de velocidad de transmisión envía los pulsos para que se produzca
el desplazamiento de los datos del registro TSR y salgan por el terminal RC6/TX/CK. El
bit TXIF, el cual se puede utilizar para interrumpir el programa principal para colocar un
nuevo dato en TXREG, se activa cuando un dato se transfiere de TXREG a TSR al
iniciarse una nueva transmisión, entonces TXREG está listo para recibir un nuevo dato.
342 INICIO
Bits de configuración
de la transmisión del USART
343 INICIO
Formas de onda en la
transmisión asíncrona
Vemos que la señal BRG es una oscilación libre, la cual determinará la velocidad de
transmisión. En un segmento de transmisión, podemos ver que el envío comienza con un
bit de arranque (start bit) que comienza con valor “0”, luego se envía el dato de 8 ó 9
bits y finaliza con un bit de parada (stop bit) el cual es de valor “1”. Un dato se puede
escribir en el registro TXREG después de haberse transmitido el bit de parada (stop bit)
de un dato previo, es decir, que mientras se está transmitiendo un dato, por medio del
registro TSR, se puede cargar otro en el registro TXREG. El bit TXIF del registro
PIR1 es el que nos indicará cuándo se puede cargar un dato a transmitir en el registro
TXREG. El bit TRMT indicará si el registro TSR está vacío.
344 INICIO
Diagrama de bloques
de la recepción del USART
Los datos entran por el terminal RC7/RX/DT, y de allí pasan al registro RSR cuando el
bit CREN está en “1”. El circuito de control de datos de entrada y el generador de
baudios, se encargan de transferir el dato al registro RSR. Al llenarse el registro RSR,
se activa el bit RCIF del registro PIR1, el cual se puede utilizar como interrupción, y se
transfiere el dato a una memoria FIFO con dos datos de capacidad, la cual se podrá leer
por medio del PIC16F87X al acceder al registro RCREG.
345 INICIO
Bits de configuración
de la recepción del USART
346 INICIO
Formas de onda en la
transmisión asíncrona
En la figura se muestra una recepción de tres datos simultáneos. Cada vez que se
activa el bit de parada, se transfiere un dato a la FIFO, que es leída como el registro
RCREG, y se activa el bit RCIF de PIR1, que puede utilizarse para interrumpir al
programa principal del microcontrolador. Si la lectura del registro RCREG no se realiza,
y se llena la FIFO, Se colocará el bit OERR en “1”, para indicar que hay un
desbordamiento, y que podrían perderse datos.
347 INICIO
Velocidad de transmisión
La cantidad de datos que se pueden enviar por unidad de tiempo depende de la velocidad
de transmisión. A mayor velocidad, podremos transferir más rápidamente los datos de
un dispositivo a otro, pero esto podría llevar algunos inconvenientes, tales como la
incompatibilidad de velocidad con el otro equipo, una mayor probabilidad de error, una
menor distancia de transmisión y una mayor dedicación del microcontrolador al manejo de
los datos enviados y recibidos. El compromiso está en poder transmitir a la mayor
velocidad posible, sin que ocurra algún inconveniente de importancia, lo cual amerita un
estudio de mayor profundidad.
En los PIC16F87X, la velocidad de transmisión se puede obtener en base al oscilador
interno del microcontrolador o algún oscilador externo. Además se cuenta con el
registro SPBRG, el cual fija la relación de velocidad de transmisión en función de la
frecuencia del oscilador y el bit BRGH del registro TXSTA. A continuación se presenta
esta relación:
348 INICIO
Determinar la velocidad
de transmisión
349 INICIO
Pasos para configurar al módulo
de transmisión serial asíncrono
Para configurar el módulo USART para una transmisión serial asíncrona, se deberá seguir
los siguientes pasos:
• Configurar R6/TX/CK como salida y R7/RX/DT como entrada por medio de TRISC.
• Se fija la velocidad de transmisión al cargar el valor adecuado en SBREG y BGRH.
• Colocar SYNC = 0, para indicar que la transmisión es asíncrona.
• Colocar SPEN = 1, para habilitar al puerto serial.
• Colocar los bits GIE y TXIE en “1” si se va a habilitar las interrupciones del
transmisor y el receptor.
• Si el dato es de 9 bits, hacer TX9 = 1.
• Se activa la transmisión con TXEN = 1, TXIF se colocará en 1, ya que TXREG se
encuentra vacío.
• Se carga en TXREG el dato a transmitir, y comienza la transmisión.
• Al comenzar la transmisión, si TSR estaba vacío, éste se cargará con el contenido de
TXREG, por tanto se podrá colocar otro dato a enviar en TXREG. Para saber si se
puede cargar ese dato, bastará con evaluar el bit TXIF.
350 INICIO
Bits utilizados para la
transmisión asíncrona
351 INICIO
Pasos para configurar al módulo
de recepción serial asíncrono
Para configurar el módulo USART para una recepción serial asíncrona, en el caso en el
que no se haya configurado el bloque transmisor, se deberá seguir los siguientes pasos:
• Se fija la velocidad de transmisión al cargar el valor adecuado en SBREG y BGRH.
• Colocar SYNC = 0, para indicar que la transmisión es asíncrona.
• Colocar SPEN = 1, para habilitar al puerto serial.
• Colocar los bits GIE y RCIE en “1” si se va a habilitar las interrupciones del transmisor
y el receptor.
• Si el dato es de 9 bits, hacer RX9 = 1.
• Habilitar la recepción al hacer CREN = 1
El módulo de recepción serial quedará configurado. Cuando un dato se recibe, el bit de
aviso RCIF se colocará en “1”, y si el bit RCIE está habilitado, habrá una interrupción.
En ese momento se podrá leer el registro RCSTA obtener el noveno bit (RX9D) y
determinar si hubo algún error en la recepción (bits FERR y OERR). Para leer un
próximo dato, estos dos bits deberán ser borrados al colocar en “1” el bit CREN.
Si no se encuentra errores, se leerá el dato en el registro RCREG.
352 INICIO
Bits utilizados para la
recepción asíncrona
353 INICIO
Programa de configuración
del USART en modo asíncrono
354 INICIO
Configuración para la recepción
de una dirección
355 INICIO
Algunos formatos de utilizados
en la transmisión asíncrona
Quizás las interfaces más comunes de comunicación serial que utilizan el USART, son la
RS-232 y la RS-485. La mayoría de los computadores personales tiene uno o más
puertos que utilizan la interfaz RS-232, la cual sirve para comunicarte con otro
dispositivo, tales como un ratón, un módem o un programador de PICs. En el caso de la
interfaz RS-485, ésta es muy utilizada en la industria, y permite comunicar un
dispositivo maestro con varios esclavos por medio de un par trenzado.
Entre las características del RS-232, se puede mencionar que utiliza comúnmente dos
líneas de señal y la referencia o tierra. Las abreviaciones utilizadas para estas líneas
son: GND que es la referencia, TXD que es la salida a transmitir y RXD que es la
entrada a recibir. Existen también otras líneas que pueden ser utilizadas en algunos
casos para el protocolo. Sin embargo, lo común es que se utilicen sólo estas tres líneas.
Los conectores más comunes utilizados para las interfaces RS-232 son los de 9
terminales y un poco menos los de 25 terminales. En la parte posterior de tu
computador podrás observar si tienes una interfaz de 9 terminales machos, similar a la
que se presenta en la siguiente figura:
A pesar de las nueve líneas que se presentan en el conector, bastaría con utilizar
solamente tres. En la figura de la siguiente página se muestra un esquema de la
conexión de dos elementos con la interfaz RS-232.
356 INICIO
Conexión RS-232
2
3
Por lo general, una tensión positiva (mayor que +3Vdc) representa un “0” y una negativa
(menor que -3Vdc) representa un “1”. Los elementos que se representan por medio de
un rectángulo a trazos, se les conoce con el nombre de “Transceiver”, y se utiliza para
convertir los niveles lógicos de 0 a 5V en los niveles de voltaje RS-232. Un ejemplo de
esta interfaz es el circuito integrado SN75155.
La comunicación RS232 podría ser sencilla, ya que el USART transmite y recibe datos en
el formato de bytes. Esta transmisión se podrá hacer más compleja, si se incluye la
paridad, las señales de protocolo y el estado de “break”, el cual consiste en una salida
cero que se mantiene por un período en el orden de 100mS a 500mS.
357 INICIO
Asignación de terminales en un
conector RS-232
9 RI Indicador de llamada
De estos terminales, los que se utilizan con más frecuencia son: RD, TD y SG; es decir:
recepción de datos, transmisión de datos y tierra de señales. Debemos recordar que en
el equipo de comunicación, el tipo de conector es hembra y el terminal 2 corresponde al
de transmisión de datos y el 3 al de recepción de datos.
358 INICIO
Utilización y configuración del
puerto RS-232-C de tu PC
Para hacer utilización del puerto serial de tu computador personal, podrás entrar en el
modo “Hiperterminal. Para ello deberás acceder a: Inicio, Programas, Accesorios,
Comunicaciones y luego a Hyper Terminal.
359 INICIO
Utilizando tu PC en modo
Hyper Terminal
Al hacer esto, aparecerá un cuadro para configurar el puerto serial, en el cual deberás
seleccionar los parámetros adecuados para la comunicación con tu microcontrolador.
360 INICIO
Configuración del puerto RS-232-C
361 INICIO
Conexión RS-485
362 INICIO
Implementación RS-485
El software para la interfaz RS-485 puede ser significativamente más complejo que el
de la interfaz RS-232. Se requiere un protocolo de comunicación para arbitrar el bus,
y no exista colisión de datos al tratar de transmitir dos dispositivos a la vez.
Los buses RS-485 se suelen implementar con un “maestro” y varios “esclavos”. El
“maestro” es el único dispositivo que inicia la comunicación en el bus, para así evitar
problemas de colisiones. Esta comunicación se comienza al enviar una dirección y un
comando, entonces el “esclavo” que está siendo seleccionado responderá. Cada esclavo
deberá tener una dirección diferente, y debe “entender” el formato de los datos que se
le envían. Adicionalmente cada dispositivo debe controlar la habilitación de la señal de
salida en su “transceiver”.
Debido a que en el bus se conectan varios dispositivos “esclavos”, el USART debe utilizar
el modo de detección de direcciones, al habilitar el bit ADDEN del registro RCSTA.
Esto permitirá que en una transmisión, los “esclavos” no seleccionados previamente
ignoren los bits de datos recibidos. Si en una transmisión, “el maestro” coloca en “1” el
bit ADDEN, se indica que se está transmitiendo una dirección a ellos. En el momento de
detectar el bit ADDEN, cada “esclavo” hará la comparación de la dirección recibida con
la que ellos tienen establecidas, y en el caso de coincidir, ese “esclavo” sabrá que los
datos y comandos siguientes corresponderán a él. Esto reducirá y facilitará el software
de comunicación entre varios dispositivos conectados en un mismo par de líneas.
Para más detalles, deberás conocer los formatos de cada protocolo, para que puedas
programar el USART en tu PIC. Algunos de los protocolos industriales que utilizan la
interfaz RS485 son: el ASCII ANSI X3 28-2.5-A4, el BSAP y el MODBUS, entre
otros.
363 INICIO
Transmisión Síncrona en
modo “maestro”
364 INICIO
Bits y formas de ondas relacionados
con la transmisión síncrona
365 INICIO
Comunicación Síncrona en
modo “esclavo”
366 INICIO
Registros asociados en la comunicación
síncrona en modo “esclavo”
367 INICIO
Programa de configuración
del USART en modo síncrono
BCF STATUS,RP1
BSF STATUS,RP0 ; Selección del Banco 1
MOVLW BAUDIOS ; Establece la velocidad de transmisión
MOVWF SPBRG
MOVLW 0xB0 ; Transmisión de 8 bits, modo baja velocidad
MOVWF TXTA ; Modo sincrónico, habilitación del USART
BSF PIE1,TXIE ; Habilita interrupción del transmisor
BSF PIE1,RCIE ; Habilita interrupción del receptor
BCF STATUS,RP0 ; Selección del banco 0
MOVLW 0x90 ; Recepción de 8 bits, receptor habilitado,
MOVWF RCSTA ; Puerto serial habilitado
368 INICIO
Actividades
-12V
+12V
Transmisión
RC6/TX RS232C
del PIC
369 INICIO
Registros asociados al Puerto C
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Otros
POR y BOR Resets
07h PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx uuuu uuuu
87h TRISC Registro de Configuración de PORTC 1111 1111 1111 1111
81h, 181h OPTION_REG RBPU# INTDG TOCS TOSE PSA PS2 PS1 PS0 1111 1111 1111 1111
15h CCPR1L Registro 1 de Captura, Comparación y PWM menos significativo xxxx xxxx uuuu uuuu
16h CCPR1H Registro 1 de Captura, Comparación y PWM más significativo xxxx xxxx uuuu uuuu
17h CCP1CON --- --- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000
1Bh CCPR2L Registro 2 de Captura, Comparación y PWM menos significativo xxxx xxxx uuuu uuuu
1Ch CCPR2H Registro 2 de Captura, Comparación y PWM más significativo xxxx xxxx uuuu uuuu
1Dh CCP2CON --- --- CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x
98h TXTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010
19h TXREG Registro de datos a transmitir del USART 0000 0000 0000 0000
99h SPBRG Registro de generación de la velocidad de transmisión (Baudios) 0000 0000 0000 0000
1Ah RCREG Registro de datos recibidos del USART 0000 0000 0000 0000
13h SSPBUF Registro de datos transmitidos y recibidos del puerto serial sincrónico xxxx xxxx uuuu uuuu
14h SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000
91h SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 0000 0000
93h SSPADD Registro de Direcciones del puerto serial sincrónico en modo I2C 0000 0000 0000 0000
94h SSPSTAT SMP CKE D/A P S UA R/W BF 0000 0000 0000 0000
370 INICIO
7.13 El Puerto D, el Puerto E
y la Interfaz Paralela
Bit 7 PSP Bit 6 PSP Bit 5 PSP Bit 4 PSP Bit 3 PSP Bit 2 PSP Bit 1 PSP Bit 0 PSP
371 INICIO
Diagrama de bloques del
Puerto Paralelo
372 INICIO
Formas de onda para
la escritura de datos
La escritura en el puerto PSP ocurre al colocar en “0” las líneas CS y WR. Cuando
estas líneas pasan a “1”, el bit IBF, el cual indica que el registro de entrada está
lleno, y está ubicado en el registro TRISE se establece en el período Q4 del siguiente
ciclo del oscilador del microcontrolador. La señal estará escrita cuando aparece el
pulso Q2 de ese ciclo. El bit de aviso de interrupción PSPIF, ubicado en PIR1, se
establecerá también en el período Q4 y se podrá utilizar para interrumpir al
microcontrolador. Este bit se borrará al leer el dato en el puerto D en el programa
del microcontrolador. El bit de desbordamiento, IBOV, ubicado en TRISE, se
colocará en “1”, si una nueva escritura se hace en el registro del PSP antes de
haberse leído el dato que estaba en ese registro. En la siguiente figura se presentan
las formas de onda para la escritura de datos en el PSP.
373 INICIO
Formas de onda para
la lectura de datos
La lectura del PSP ocurre cuando se detecta un “0” en cada una de las líneas CS y
RD. El bit que indica que el registro de salida está lleno (OBF), ubicado en el registro
TRISE, se coloca en cero inmediatamente, para indicar que el puerto D está a la
espera de ser leído por el bus externo. Al colocar el bit CS o RD en “1”, el bit de
interrupción PSPIF se coloca en “1” en el período Q4 del ciclo del oscilador del
microcontrolador, para indicar que la lectura ha sido realizada. En la siguiente figura
se presentan las formas de onda para la lectura de datos.
374 INICIO
Registros asociados al
Puerto Paralelo
La ventaja de utilizar al puerto paralelo como elemento controlado por otro dispositivo
externo, es que nos permite hacer transferencias de datos de un dispositivo a otro de
manera más rápida e independiente, y para ello se utilizarían las interrupciones.
En la siguiente tabla se encuentran los bits asociados al puerto paralelo.
375 INICIO
Registros Asociados a PORTD
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Otros
POR y BOR Resets
08h PORTD RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx uuuu uuuu
89h TRISE IBF OBF IBOV PSP Registro de 0000 -111 0000 -111
MODE Configuración de PORTE
376 INICIO
El Puerto E
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR Otros
y BOR Resets
89h TRISE IBF OBF IBOV PSP --- Configuración de las 0000 -111 0000 -111
MODE Entradas/Salida Digitales
377 INICIO
Actividades
378 INICIO
7.14 Palabra de Configuración
Los bits FOSC0, FOSC1, WDTE y PWRTE# se configuran de la misma manera que en
los PIC16F84A y PIC16C54 (repasar). CP1 y CP0 se utilizan para proteger secciones de
la memoria de programa, y éstas dependen de los modelos del PIC que se va a utilizar.
Para más detalles, véase la tabla de la página siguiente.
• BODEN. Habilitación de inicialización por caída de tensión. 1 Habilitada, 0 Deshabiltada.
• LVP. Habilitación para programar en bajo voltaje. 1 RB3 habilitada, 0 RB3 funciona
como E/S digital y la programación se realizará por alto voltaje.
• CPD. Protección de la memoria EEPROM de datos. 1 No protegida, 0 Protegida
• WRT. Habilitación para la escritura de la memoria de programa FLASH. 1 Se podrá
escribir en la parte no protegida de la FLASH, 0 No se permitirá la escritura.
• Debug. Modo de depuración del circuito. 1 Desactivado. RB7 y RB6 actuarán como líneas
de E/S. 0 Activado. RB7 y RB6 actúan en modo de depuración. La depuración
se podrá hacer desde el MPLAB.
379 INICIO
Protección de la memoria de
programa de los PIC16F87X
380 INICIO
Conclusión
Hemos hablado acerca de lo que puedes hacer con los microcontroladores PIC y has visto
la descripción de algunos de ellos, desde el más básico, el PIC16C54, hasta los de la gama
media de la serie PIC16F87X. Entre ellos podrás considerar sus potencialidades a la hora
de hacer algún diseño.
Has aprendido las instrucciones del lenguaje ensamblador y la forma en que puedes
desarrollar programas y grabarlos para realizar varias aplicaciones.
Has visto cómo trabajan los módulos de circuitos incluidos en los diferentes
microcontroladores y cómo acceder a sus registros de configuración. Pudiste observar
también la importancia de estos módulos para el desarrollo de interfaces con el mundo
exterior.
En el anexo 5 te presentamos algunos circuitos, notas de aplicación y direcciones de
Internet, los cuales te ayudarán a ampliar los conocimientos sobre los microcontroladores
PIC.
Tu estudio siguiente lo podrás hacer en los microcontroladores PIC18FXXX, lenguaje C, y
los procesadores de señal dsPIC o TMS320.
Finalmente, te deseamos el mejor de los éxitos, y si encuentras alguna sugerencia para
mejorar y promocionar este material, podrás escribir un correo electrónico a la dirección:
calvarezluz@cantv.net
INICIO
ANEXOS
ANEXO 1. GLOSARIO
ANEXO 2. EXPLICACIÓN DETALLADA DE LAS INSTRUCCIONES
ANEXO 3. DIRECTIVAS DEL LENGUAJE ENSAMBLADOR
ANEXO 4. REGISTROS Y BITS DE FUNCIONES ESPECIALES
ANEXO 5. INTERFACES Y PROYECTOS CON
MICROCONTROLADORES PIC
ANEXO 6. ACTUALIZACIÓN DEL PICSTART PLUS
ANEXO 7. GRABACIÓN DE UN PROGRAMA EN LOS PIC16F87X
INICIO
383
INICIO
Símbolo matemático que indica mayor o igual que.
<> Los valores que estén encerrados en estos símbolos, indican bits que
El valor que esté debajo de una línea continua, indica que está
negado o invertido lógicamente.
384 INICIO
Acceso: Entrada de datos a un lugar de memoria o puerto.
385 INICIO
Aritmética: Operación matemática, normalmente se refiere a una
instrucción que ejecuta una suma, resta, incremento o
decremento.
386 INICIO
B (b): Posición de un bit en un registro.
387 INICIO
Borrado: Acción de colocar los datos con valor “0”. En el caso de
las memorias EPROM, EEPROM y FLASH, la acción de borrar
significa colocar todos los datos en “1”.
388 INICIO
C: Lenguaje de programación de alto nivel. Es muy utilizado
para compilar programas a lenguaje de máquina.
CAN: Protocolo de comunicación serial utilizado en la industria.
Call: Instrucción que consiste en llamar a una rutina o
subprograma.
Capacitor: Condensador eléctrico.
Carry o C: Es el bit 0 del registro STATUS, que indica cuándo en una
operación de suma se lleva un acarreo, o en una resta se
lleva un débito.
Cero: Valor nulo.
Cext: Condensador externo.
Chip: Circuito integrado.
Ciclo: Período en el cual transcurre una instrucción.
389 INICIO
CLK: Reloj o señal de oscilación que define la frecuencia de
trabajo del microcontrolador.
390 INICIO
D/AC: Convertidor Digital a Analógico.
391 INICIO
Dirección: Valor numérico o etiqueta en donde se puede ubicar un
determinado dato o instrucción en una posición de memoria.
Disparador de
Schmitt: Elemento que incorpora a su entrada un detector de
histéresis, es decir que compara con dos valores, según si la
señal a detectar tiene pendiente positiva o negativa.
392 INICIO
EEPROM: Memoria para lectura solamente, a la que se le puede grabar
con pulsos eléctricos. Esta memoria se puede usar para
guardar datos, que deben mantenerse, aun al quitar la
alimentación de la memoria.
393 INICIO
Entrada: Terminal de conexión cuya señal se dirige hacia un dispositivo.
394 INICIO
y
F: Apuntador de direcciones de los registros de la memoria de
datos.
Gama: Grupo.
395 INICIO
e
Handbook: Manual del fabricante.
Harvard: Arquitectura que consiste en separar la memoria de programa
de la de datos.
Hitachi: Fabricante japonés de semiconductores.
Hz: Unidad de frecuencia que indica Hertz o ciclo por segundo.
I2C ó I2C: Protocolo de comunicación serial desarrollado por Philips. Este
protocolo permite comunicar varios dispositivos utilizando
únicamente dos líneas y el común.
I/O: Entrada/Salida.
Incremento: Aumenta en una unidad el valor de un dato específico.
IND: Registro de acceso indirecto, cuya dirección está dada
por el registro FSR.
396 INICIO
Inicialización: Acción y efecto de dar valores iniciales a un dispositivo.
397 INICIO
y
K: Prefijo que significa 1000. Letra que se utiliza para designar
a una constante.
398 INICIO
MCLR: Entrada de inicialización del dispositivo. Se activa con “0”. Este
terminal también tiene la funcion Vpp, que es la tensión de
programación els microcontrolador.
MCS: “Micro-Computer System”. Se refiere a un sistema realizado
con microcomputador e interfaces.
MCU: “Microcontroller Unit”. Se refiere a un microcontrolador.
Media: Se refiere a la gama de los microcontroladores que tienen
palabras de instrucción de 14 bits.
Memoria Memory: Elemento capaz de almacenar información (datos o programas).
Programming: Grabación o programación de una memoria.
MHz: Unidad de frecuencia equivalente a un millón de Hertz.
Microchip: Fabricante estadounidense de semiconductores.
Microcomputadora: Computadora pequeña, antes se refería así a un microcontrolador.
Microcontrolador: Dispositivo que está compuesto de un microprocesador,
memorias, puertos, temporizadores y algunos otros
elementos,que ejecuta una o más funciones
específicas de acuerdo a su programación y conexión.
399 INICIO
Microprocesador: Elemento que consta de una unidad de control, registros y
unidad de lógica y aritmética, capaz de realizar funciones de
procesamiento y cómputo.
401 INICIO
OPTION: Registro que configura el escalamiento del TMRO o el WDT.
402 INICIO
PA: Puerto A (PORTA).
403 INICIO
PIC: “Peripheral Interface Controller” Sigla que identifica a los
microcontroladores de Microchip.
404 INICIO
PROM: “Programble Read Only Memory” Memoria programable sólo
para lectura.
PS: Bit que se encuentra en el registro OPTION, y que está
relacionado con el escalamiento. El bit PSA (Bit 3 de
OPTION), es el bit de asignación al escalamiento, y los bits
PS0 - PS2 (Bits 0 al 2 de OPTION) están relacionado con el
valor del escalamiento.
Puerto: Interfaz o registro de conexión externa a un microcontrolador.
Puerto Serial: Interfaz que transmite o recibe datos en una sola línea. Los
datos se envían de manera secuencial en grupos de varios bits
y además se incluyen bits de control.
Pull up: Conexión a la fuente de alimentación positiva. Se refiere
normalmente a las resistencias que se conectan al voltaje de
alimentación (VDD).
PWM: “Pulse With Modulator” Modulador de ancho de pulsos.
405 INICIO
RA0 – RA4: Terminal de conexión del puerto A, el sufijo indica el bit que
corresponde a ese puerto.
RB0 – RB7: Terminal de conexión del puerto B, el sufijo indica el bit que
corresponde a ese puerto.
406 INICIO
Resistencia: Elemento eléctrico que se opone parcialmente al paso de la
corriente eléctrica.
407 INICIO
Salida: Terminal de conexión cuya señal es generada por un dispositivo.
Serial: Se aplica a los datos que entran o salen uno por uno o bit por
bit en una sola línea de transmisión.
408 INICIO
Sincrónico: Que ocurre a la par de otra señal guía.
409 INICIO
Tecnología Se refiere al tipo de semiconductor utilizado en los dispositivos
Dgital: lógicos. Destacan: TTL, CMOS, NMOS, ECL, PMOS, etc.
Tiempo Tiempo por el cual no se ejecutará una acción alguna, hasta que
de espera: éste se acabe.
410 INICIO
TOCKI: Es el terminal que corresponde a la base de tiempo del
temporizador 0 (TMR0). Debe colocarse a Vss o VDD en el caso
de no utilizarse, para reducir el consumo de energía.
411 INICIO
y
Verify
Specification: Verificación de especificación.
412 INICIO
a
W: Registro de trabajo de los microcontroladores PIC.
413 INICIO
414
INICIO
Conjunto de instrucciones de los PIC16C5X,
PIC16F5X y 12C5X (Gama Básica):
415 INICIO
OPERACIONES ORIENTADAS A BITS DE REGISTROS
416 INICIO
Conjunto de instrucciones de los
PIC16CXXX, 16FXXX, 12C6XX, 12F6XX
Y 14CXXX (Gama media).
417 INICIO
OPERACIONES ORIENTADAS A BITS DE REGISTROS
418 INICIO
ADDLW
Suma valor literal con W
Ejemplo: ADDLW 0 x 15
Antes de la Instrucción
W = 0x10
Después de la Instrucción
W = 0x25
419 INICIO
ADDWF Suma W y “f”
420 INICIO
And del valor
ANDLW literal con W
421 INICIO
ANDWF AND W con “f”
422 INICIO
BCF Borra bit en “f”
423 INICIO
BSF Establece en 1 bit en “f”
424 INICIO
BTFSC Prueba bit en
salta si es cero
f,
425 INICIO
BTFSS Prueba bit en f, salta si es 1
426 INICIO
CALL Llamar a subrutina
Antes de la Instrucción
PC = dirección (AQUÍ)
Después de la Instrucción
PC = dirección (ALLA)
TOS = dirección (AQUÍ + 1)
427 INICIO
CLRF Borra “f”
428 INICIO
Código Ensamblador: (Etiqueta) CLRW
Operadores: Ninguno
Operación: 00h (W);
1 Z
Bits de estado que se afectan: Z
Descripción: El registro W es borrado y el bit Z es
puesto en 1.
Ejemplo: CLRW
Antes de la Instrucción
W = 0x5A
Después de la Instrucción
W = 0x00
z = 1
429 INICIO
CLRWDT
Borra temporizador
perro guardián (WDT)
Ejemplo: CLRWDT
Antes de la Instrucción
Contador WDT = ?
Después de la Instrucción
Contador WDT = 0x00
Escalamiento de WDT = 0
TO = 1
PD = 1
430 INICIO
Complementa “f”
431 INICIO
Decremento de “f”
432 INICIO
Decremento de “f”,
salta si es 0
Después de la Instrucción
PC = dirección (ALLA)
434 INICIO
Incremento de “f”
Antes de la Instrucción
CNT = 0xFF
Z = 0
Después de la Instrucción
CNT = 0x00
Z = 1
435 INICIO
Incremento de “f”
salta si es 0
436 INICIO
OR Inclusivo de
valor literal con W
437 INICIO
IORWF OR Inclusivo de W
con “f”
Código Ensamblador: (Etiqueta) IORWF f,d
Operadores: 0 f 31 (Gama básica)
0 f 127 (Gama media)
d 0,1
Operación: (W).OR.(F) (dest),
Bits de estado que se afectan: Z
Descripción: Se ejecuta la función lógica OR
(inclusivo) entre los bits del registro W
y los bits del registro “f”.
Si “d” es 0, el resultado se coloca en W,
si “d” es 1, el resultado se coloca en “f”.
Ejemplo: IORWF RESULT, 0
Antes de la Instrucción
RESULT = 0x13
W = 0x91
Después de la Instrucción
RESULT = 0x13
W = 0xBF
Z = 0
438 INICIO
MOVF Mueve “f”
Código Ensamblador: (Etiqueta) MOVF f,d
Operadores: 0 f 31 (Gama básica)
0 f 127 (Gama media)
d 0,1
Operación: (f) (dest)
Bits de estado que se afectan: Z
Descripción: El valor de “f” se mueve hacia “d”. Si “d”
es 0, el valor se coloca en W, si “d” es 1,
el valor se coloca en “f”. Esta instrucción
es útil para saber si el contenido de “f” es
cero, ya que se afecta al bit Z.
Después de la Instrucción
W = Valor en el registro FSR
439 INICIO
MOVLW Mueve valor literal a W
Operadores: 0 ≤ K ≤ 255
Operación: K (W);
registro W.
Después de la Instrucción
W = 0x5A
440 INICIO
MOVWF Mueve W a “f”
Antes de la Instrucción
TEMP_REG = 0xFF
W = 0x4F
Después de la Instrucción
TEMP_REG = 0x4F
W = 0x4F
441 INICIO
NO
NOP No operación
Ejemplo: NOP
442 INICIO
OPTION Carga el registro OPTION
Ejemplo: OPTION
Antes de la Instrucción
W = 0x07
Después de la Instrucción
OPTION = 0x07
443 INICIO
RETFIE Retorno de Interrupción
Después de la Instrucción
PIC = TOS
GIE = 1
444 INICIO
RETURN Retorno de Interrupción
Ejemplo: RETURN
Después de la Instrucción
PC = TOS
445 INICIO
RETLW Retorno con valor literal en W
446 INICIO
Rodar “f” a la Izquierda a
RLF través del Carry
Antes de la Instrucción
REG1 = 1110 0110
C = 0
Después de la Instrucción
REG1 = 1110 0110
W = 1100 1100
C = 1
447 INICIO
RRF Rodar “f” a la Derecha a
través del Carry
Ejemplo: SLEEP
449 INICIO
Resta W de Valor Literal
Nota: Esta instrucción no está incluida en los PIC de la Gama Básica
451 INICIO
Intercambio de Nibles in “f”
Antes de la Instrucción
REG1 = 0xA5
Después de la Instrucción
REG1 = 0xA5
W = 0x5A
452 INICIO
Carga valor al registro TRIS con W
Antes de la Instrucción
W = 0xA5
Después de la Instrucción
TRISA = 0xA5
453 INICIO
OR Exclusivo valor literal con W
454 INICIO
OR Exclusivo de W con “f”
Antes de la Instrucción
REG = 0xAF (B’10101111)
W = 0xB5 (B’10110101)
Después de la Instrucción
REG = 0x1A (B’00011010)
W = 0xB5 (B’10110101)
455 INICIO
456
INICIO
El lenguaje ensamblador provee una plataforma para desarrollar los códigos
de los programas en los microcontroladores. En este anexo se expondrá
una explicación acerca de las opciones de comandos y las directivas que
ofrece este lenguaje.
En el momento en el que te dispones a ensamblar un programa editado, en
el MPLAB tendrás acceso a una ventana, tal como la que se muestra en la
siguiente página. Allí podrás establecer una serie de comandos de opción
para que tengas la posibilidad de generar o no diferentes archivos que
provendrán de tu archivo editado o archivo fuente, el cual deberá tener
un nombre y la extensión “.asm”. Por ejemplo, si el archivo que editaste
tiene como nombre “miprog.asm”, entonces podrás generar los siguientes
archivos:
• miprog.lst, el cual te muestra una lista de los códigos y símbolos
generados.
• miprog.err, el cual te muestra una lista de los errores.
• miprog.hex. Este archivo es el que contiene los códigos del programa en
hexadecimal y es el que vas a grabar en el microcontrolador.
• miprog.cod. Este archivo te muestra los símbolos y la depuración.
• miprog.hxl o .hxh, el cual separa los bytes del archivo hexadecimal.
457 INICIO
Opciones de las líneas
de comando
Para ensamblar un programa en el MPLAB seleccionas “Project” en el meú principal y
luego “Build Node”, tendrás acceso a la ventana con las opciones de las líneas de
comando, tal como se muestra en la figura de abajo. En la siguiente página se
explica el significado de estos comandos que se establecerán los archivos generados.
458 INICIO
Descripción de las opciones
459 INICIO
Te recordamos que las directivas del lenguaje ensamblador son comandos que aparecen
en el lenguaje que tú editas, pero que no se convierten en códigos del programa del
microcontrolador. Ellas se utilizan para controlar la compilación del programa que vas a
utilizar en el microcontrolador, es decir, dónde vas a colocar las direcciones de los
datos según su nombre, en cuál línea comenzará una parte del programa, dónde termina
el programa, cuáles son las entradas y salidas, y otras especificaciones más.
DATA Crea Datos numéricos y de texto <etiq> data <exp> data 1, 2, externa
461 INICIO
Directiva Descripción Sintaxis Ejemplo
ENDC Finaliza un bloque de constantes endc endc ;ver CBLOCK
462 INICIO
Directiva Descripción Sintaxis Ejemplo
IF Comienza un bloque condicional. Se pregunta if <exp> if temper > 100
por una condición, si ésta es cierta se ejecuta <instruc> dw caliente
la acción, sino se ejecuta la línea siguiente. Si <else <exp>> else
ELSE
en esa línea aparece ELSE entonces se asigna
<instruc> dw frio
la acción que le sigue. El bloque IF se cierra
ENDIF con ENDIF endif endif
IFDEF Se ejecuta si los símbolos se han definido ifdef <etiq> ifndef cierto
<instruc> dw no_cierto
IFNDEF Se ejecuta si los símbolos no se han definido endif endif
#INCLUDE Incluye un archivo fuente adicional. Ver p2- include <arch> include p16f84.inc
15
LIST Lista opciones. Ver tabla de opciones A3-3 list |<lista>| list p=16c71,r=dec
LOCAL Declara variable como macro local. Ver macro local <etiq> local
MACRO Declara definición de macro. Una macro son <etiq> macro leer macro d1, d2
un conjunto de instrucciones que pueden ser <instruc> movlw d1...
insertadas como código fuente. endm endm
ENDM
_ _MAXRAM Especifica máxima dirección de la RAM _ _maxram<exp> _ _maxram 0x0bf
MESSG Crea un mensaje definido por el usuario messg “<text>” messg “error 1”
463 INICIO
Directiva Descripción Sintaxis Ejemplo
NOLIST Elimina lista de salida nolist nolist
ORG Especifica dirección de origen <etiq> org <exp> org 50 ;ver p2-18
RADIX Especifica la base numérica a utilizar radix<base num> radix dec ;(hex, oct)
SET Define una variable en el ensamblador <label> set<exp> long set 0x12;
WHILE Hace un lazo si una condición es cierta while <exp> while i<contador
i+=1
ENDW endw
464 INICIO
465
INICIO
PIC16C54 y 56
00h INDF(1)
01h TMRO
02h PCL
03h STATUS
04h FSR
05h PORTA
06h PORTB
07h
REGISTROS
0Fh DE
10h PROPÓSITOS
GENERALES
1Fh
466 INICIO
PIC16C55
00h INDF(1)
01h TMRO
02h PCL
03h STATUS
04h FSR
05h PORTA
06h PORTB
07h PORTC
0Fh REGISTROS
10h DE
PROPÓSITOS
1Fh GENERALES
467 INICIO
PIC16C57
FSR<6:5> 00 01 10 11
Dirección
de registro00h
INDF(1) 20h
01h TMRO 40h 60h
02h PCL
03h STATUS
04h FSR
05h PORTA Este Mapa de Direcciones
06h PORTB retoma a las direcciones
07h PORTC del Banco 0
08h REGISTROS
DE
PROPÓSITOS
GENERALES 2Fh 4Fh 6Fh
0Fh
10h REGISTROS 30h REGISTROS 50h
REGISTROS 70h REGISTROS
DE DE DE DE
PROPÓSITOS PROPÓSITOS PROPÓSITOS PROPÓSITOS
GENERALES GENERALES
1Fh GENERALES GENERALES
3Fh 5Fh 7Fh
Banco 0 Banco 1 Banco 2 Banco 3
468 INICIO
PIC16C58
FSR<6:5> 00 01 10 11
Dirección
de registro00h
INDF(1) 20h
01h TMRO 40h 60h
02h PCL
03h STATUS
04h FSR
05h PORTA Este Mapa de Direcciones
06h PORTB retoma a las direcciones
07h del Banco 0
REGISTROS
DE
PROPÓSITOS
GENERALES 2Fh 4Fh 6Fh
0Fh
10h REGISTROS 30h REGISTROS 50h
REGISTROS 70h REGISTROS
DE DE DE DE
PROPÓSITOS PROPÓSITOS PROPÓSITOS PROPÓSITOS
GENERALES GENERALES
1Fh GENERALES GENERALES
3Fh 5Fh 7Fh
Banco 0 Banco 1 Banco 2 Banco 3
469 INICIO
Registros de funciones
especiales y bits de los PIC16C5X
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR
N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB, TRISC) 1111 1111 1111 1111
N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 --11 1111 --11 1111
00h INDF Registro de la mem. de datos, su dirección está en el registro FSR xxxx xxxx uuuu uuuu
01h TMRO Temporizador contador de tiempo real de 8 bits xxxx xxxx uuuu uuuu
02h PCL 8 bits de bajo orden del Contador de Programa (PCL) 1111 1111 1111 1111
04H FSR Apuntador de la memoria de datos para acceso indirecto 1xxx xxxx
05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu
06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
07H PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx uuuu uuuu
470 INICIO
PIC16F84
Banco 0 Banco 1
471 INICIO
472 INICIO
BANCO 0 PIC16F87X
473 INICIO
BANCO 1 PIC16F87X
474 INICIO
BANCOS 2 y 3 PIC16F87X
475 INICIO
476
INICIO
Algunas Interfaces
En las siguientes figuras se mostrarán algunos circuitos que podrás emplear como
interfaces de entrada y salida, para que ellos actúen con los microcontroladores. En
sí, no se dan detalles del funcionamiento; sin embargo, con tus conocimientos de
electrónica, esperamos que sepas interpretar cómo trabajan.
El hecho de que estas interfaces se presenten aquí, de ninguna manera significa que
sean las únicas soluciones para poder conectar tu microcontrolador al mundo exterior.
Simplemente los presentamos, para darte una idea de cómo convertir señales de 0 a
5v, las cuales generan los microcontroladores, en órdenes que pueden manejar
elementos que trabajen a tensiones diferentes. Por otro lado, también podrás
observar cómo señales de tensiones diferentes a la de los niveles lógicos, puedan ser
adaptadas para que la lean los microcontroladores.
En la siguiente parte, se presenta una lista de proyectos propuestos, y al lado se
presenta el número de nota de aplicación que puedes consultar para que los puedas
desarrollar. Las notas de aplicación fueron obtenidas del sitio www.microchip.com,
por lo tanto las encontrarás en inglés. Otros sitios web que podrás consultar, los
podrás acceder mediante algún motor de búsqueda al colocar palabras claves, tales
como: “microcontroladores”, “pic”, “proyectos”, entre otras. (p.e. en
www.google.com). De todas formas, al final de este anexo te presentamos alguanas
direcciones en español que tú podrás acceder donde se describen algunos proyectos
en español.
477 INICIO
Encendido de un diodo
emisor de luz (LED)
Terminal
del Puerto
Terminal
del Puerto
478 INICIO
Lectura de interruptores
o pulsadores
4 Resistencias de 4,7K
5V
18 17 16 15 14 13 12 11 10
Vss
PIC
PIC16C54
16F84A
1 2 3 4 5 6 7 8 9
5V
479 INICIO
Control de la Línea
de Corriente Alterna
Relé
NC
C
NA
0 a 5V
480 INICIO
Control de la Línea de
Corriente Alterna 1
0 a 5V 0 a 5V
481 INICIO
Control de la Línea de
Corriente Alterna 2
0 a 5V
482 INICIO
Control de la Línea de
Corriente Alterna 3
0 a 5V
483 INICIO
Detector de Cruces
por Cero
0 a 5V 0 a 5V
484 INICIO
Encendido de un Indicador de 7
Segmentos Ánodo Común (Display)
Segmento a
Segmento b
Segmento c
0 a 5V Segmento d
Segmento e
Segmento f
Segmento g
485 INICIO
Encendido de un Indicador 7
Segmentos de varios dígitos
Dígito 0
Dígito 1
0 a 5V
Dígito 2
Dígito 3
Segmento a
Segmento b
Segmento c
0 a 5V Segmento d
Segmento e
Segmento f
Segmento g
486 INICIO
MATRIZ DE LEDS
Valores
de cada
Columna
0 a 5V
Selección de
columna
0 a 5V
487 INICIO
Lectura de un teclado
matricial
R1 R2 R3 R4
10k 10k 10k 10k
Ra0
Ra1
0 a 5V
Ra2
Entradas Ra1
S1 S2 S3 S4
Rb0
S5 S6 S7 S8
Rb1
S9 S10 S11 S12
0 a 5V
Salidas
Rb2
S13 S14 S15 S16
Rb3
488 INICIO
Aplicación de un reloj con bajo
consumo en el modo “Reposo”
489 INICIO
Interruptor Analógico
0 a 5V
490 INICIO
Notas de Aplicación
PIC16C5X y PIC16F84
491 INICIO
Notas de Aplicación
PIC16F87X
492 INICIO
Notas de Aplicación
PIC16F87X
TB004 Calibración automática del tiempo de espera del WDT.
TB008 Técnicas para fuentes de alimentación sin transformador.
AN597 Implementación a frecuencias ultrasónicas.
AN587 Interfaz de un microcontrolador PIC a un módulo LCD.
AN607 Detector de fallas de la alimentación.
AN660 Rutinas de coma flotante.
AN595 Mejora de la Susceptibilidad de una aplicación.
AN591 Bus de escritorio de la Apple.
AN594 Uso de los módulos CCP.
AN655 Conversión D/A por medio de un PWM y una red R-2R.
AN667 Cargador inteligente de baterías con interfaz SMBus.
AN617 Rutinas de coma flotante.
AN893 Control de un motor DC con escobillas por medio del PIC16F684.
AN892 Monitor de seguridad contra falla e interruptor de frecuencia con un PIC16F684.
AN889 Control VF de motores de inducción trifásicos por medio del PIC16F7X7.
AN880 Referencia rápida de códigos de conversión entre un 8051 y un PIC.
AN879 Uso de un PIC de bajo consumo para un módulo reloj despertador.
AN258 Programador de microcontroladores con interfaz USB de bajo costo.
AN774 Comunicación asíncrona con el módulo USART.
AN212 Sensor inteligente de nodo CAN utilizando el MCP2510 y el PIC16F876.
493 INICIO
Notas de Aplicación
Otros PIC
AN239 Nodo “esclavo” LIN para PIC16 y PIC18.
AN240 Nodo “esclavo” LIN en un PIC16C433.
AN237 Implementación de un nodo “esclavo” LIN en un PIC16F73.
AN851 Transferencia de datos a la FLASH para dispositivos PIC16 y PIC18.
AN844 Interfaces simplificadas para termocuplas en microcontroladores PIC.
AN847 Control de motor en aeromodelismo.
AN821 Encriptación avanzada estándar por medio de un PIC16XXX.
TB053 Generación de alto voltaje por medio de los PIC16C781/782.
AN756 Uso de un MCP2120 para comunicaciones por infrarrojo.
AN758 Uso de un MCP2150 para añadir una conectividad inalámbrica IrDA®.
TB045 Rutinas de codificación de recepción Manchester para dispositivos Keeloq.
AN744 Decodificador Keeloq modular con PIC de la gama media en lenguaje C.
AN746 Interfaz de los potenciómetros digitales MCP41XXX/42XXX con microcontroladores PIC.
AN747 Comunicación con protocolo para los potenciómetros digitales MCP42XXX.
AN217 Programador para los KeeLoQ HCS30X, HCS200.
AN742 Decodificador Hopping modular con microcontroladores PIC de la gama media.
TB043 Rutinas de verificación CRC para KeeLoq.
AN823 Diseño analógico en el mundo digital por medio de controladores de señales mezcladas.
AN220 Medidor de vatios-hora por medio de un PIC16C923 y un CS5460.
AN735 Utilización del módulo MSSP para comunicaciones I2C.
494 INICIO
Notas de Aplicación
Otros PIC
AN734 Utilizaci{on del módulo SSP en modo “esclavo” para la comunicación I2C.
AN216 Controlador de convertidor DC/DC con un microcontrolador PIC.
AN214 Compatibilidad de un transductor inteligente IEEE 1451.2 con un PIC.
AN731 Incrustación de un microcontrolador PIC en el Internet.
AN730 Chequeo y generación CRC.
TB016 Implementación de un ICSP con un PIC16F8X.
TB013 Implementación de un ICSP con un PIC16CXXX.
AN585 Sistema operativo en tiempo real para un PIC16/17.
AN724 Utilización de un PIC para conectar a Internet vía PPP.
AN656 Uso de parámetros de calibración para la programación serial en los PIC.
AN703 Conexión de un PIC con el convertidor serial de 12 bits MCP320X.
AN580 Utilización del temporizador 1 en modo de reloj asíncrono.
AN578 Uso del módulo SSP en el ambiente “multimaestro” IIC.
AN579 Utilización del puerto paralelo de 8 bits.
AN714 Implementación de sistema de seguridad inalámbrico con Keeloq y un PIC.
AN716 Migración de diseños desde el PIC16C74A/74B hacia el PIC18C442
AN719 Interfaz del convertidor analógico a digital MCP3201 con un microcontrolador PIC.
TB028 Técnica para calcular el día de la semana.
AN701 Eliminador de batería en modo de conmutación basado en un PIC16C72A.
AN700 Convertidor Delta-Sigma por medio de un módulo de comparación analógica.
495 INICIO
Notas de Aplicación
Otros PIC
PICREF-3 Medidor de vatios hora.
PICREF-2 Cargador de baterías inteligente.
PICREF-5 Cargador de baterías nivel 3 del SMBus para el PIC16C73A.
TB020 Emulación del PIC12C67X con el PIC16C72.
AN672 Decodificador de código Hopping con PIC del la gama media.
TB004 Calibración automática del período de espera del temporizador WDT.
TB008 Fuente de alimentación sin transformadores.
AN668 Interfaz de un PIC16C92x a una EEPROM serial SPI.
AN514 Técnicas de interrupción por Software.
AN654 El PWM, una solución de software mediante los PIC16CXXX.
TB010 Un convertidor A/D de 4 canales de 8bits a un PIC17C4X.
AN546 Utilización del Convertidor Analógico a Digital.
AN597 Implementación en el rango ultrasónico.
AN615 Diseño de un reloj económico mediante técnicas de baja potencia.
AN511 Reemplazo de PLD.
AN589 Desarrollo de un programador basado en un PC para el PIC16C84.
TB011 Utilización de la SRAM con un PIC16CXX.
AN588 Guía de diseño de osciladores para los PIC16/17.
AN607 Determinación de fallas de encendido.
AN663 Decodificador sencillo de código Hopping con Keeloq.
496 INICIO
Notas de Aplicación
Otros PIC
AN529 Manejador de LED y teclado 4x4 por muestreo.
AN606 Utilización de diseños de baja potencia con PIC16/17.
AN566 Utilización del las interrupciones del puerto B como interrupciones externas.
AN576 Técnicas para deshabilitar interrupciones globales.
AN616 Procesamiento digital de señales con el PIC16C74.
AN662 Decodificador de Código Hopping con KeeLoq por medio de aprendizaje seguro.
Fact 2 Convertidor A/D del PIC16C7X.
AN552 Implementación de un despertador con teclado.
AN520 Comparaciones entre microcontroladores de 8 bits.
AN556 Implementación de una tabla de lectura.
AN522 Consideraciones durante el encendido.
AN595 Mejoramiento de la susceptibilidad en una aplicación a ESD.
AN649 Caracteríssticas del reloj del PIC16C924.
AN531 Posicionador remoto inteligente.
AN575 Rutinas de coma flotante compatibles con la norma IEEE 754.
AN658 Fundamentos de los LCD con los PIC16C92X.
AN613 Uso de las EEPROMs seriales de la serie 93 con el puerto SPI.
AN513 Conversión Analógica a Digital.
AN600 Control de flujo de aire con lógica difusa.
AN527 Software administrador de la pila (Stack).
497 INICIO
Notas de Aplicación
Otros PIC
AN528 Implementación de un despertador con teclado.
AN557 Voltímetro digital de cuatro canales con teclado y pantalla.
AN560 Uso de las EEPROM seriales 93LC56 y 93LC66.
AN535 Lógica a utilizar con EEPROM seriales.
AN655 Conversión D/A por medio del PWM y una red R-2R para generar ondas seno y DTMFL.
AN643 Modulación de Código de Pulso Diferencial Adaptable.
AN647 Interfaz entre un PIC16C64/74 con una EEPROM Serial.
Fact 3 Cuidado y alimentación del PIC16C74.
AN584 Soporte de PICMASTER en Microsoft Windows(TM) DDE.
AN521 Intefaz con líneas de potencia AC.
AN554 Implementación de Software del bus of I²C maestro.
AN611 Medición de Resistencia y Capacitancia cou un PIC 16C622.
AN667 Cargador de batería inteligente con la interfaz SMBus.
AN555 Implementación de Software para el puerto serial asíncrono.
AN519 Desarrollo de un ratón serial.
Fact 1 Guía de diseño de osciladores para los PIC.
498 INICIO
Lista de algunos sitios web
relacionados con PIC
• http://www.comunidadelectronicos.com/sitios2.htm
• http://www.siste.com.ar/enlacesarchivos/Micros.htm
• http://www.sagitron.es
• http://www.todorobot.com.ar
• http://www.todopic.com.ar/
• http://robotia.com.ar/rb/links/links.htm
• http://www.abcdatos.com/tutoriales/electronicayelectricidad/electronica/microcon
troladorespic.html
• http://perso.wanadoo.es/juanramon.villodas/favorite.htm
• http://www.micropic.arrakis.es/marcos.htm
• http://www.miguelo.com.ar/mchip/index.html
• http://www.conket.com/modules.php?name=Topics
• http://www.geocities.com/micramtechnologies/seteando.htm
• http://www.hackemate.com.ar/mirrors/karpoff/manuales/topcite/archivos/hitechPI
C.htm
• http://boards1.melodysoft.com/app?ID=creatronica.microcontroladores&DOC=1
21
• http://www.geocities.com/alva_cesar/rutas.htm
499 INICIO
500 INICIO
Equipo requerido para la actualización
del PICSTART PLUS
Sin embargo, a partir del año 2004, los PIC17C44 ya no tienen la capacidad
suficiente para aceptar esta actualización. Para ello, necesitarás adquirir un
módulo UK003010, y seguir las instrucciones para realizar la actualización del
PICSTART PLUS. Para más detalles consulta en alguna de las direcciones
siguientes: http://www.sagitron.es o http://www.microchip.com.
501 INICIO
Procedimiento para la actualización
del PICSTART PLUS
503 INICIO
504
INICIO
Grabación de un programa
en un PIC16F87X
505 INICIO
Diagrama del circuito
programador
506 INICIO
El PicProg
Descripción:
PicProg
Programador para PIC 16F8xx
(Versión 2.0)
(c) TodoRobot - 2002
Para ir al sitio web donde está el software de instalación del PicProg haz clic aquí.
507 INICIO
Instrucciones para el PicProg
Programar
El PicProg verifica antes y después de grabar cada dirección. De esta forma se evita
grabar el mismo dato ya grabado, prolongando la vida útil de la Flash Memory. Y luego
realiza la verificación posterior al grabado para asegurarse que el dato ha sido grabado
adecuadamente.
Verificar
Como se dijo en el punto anterior, el PicProg realiza una verificación al grabar cada
dirección, por lo tanto no es necesario ejecutar este procedimiento luego de cada
programación. Esta función es más bien útil cuando no se está seguro de cual es el
programa que ha sido o tiene cargado un determinado micro.
Borrar
Esta función es solamente necesaria cuando el PIC ha sido programado con código de
protección (CP). En estos caso la única forma de regrabar el micro es efectuando un
borrado general. Está función borra la memoria de programa y la de datos.
508 INICIO
Programación Paso por paso
http://www.todorobot.com.ar
510 INICIO