510
1 AUTOR: César Álvarez DISEÑO INSTRUCCIONAL: Marilú Sánchez y César Álvarez Escuela de Ingeniería Eléctrica Contenid o Instruccio nes

Curso PIC

Embed Size (px)

Citation preview

Page 1: Curso PIC

1AUTOR: César ÁlvarezDISEÑO INSTRUCCIONAL:Marilú Sánchez y César Álvarez

Escuela de Ingeniería Eléctrica

Contenido Instrucciones

Page 2: Curso PIC

2

INSTRUCCIONES

• Botón para avanzar..........................• Botón para retroceder......................• Botón para ir al contenido

principal..• Botón para retornar..........................• Para ir a un tema del contenido,

hacer clic en título del tema.............• Para salir, presione la tecla..............

INICIO

Tema..

Esc

Page 3: Curso PIC

3

Equipo necesarioRequerimientos mínimos

• Computador personal Pentium III 128MB RAM, disco duro con 100MB libres, unidad de CD, monitor igual o mayor de 14” de alta resolución y puertos: serial (RS-232) o paralelo (LPT), y conexión a Internet (no indispensable, pero recomendable).

• Sistema operativo Windows 98SE o superior.• Software MS Office 2000 o superior (Power Point). En cuanto a componentes, podrás tratar de ubicar lo

siguiente:• Microcontroladores: PIC16C54JW o PIC16F54, PIC16F84A

y un PIC16F877 o algún otro PIC16F87X.• Leds rojos, verdes y amarillos, resistencias, indicadores

numéricos 7 segmentos, pulsadores, interruptores y lo que te interese utilizar para tus aplicaciones.

• Un programador PICSTART Plus. Si no lo consigues o te parece muy costoso, podrás construir tu propio programador, para ello deberás consultar el anexo 7 después de ver el tema 2.

Además será necesario• Mucha voluntad y dedicar suficiente tiempo para

aprender sobre los microcontroladores PIC.

Page 4: Curso PIC

4

INSTALACIONES

• Instalar el siguiente software, si no lo ha hecho con anterioridad,

para la consulta de artículos en Internet y tener tu sistema de

desarrollo:

– Acrobat Reader

– Win Zip

– MPLAB IDE

Para ello podrá hacer Clic en el programa que deseas instalar o

deberás ingresar a los sitios webs de cada uno de ellos,

buscar el software de instalación, bajarlo gratis, y luego hacer

las instalaciones.

Te recordamos que para hacer las instalaciones, deberás salir del

módulo instruccional al pulsar la tecla y

luego llamar a cada uno de los programas instaladores por

separado, en el orden sugerido.

Esc

Page 5: Curso PIC

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 GAMABÁSICA TEMA 6. MICROCONTROLADOR PIC 16F84A TEMA 7. MICROCONTROLADORES DE LA SERIE PIC16F87X CONCLUSIÓN ANEXOS

Page 6: Curso PIC

6

• 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. INICIO

Page 7: Curso PIC

7

• 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.

INICIO

Page 8: Curso PIC

8

DIVISIÓN DE LOS TEMAS

Los temas están divididos de la siguiente manera:

• Tema 1: Se muestra en forma general el concepto de microcontroladores, cómo han surgido, cuáles son los fabricantes más destacados y se resume las características principales de los microcontroladores PIC. Luego se presenta la arquitectura del microcontrolador PIC16C54 y se describe cada una de las instrucciones de los microcontroladores de la gama básica.

• Tema 2: Se explica detalladamente los pasos para programar cualquier microcontrolador. Se dan ejemplos y se enseñan los primeros pasos para trabajar con el lenguaje Ensamblador y el ambiente de trabajo MPLAB, el cual es una herramienta muy poderosa para trabajar con cualquiera de los microcontroladores PIC que vayas a utilizar en el futuro. Aquí aprenderás: a editar un programa, a ensamblarlo en un código para la memoria del microcontrolador, a simularlo para observar si la lógica del programa está correcta y grabarlo en un microcontrolador. Para ello utilizaremos unos ejemplos sencillos.

• Tema 3: En este aparte, se describe cómo está organizada la memoria de programa y de datos del microcontrolador PIC16C54. Esto te ayudará a comprender cómo programar por medio de los registros de funciones especiales que son los que controlan el programa y algunos circuitos específicos dentro del microcontrolador. Con ello podrás hacer programas un poco más complejos. INICIO

Page 9: Curso PIC

9

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.

• Tema 5: En este aparte aprenderás acerca de otros microcontroladores de la gama básica y las diferencias con el PIC16C54.

• Tema 6: En este tema te iniciarás con la familia de los microcontroladores de la gama media. Aquí verás las diferencias entre el PIC16C54 y el PIC16F84A; encontrarás que estas diferencias consisten en algunas mejoras que te permitirán desarrollar circuitos más versátiles. En el estudio del PIC16F84A te darás cuenta que todo lo que aprendiste en los cuatro primeros temas, lo aplicarás a este tema.

• Tema 7: En este último tema encontrarás información sobre los microcontroladores de la gama media de la serie PIC16F87X, los cuales tienen mucha aplicación en la industria. Estos microcontroladores tienen gran capacidad de funciones, ya que pueden leer señales analógicas, hacer control de potencia por modulación de ancho de pulsos, comunicación serial y otras posibilidades más.

• Anexos: En los anexos encontrarás una guía de referencia para consulta: El glosario, el manejo detallado de instrucciones, las directivas del lenguaje ensamblador, algunas notas de aplicación, etc.

INICIO

Page 10: Curso PIC

10

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.

INICIO

Page 11: Curso PIC

11

Te recomendamos que leas el material detalladamente,

porque así comprenderás mejor el contenido.

Ten presente, que gracias a tu empeño el aprendizaje

dependerá de ti, ya que eres el único responsable directo de

él.

Debes cumplir con las actividades y ejercicios que aparecen

en el material.

Cuando tengas dudas, pide a tu profesor asesor de la

materia una entrevista.

Si eres claro al responder la auto-prueba que aparece en el

material, sabrás cuál ha sido tu avance.

INICIO

Page 12: Curso 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

Generalidades de los Microcontroladores PIC

INICIO

Page 13: Curso PIC

Objetivos Terminales:

• Describir cómo han surgido los microcontroladores a través del tiempo.

• Enumerar algunas aplicacio-nes de los microcontrolado-res.

• Explicar la arquitectura de los microcontroladores de la serie PIC16C54.

• Clasificar las instrucciones de los microcontroladores de la gama básica.

INICIO

Page 14: Curso PIC

14

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.

1.1.- Contexto histórico de los Microcontroladores

INICIO

Page 15: Curso PIC

15

Durante la década de 1960, algunas compañías fabricantes de dispositivos

electrónicos, entre ellas Intel, Texas Instruments y Motorala, decidieron

integrar componentes electrónicos para el desarrollo de circuitos

integrados. Intel marcó una pauta al desarrollar un procesador de 4 bits, el

Intel 4004, después fabricó microprocesadores de 8 bits: el 8008 en 1972, el

8080 en 1973 y el 8085 en 1975. Por su parte en 1971 Texas Instruments

anunció el desarrollo de su primer microcontrolador: El TMS1000, cuya

patente fue dada al ingeniero Gary Boone y a la Texas Instruments. Este

componente fue utilizado inicialmente para la construcción de calculadoras

de 8 dígitos que realizaban las cuatro operaciones básicas: suma, resta,

multiplicación y división.

INICIO

El primer microcontrolador

Al TMS1000, en un principio, se le llamó “computador

en un chip”, constaba de las siguientes partes:

oscilador, unidad central de procesamiento con un juego

de 32 instrucciones, 64 x 4bits de RAM, 1024 bytes de

ROM y puertos de entrada salida.

En los últimos veinte años del siglo XX, muchos

fabricantes se han dedicado a la tarea de desarrollar

una gran diversidad de microcontroladores de 4, 8, 16 y

32 bits, siendo los de 8 y 16 bits, los más populares.

Page 16: Curso PIC

16

En cuanto a los microcontroladores PIC, en 1965, la empresa “General

Instruments” creó una división de microelectrónica, “GI Microelectronics

Division”, que comenzó fabricando memorias. A principios de los años

1970 diseñó el microprocesador de 16 bits CP1600, razonablemente

bueno, pero que no manejaba eficazmente las entradas y salidas. Para

solventar este problema, en 1975 diseñó un circuito integrado destinado

a controlar los puertos: el PIC (Peripheral Interface Controller). Se

trataba de un controlador rápido pero limitado y con pocas

instrucciones, pues iba a trabajar en combinación con el

microprocesador CP1600.

La arquitectura del PIC, que se comercializó en 1975, era

sustancialmente la misma que la de los actuales modelos PIC16C5X. En

aquel momento se fabricaba con tecnología NMOS y el producto sólo se

ofrecía con memoria de lectura solamente (ROM) y con un pequeño pero

robusto conjunto de instrucciones.

La década de los años 1980 no fue buena para GI, que tuvo que

reestructurar sus negocios, concentrando sus actividades en los

semiconductores de potencia.

INICIO

Surgimiento de los PICs

Page 17: Curso PIC

17

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. INICIO

Page 18: Curso PIC

18

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.

INICIO

Page 19: Curso PIC

19

La diversidad de modelos, abarca los microcontroladores básicos, los cuales

tienen: Unidad central de procesamiento, memoria de programa (PROM,

EPROM o FLASH), memoria de datos (RAM), puertos y temporizadores. Hay

otros, más avanzados, que ofrecen, además de los elementos mencionados

anteriormente, algunos de los circuitos que se nombran a continuación:

Manejador de interrupciones, convertidores A/D, convertidores D/A,

memoria EEPROM y FLASH (que pueden mantener sus datos después de

quitar la alimentación, sin añadir un equipo externo), moduladores de ancho

de pulso, sensores de temperatura, comparadores, interfaces seriales,

entre otros.

INICIO

Page 20: Curso PIC

20

Es un computador completo dedicado, aunque con limitadas

prestaciones, que está contenido en un circuito integrado y se destina

a gobernar una sola tarea.

Son circuitos integrados programables que constan básicamente de

una unidad central de procesamiento (CPU), una memoria de

programa, una memoria de datos, puertos de entrada y salida,

temporizador y circuitos de inicialización y reloj.

1.2.- Definiciones de Microcontrolador

INICIO

Page 21: Curso PIC

21

Los microcontroladores tienen funciones específicas, que se realizan de

acuerdo al programa grabado y a las conexiones de las líneas de entrada

y salida. Estas líneas se conectan a interfaces que manejan elementos

de lectura y de acción final en un equipo o sistema a controlar.

1.3.- Funciones de los Microcontroladores

INICIO

AUTOR: César ÁlvarezDISEÑO INSTRUCCIONAL:M. Sánchez y C. Álvarez

100

0

20

40

60

80

Microcontrolador

Interfaces

Page 22: Curso PIC

22

Los microcontroladores tienen una

gran cantidad de aplicaciones;

prácticamente cualquier aparato

electrónico que se fabrica en la

actualidad utiliza al menos un

microcontrolador.

Las aplicaciones de éstos pueden

desglosarse en áreas de: computación,

comunicaciones, industria, automoción

y electrodomésticos.

1.4.- Aplicaciones de los Microcontroladores

INICIO

Page 23: Curso PIC

1.5.- Algunos Fabricantes de Microcontroladores

Fabricante Microcontroladores Capacidad de MemoriaIntel MCS51, 151, 251 8KB - 16KB ROM, 256B - 1KB RAM

Siemens C540U (8051) 4KB - 8KB ROM, 256B RAMDallas, Atmel 8051-52 2KB - 16KB ROM, 256B - 16KB RAM

Motorola 68HC0568HC0868HC11

0 - 16KB ROM, 176B – 512B RAM16KB - 32KB ROM, 512B - 1KB RAM4KB - 32KB ROM, 256B - 2KB RAM

Texas Instruments TMS370 0KB - 64KB ROM, 128B - 2KB RAMNEC mPD7890xxx

mPD780xxx

2KB - 24KB ROM, 128B – 512B RAM8KB - 60KB ROM, 256B - 2KB RAM

Toshiba TLCS-870TLCS-90

4KB - 60KB ROM, 256B - 2KB RAM0 - 60KB ROM, 0 - 2KB RAM

Hitachi H8/300 8KB- 60KB ROM, 256B - 2KB RAM

SGS-THOMSON(ST-Micro)

ST-6ST-7ST-9

1KB- 8KB ROM, 64B – 320B RAM4KB- 60KB ROM, 256B - 2KB RAM0KB-128KB ROM, 512B - 4KB RAM

NationalSemiconductor

COP820, 840, 880C, 912COP884xx, 888xx

1KB- 4KB ROM, 64B – 128B RAM4KB-32KB ROM, 128B –1088B RAM

Zilog Z8 0,5KB - 32KB ROM, 61B – 237B RAMMicrochip 16Cxx

18Fxx512X12 - 4KX14 ROM, 25B –192B RAM2K - 32Kx16 ROM, 232B – 2KB RAM

INICIO

Page 24: Curso PIC

Las compañías de mayor producción de microcontroladores de 8bits 1990 - 2002

INICIO

Page 25: Curso PIC

25

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.

• Suficiente capacidad de memoria para los programas y datos.

• Líneas de entrada y salida suficientes para la aplicación a desarrollar.

• Que presente rapidez en la ejecución de los programas.

• Sencillez en el montaje.• Sistema de soporte para la

grabación.• Diversidad de productos.• Disponibilidad en el mercado y bajo

costo.

• Debe seleccionarse a aquellos que ofrezcan facilidad de programación y códigos de programación eficientes.

• Programas de simulación de fácil uso.

• Soporte de lenguajes de programación de alto nivel.

• Compatibilidad con los sistemas operativos más comunes.

• Disponibilidad de programas y librerías de aplicaciones.

• Disponibilidad de herramientas de desarrollo.

1.6.- Consideraciones a tomar antes de seleccionar un Microcontrolador:

INICIO

En este módulo instruccional hemos seleccionado a los microcontroladores PIC de Microchip, ya que ofrecen una gran variedad de productos para muchas aplicaciones.

Page 26: Curso PIC

26

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. INICIO

Page 27: Curso PIC

27

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.

PIC Memoria de Características Principales Series Programa

PIC 12C5XX 0,5 - 1K x 12 Opción EEPROM, Velocidad: 1 a 2 MIPS PIC 12C6XX 2K x 14 8 Terminales, Oscilador incluido, A/D C

PIC 12F6XX 0,5 - 1K x 14 A/D C, EEPROM, FLASH, Oscila. interno

Velocidad: 5 MIPS, 8 Terminales.PIC 14C000 4K x 14 A/D C 16 Bits, DA/C, Lector de temperat. 28 terminales, manejo de Interrupciones

PIC 16C5X 0,5K -2K x 12 Velocidad: 5 MIPS, Disponibilidad en 14, 18 y 28 terminales

PIC 16CXXX 0,5K -8K x 14 Comparador Digital y analógico, Interrpc. Modulador de ancho de pulso (PWM), Interfaz serial (USART), A/D C , Manejador LCD, variedad de tamaños.

1.7.- Familia de los Microcontroladores PIC

INICIO

Page 28: Curso PIC

28 INICIO

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.

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.

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 eficienterfPIC12C5XX 1K x 12 Similar a la serie PIC 12XXX, pero incluye rfPIC12F6XX 1K x 14 un transmisor de radio frecuencia UHF. dsPIC30FXXXX 4K - 48K x 24 A/D C de 12bits, PWM, EEPROM, FLASH(Procesadores de Manejo de Interrupciones, USART, I2C,señales de 16bis) CAN, Comparador Digital, Vel: 30 MIPS,

18 a 80 Terminales. Conjunto de 84 instruc.

Page 29: Curso PIC

29

Facilita la labor de depuración de programas.

Permite el desarrollo de aplicaciones en poco tiempo.

Todas las instrucciones son sencillas y presentan un código eficiente,

lo que permite reducir un programa a la mitad con respecto a otros

microcontroladores de 8 bits.

Circuito de inicialización incluido.

Presenta cuatro configuraciones programables para el oscilador.

Modo “Reposo” (sleep) para el ahorro de energía.

Temporizador “perro guardián” (Watchdog), para prevenir que un

programa se “cuelgue”.

Protección de programas.

1.8.- Principales características del PIC16C54

INICIO

Page 30: Curso PIC

30

El PIC16C54 es un microcontrolador de 8 bits de tecnología CMOS.

Este microcontrolador tiene una arquitectura RISC con un conjunto de

apenas 33 instrucciones de una sola palabra (12 bits), lo cual reduce

esfuerzo en memorizar los códigos de instrucción.

1.9.- Descripción del Microcontrolador PIC16C54

INICIO

Page 31: Curso PIC

31

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.

El PIC16C54 utiliza códigos de instrucción de 12 bits, esto permite combinar instrucciones de un ciclo donde se incluye el acceso directo a la memoria de datos; además, se cuenta con una estructura de entubamiento en la cual, mientras se ejecuta una instrucción, se prepara la siguiente, es decir, significa un ahorro en el tiempo de ejecución de cada programa, en donde se necesita apenas cuatro períodos del oscilador por cada ciclo de ejecución de una instrucción. Por ejemplo: para un oscilador con una frecuencia igual a 20 MHz, el período del oscilador es de 50nSeg; esto significa que el ciclo de una instrucción tarda 4 X 50nSeg, es decir, 200 nSeg. Las instrucciones en donde se ejecutan saltos demoran dos ciclos, ya que la instrucción que se prepara es la de la siguiente línea del programa, y al realizar el salto se va a una instrucción que está ubicada en otra línea del programa.

A continuación se presenta la arquitectura del microcontrolador PIC 16C54:

1.10.- Arquitectura del Microcontrolador PIC16C54

INICIO

Page 32: Curso PIC

32

Diagrama de Bloques del Microcontrolador PIC16C54

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOS

(SRAM)25 BYTES

F

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

5-7

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 33: Curso PIC

33

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.

INICIO

Page 34: Curso PIC

34

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.

INICIO

Page 35: Curso PIC

35

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 36: Curso PIC

36

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 37: Curso PIC

37

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 38: Curso PIC

38

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 39: Curso PIC

39

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 40: Curso PIC

40

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 41: Curso PIC

41

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 42: Curso PIC

42

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

FRAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 43: Curso PIC

43

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 44: Curso PIC

44

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 45: Curso PIC

45

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 46: Curso PIC

46

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 47: Curso PIC

47

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 48: Curso PIC

48

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 49: Curso PIC

49

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 50: Curso PIC

50

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 51: Curso PIC

51

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 52: Curso PIC

52

ENTRADATOCKI

RA3 RA0

TRIS 6TRISB PUERTO B

8 8

8

RB7 RB0

9-11EPROM-ROM 512x12 PC

9-11

REGISTRO DEINSTRUCCIONES

DECODIFICADOR DE

INSTRUCCIONES

PILA 1PILA 2

DIRECCIÓN DIRECTA

TIEMPO DEESPERA DEL

WDT

ESCALAMIENTODE TMRO Y WDT

TEMPORIZADORWDT

PALABRA DE CONFIGURACIÓN

INHABILITA

PROTECCIÓNDE CODIGOS

TIPO DEOSCILAD.

OSCILADOR,TIEMPO YCONTROL

OSC1OSC2 MCLH

REG. OPTIONSLEEP

OPTIONREGISTROS DEPROPOSITOSGENERALES

(SRAM)25 BYTES

RAM DEDIRECCIÓN DIRECTA

W

UNIDADLÓGICA Y

ARITMÉTICA

TMRO

BUS DE DATOS

TRIS 5 TRISA PUERTO A

4 4

4

STATUS

9

8

12

12

8

2

8

6

5

8

8

INICIO

Page 53: Curso PIC

53

Diagrama de conexiones del Microcontrolador PIC16C54

A continuación, se presenta la interconexión del los PIC 16C54

Cada conexión tiene su propia función específica. Haz clic en el terminal deseado para encontrar la función correspondiente en el glosario.

INICIO

PIC

16C54

Page 54: Curso PIC

54

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.

INICIO

Page 55: Curso PIC

55

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”.

El lenguaje que se utiliza comúnmente para trabajar con microcontroladores es el lenguaje Ensamblador, que es un lenguaje de bajo nivel. Existen otros lenguajes, de alto nivel, que también se pueden utilizar para programar estos componentes, tales como los lenguajes “C” y “Basic”. El lenguaje Ensamblador es básicamente un lenguaje de máquina, es decir, que las instrucciones que emplea se codifican directamente para ser grabadas en la memoria del programa del microcontrolador.

Para facilitar un poco el entendimiento del lenguaje Ensamblador de un microcontrolador o un microprocesador, las instrucciones se presentan con códigos, que representan abreviaciones, y a continuación, los operadores que van a realizar la instrucción. El lenguaje ensamblador permite colocar, de manera opcional, algunos comentarios, que se reconocerán por ser expresiones que están después de “;” en una línea del programa. Otra opción que nos permite el ensamblador, consiste en colocar etiquetas o encabezados, que indican posiciones en la memoria de programa escritas en palabras de uso común.

INICIO

Page 56: Curso PIC

56

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.

INICIO

Page 57: Curso PIC

57

Fíjate en lo siguiente:

El microcontrolador PIC16C54 utiliza palabras de 12 bits divididas en un código de operación que especifica el tipo de instrucción y los registros en donde se va a ejecutar la operación y en qué lugar se va a colocar el resultado. Esto te permite utilizar instrucciones que en el microcontrolador se codifican en una sola palabra. Eso te garantiza que tu programa en el microcontrolador ocupa igual número de instrucciones como las que empleaste en el lenguaje ensamblador. Esto no ocurre con la mayoría de los otros microcontroladores.

El número de instrucciones que presenta el PIC16C54, es de apenas 33. El formato de estas instrucciones, permite tratar a la memoria de datos, como si fueran registros de trabajo, lo cual implica un ahorro tanto en la codificación de la instrucción, como en el tiempo de ejecución en la misma.

Las instrucciones pueden hacer operaciones entre registros de un byte, para lo cual se utiliza el apuntador de direcciones de registros f y el registro de trabajo W; pueden ejecutarse entre operaciones con valores constantes y el registro de trabajo W; también pueden ejecutarse operaciones orientadas a bits, para esto se utiliza la variable b, que indica la posición del bit en el registro apuntado por f.

En las instrucciones orientadas a bytes, f es un valor que representa la dirección de un registro de asignación y d representa el destino, que puede ser el mismo registro apuntado por f o el registro W. Los registros señalados por f, son uno de los 32 lugares de memoria a los que puede acceder la instrucción, por medio de los 5 bits del código especificado para ello.

INICIO

Page 58: Curso PIC

58

En resumen

• 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.

INICIO

Page 59: Curso PIC

59

La designación del destino, que se hace por medio de d, indicará si el resultado se llevará al registro de trabajo W, cuando d=W, o al registro de dirección f, cuando d=f. Recuerda que las operaciones lógicas y aritméticas se hacen en código binario, y por lo general se utiliza el código hexadecimal en los valores asignados en el lenguaje ensamblador.

Por ejemplo, la instrucción:ADDWF f,dIndicará 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 nocolocas ningún destino, el ensambladorguardará el resultado en el registro de dirección f y te dará un mensaje deadvertencia.

ADDWF f,dIndicará 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 nocolocas ningún destino, el ensambladorguardará el resultado en el registro de dirección f y te dará un mensaje deadvertencia.

Operaciones entre W y f

Digamos que la instrucción:

ADDWF 12,W ;Suma en binario el contenido del registro ;W con el contenido del registro 12 y el ;resultado se guardará en el registro W

INICIO

Código de la instrucción

Registro

Destino

Page 60: Curso PIC

60

GOTO K ; (Ejemplo GOTO LAZO)

Indica que el programa saltará a la posición indicada por el valor K, donde K puede ser un número de 9 bits en este caso, o una palabra clave o etiqueta que indica una posición en la memoria de programa.

Para las instrucciones orientadas a bits, b representa la posición de un bit ubicado en el registro f. Por ejemplo, la instrucción:

BCF f,b

Indicará una instrucción (Bit Clear) que borrará el bit en la posición b (0 a 7) del registro de dirección f (0 a 31).

IORLW K

Donde K es un valor constante de 8 bits, indicará que se realizará la función (Inclusive) OR entre los bits del Literal K y los del registro W. El resultado irá a W.Para instrucciones con literales y control, K representa una constante de 8 ó 9 bits, o un valor literal indicado por medio de una palabra clave o etiqueta. Un ejemplo:

IORLW B’10010110’ ; 10010110 es un número ; en binario

Operaciones con literales y bits

INICIO

Page 61: Curso PIC

61

INSTRUCCIONES DEL LENGUAJE ENSAMBLADOR

Clasificación de las instrucciones del microcontrolador PIC16C54:

– Instrucciones de transferencia de datos, las cuales mueven datos de un registro a otro (los registros involucrados son el W y un registro apuntado por f), o un dato constante en la memoria del programa al registro W.

– Instrucciones aritméticas, las cuales ejecutan operaciones aritméticas binarias entre W y un registro de dirección f.

– Instrucciones lógicas, las cuales ejecutan operaciones lógicas bit a bit entre W y un registro de dirección f, o entre W y un valor constante.

– Instrucciones de borrado, las cuales colocan el valor cero a un registro.– Instrucciones de rotación, las cuales permiten rodar el contenido de un registro

de dirección f, un bit hacia la derecha o hacia la izquierda. Estas instrucciones se utilizan para efectuar multiplicaciones y divisiones aritméticas binarias. Entre estas instrucciones también existe una que permite intercambiar grupos de 4 bits, para el manejo de dígitos.

– Instrucciones de manejo de bits, las cuales pueden colocar en “0” o en “1” un bit determinado de un registro de dirección f.

– Instrucciones de saltos, las cuales permiten la posibilidad de cambiar la dirección de ejecución de un programa de manera incondicional o según la evaluación de un bit o si un registro es igual a cero.

– Instrucciones de control, las cuales permiten hacer algunas configuraciones de hardware en el microcontrolador.

INICIO

Page 62: Curso PIC

62

INSTRUCCIONES DE TRANSFERENCIA DE DATOS

MOVF f,d ; Mueve el contenido de f hacia el destino d (W o f)

MOVLW K ; Se asigna a W el valor K

MOVWF f ; Mueve el contenido de W hacia el registro f

INSTRUCCIONES ARITMÉTICAS

ADDWF f,d ; Suma W con f (y guarda el resultado en d: W o f)

SUBWF f,d ; Resta f menos W

DECF f,d ; Decremento en 1 el contenido de f

INCF f,d ; Incremento en 1 en contenido de f

Instrucciones de transferencia de datos y aritméticas

INICIO

Page 63: Curso PIC

63

INSTRUCCIONES LÓGICAS

ANDLW K ; And de los bits de W con los de K y guarda en W

ANDWF f,d ; And de los bits del registro W con los de f

COMF f,d ; Complemento en uno el contenido del registro f

IORLW K ; Or de los bits de W con los de K y guarda en W

IORWF f,d ; Or de los bits del registro W con los de f

XORLW K ; Exor de los bits de W con los de K y guarda en W

XORWF f,d ; Exor de los bits del registro W con los de fINSTRUCCIONES DE BORRADOCLRF f ; Borra el contenido del registro f

CLRW W ; Borra el contenido del registro W

Instrucciones lógicas y de borrado

INICIO

Page 64: Curso PIC

64

INSTRUCCIONES DE ROTACIÓN

RLF f,d ; Rotación de f hacia la izquierda a través de Carry

RRF f,d ; Rotación de f hacia la derecha a través de Carry

SWAPF f,d ; Intercambia nibles (grupo de 4 bits) en el registro f

INSTRUCCIONES DE MANEJO DE BITS

BCF f,b ; Pone en 0 bit b del registro f

BSF f,b ; Pone en 1 bit b del registro f

Instrucciones de rotación y manejo de bits

INICIO

Page 65: Curso PIC

65

INSTRUCCIONES DE SALTO (Si se ejecuta el salto, la instrucción demora dos ciclos)

BTFSC f,b ; Si el bit b de f es cero, salta una instrucción

BTFSS f,b ; Si el bit b de f es uno, salta una instrucción

CALL K ; Llama a subrutina en la dirección K

GOTO K ; El programa va a la dirección K

DECFSZ f,d ; Decremento de f y si es cero, salta una instrucción

INCFSZ f,d ; Incremento de f y si es cero, salta una instrucción

RETLW K ; Retorno de subrutina, W toma el valor de K

Instrucciones de Salto

INICIO

Page 66: Curso PIC

66

INSTRUCCIONES DE CONTROL

CLRWDT ; Borra temporizador “Perro guardián” (WDT)

SLEEP ; Inhabilita el procesador, (Reposo)

NOP ; No ejecuta operación

OPTION ; El contenido de W se carga al registro OPTION, ; que se utiliza para la configuración de los ; temporizadores y el escalamiento.

TRIS f ; Contenido de W va a TRIS (programación puertos), ; f representa uno de los puertos A o B (5 ó 6). ; Un 1 en el bit de programación, configura la línea ; correspondiente al puerto como entrada; un 0 lo ; configura como línea de salida.

Instrucciones de Control

Nota: Si deseas ver el significado en detalle de todas las instrucciones de los microcontroladores PIC de las gamas básica y media, puedes consultar el anexo 2.

INICIO

Page 67: Curso PIC

67

ACTIVIDADES A REALIZAR

En este aparte, se pide que tú desarrolles las actividades que a

continuación se presentan, para comprender mejor el tema siguiente.

1.- Define con tus propias palabras los siguientes términos:

a.- ¿Qué es un Microcontrolador?

b.- ¿Cómo funciona un microcontrolador?

c.- ¿En cuáles aplicaciones se podría utilizar un microcontrolador?

d.- Describe las principales características de los microcontroladores

PIC.

2.- Dibuja la arquitectura de un microcontrolador PIC16C54.

3.- Haz una clasificación de las instrucciones de los microcontroladores

PIC de la gama básica y relaciona el significado de cada código de

operación con la instrucción que ejecuta con sus operadores.

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.

INICIO

Page 68: Curso PIC

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 sumar2.12.- Resta de dos números

TEMA 2Programación del PIC 16C54

Contenido

INICIO

Page 69: Curso PIC

69

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.

TEMA II: Programación del microcontrolador PIC16C54

INICIO

Page 70: Curso PIC

70

La programación es el modo de organización de las instrucciones que va a realizar el microcontrolador para cumplir una o más funciones específicas.

Para programar los microcontroladores es importante que utilices el lenguaje ensamblador, ya que es el más parecido al lenguaje del procesador, y esto te ayudará a entender mejor cómo trabaja cada instrucción. Existe también la posibilidad de utilizar los programas en lenguaje “C”, “Basic” o algún otro de alto nivel.

Queremos convencerte que esta labor no es difícil, especialmente si ya has programado en cualquier otro lenguaje, recuerda que programar es parecido a hablar o escribir en el idioma que empleas usualmente para comunicarte.

Para hacer un diseño en el que se utilicen circuitos integrados programables, será necesario emplear herramientas que ayuden a la puesta a punto del Hardware y del Software.

2.1.- Programación de Microcontroladores

INICIO

Page 71: Curso PIC

71

Debes tener en cuenta que, además de los compiladores o intérpretes de los lenguajes usados, es muy interesante disponer de simuladores de programas, que consisten en un software que ejecuta las instrucciones que representan, en una computadora, el comportamiento interno del procesador y el estado de las líneas de entrada y salida.

Recuerda que es indispensable el grabador, encargado de escribir el programa en la memoria del microcontrolador. Existen grabadores muy completos capaces de trabajar con muchos modelos de diferentes familias. Otra herramienta de desarrollo, es el emulador en circuito, que consiste en un complejo dispositivo físico que, controlada por un programador desde tu computadora personal, dispone de un conector con cables que van hacia la computadora y que tiene los mismos terminales que el microcontrolador que trata de imitar. El 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 INICIO

Page 72: Curso PIC

72

Después de seleccionar un microcontrolador para una aplicación

específica, para programarlo será necesario:

Después de cada fase, se

deberá corregir los

errores hasta que todo

funcione bien.

Ensamblar el programa

Simular el programa

Grabar el programa en el

microcontrolador

Hacer pruebas en el circuito

Editar el programa

Representar el circuito

2.2.- Pasos para programar un Microcontrolador:

INICIO

Page 73: Curso PIC

73

2.3.- Representación del circuito. Un ejemplo

Para representar el circuito, se colocará el siguiente ejemplo:

Se desea hacer un circuito con cuatro interruptores de entrada y ocho indicadores a la salida, de los cuales cuatro serán de color rojo, y cuatro serán de color verde. Cada interruptor estará asociado a dos indicadores de diferente color, y al accionarlo, deberá cambiar el encendido, de uno a otro. Cuando un interruptor esté abierto, deberá encender el indicador de color rojo asociado a éste. En el caso de estar cerrado encenderá el indicador de color verde.

Solución:

De acuerdo al problema planteado, deberás contestar estas preguntas:

¿Cuántas líneas de entrada y salida serán necesarias para desarrollar el circuito?

¿Cuáles serán conectadas como entradas y cuáles se conectarán como salidas?

¿Qué tipo de interfaz se colocará para las entradas?

¿Qué tipo de interfaz se colocará para las salidas?

¿El PIC 16C54 será apropiado para este circuito?

Antes de pasar a la siguiente página, recomendamos que tú respondas estas preguntas. Si lo deseas, podrás consultar con las páginas anteriores de este módulo instruccional.

INICIO

Page 74: Curso PIC

74

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)

INICIO

Page 75: Curso PIC

75

Selección del Microcontrolador

Según lo establecido anteriormente, el microcontrolador PIC16C54 es adecuado para esta aplicación, ya que tiene doce líneas disponibles para los puertos de entrada-salida. Si en el mercado local no consigues el PIC16C54, podrías utilizar el PIC16F54, el PIC16F84A o algún otro microcontrolador PIC de 18 terminales que pertenezca a la gama básica o media, ya que dispone de doce terminales de entrada-salida, y los programas que se elaboran con los PIC16C54, funcionan con los otros de la gama básica o media; las conexiones externas entre ellos también son compatibles. A continuación se presenta el circuito a utilizar, en donde se escogerá al puerto A como entrada (4 bits) y el puerto B como salida (8 bits).

VddPIC

16C54

INICIO

Page 76: Curso PIC

76

2.4.- Edición del Programacon el MPLAB

Alt

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: y (Tab)

La primera vez que se abre este programa, aparecerá la siguiente pantalla: Llamada:

Microchip

MPLAB IDE

INICIO

Page 77: Curso PIC

77

Familiarización con el MPLAB

Después de abrir el MPLAB, ya podrás comenzar a editar tu programa en el espacio donde dice “Untiteled Work space”. Si quieres trabajar con mayor comodidad, podrás ampliar esta ventana.

Los recursos que se ofrecen con este software son bastante variados, es por esto que en este aparte se mostrará sólo algunos de los comandos necesarios para iniciar una edición de un programa.

Algo que deberás tomar en cuenta, es el ser consistente con el dispositivo que vas a usar. Para ello, deberás seleccionar el microcontrolador en este ambiente de trabajo; en este caso el PIC16C54 (o el microcontrolador que encontraste en el mercado local). Para esto se irá a la barra de menú, y se escogerá en “Configure” y luego “Select Device...” Si el MPLAB se está utilizando por primera vez, en pantalla aparecerá la siguiente ventana:

INICIO

Page 78: Curso PIC

78

Opciones del MPLAB

Si vas a utilizar el PIC 16C54, se deberá cambiar a:

Nótese el cambio al PIC16C54. Luego se seleccionará en “OK”. Después de hacer esto, el MPLAB estará listo para trabajar con el PIC16C54. Si se va a trabajar con otro microcontrolador, éste se seleccionará en “Device”. Al regresar al ambiente de trabajo, en la parte inferior aparecerá el tipo de microcontrolador que se va a emplear, el cual deberá ser igual al que se utilizará en el circuito, o de lo contrario podrá haber problemas en el momento de ensamblar, cuando se realice la simulación o al grabar el programa.

1

2

INICIO

Page 79: Curso PIC

79

Es importante documentar bien el programa

En un programa ensamblador, es muy importante hacer una buena documentación; en lo posible, hay que colocar los comentarios que sean necesarios para comprender bien qué es lo que se está haciendo. Los comentarios se reconocerán por el símbolo “;” tal como se puede ver en la figura de la página siguiente, en donde se hace una breve descripción del programa que se va a realizar.

Te recalcamos la importancia de colocar los comentarios, ya que los que comienzan a trabajar en esto, consideran innecesario colocarlos. Sin embargo, un tiempo después, a la hora de analizar el programa no recuerdan qué fue lo que hicieron, y prácticamente tienen que comenzar desde cero para tratar de entender el programa.

Antes de comenzar a editar el programa, te recomendamos que revises, en el tema 1, en la parte de las Instrucciones del Lenguaje Ensamblador, lo que hacen las siguientes instrucciones, o sino accede a las explicaciones de ellas, por medio del hipervínculo asociado:

MOVLW K GOTO K

TRIS f BSF f,b

CLRW BCF f,b

BTFSS f,b BTFSC f,b

En la página siguiente encontrarás la primera parte de la edición del programa. Fíjate bien en los comentarios escritos.

INICIO

Page 80: Curso PIC

80

Comentarios

INICIO

Page 81: Curso PIC

81

Los archivos “INCLUDE”

En el ejemplo de la página anterior, se puede observar una parte inicial compuesta de comentarios, los cuales se colocan para describir el programa. Después se observa la directiva INCLUDE “P16C5X.INC”. Esta directiva, básicamente se utiliza para incluir un archivo que asigna valores numéricos a cada uno de los registros de funciones especiales y los bits del registro STATUS. Esto nos facilitará la elaboración del programa, es decir, que para emplear, por ejemplo, una instrucción MOVF 5,0; el programa entenderá que el contenido del puerto A, que está en la dirección 5, pasará al registro W. Sin embargo, será mucho más fácil comprender la instrucción, si se escribiera de esta manera: MOVF PORTA, W´. Esta última instrucción se aceptará, si previamente se definió “PORTA” y ”W”, y esto se puede hacer con la directiva INCLUDE.

Si deseas más información acerca de las directivas del lenguaje ensamblador, puedes consultar el anexo 3 de este módulo instruccional.

En el archivo P16C5X.INC, está la asignación de los registros de funciones especiales (tal como PORTA y W) de los microcontroladores de la gama básica. En el caso de no utilizar este archivo, tendríamos que asignar nosotros mismos los registros en el programa. Es decir, que antes de comenzar el programa deberíamos escribir lo siguiente:PCL EQU H'0002'

STATUS EQU H'0003'FSR EQU H'0004'PORTA EQU H'0005'PORTB EQU H'0006'

W EQU H'0000'F EQU H'0001‘INDF EQU H'0000'TMR0 EQU H'0001'

INICIO

Page 82: Curso PIC

82

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ónHexadecimal 0B / 0BH / H’0B’ / 0x0BBinaria 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:

INICIO

Page 83: Curso PIC

83

Comentarios

Etiquetas

Instrucciones

Operadores

Colu. 1 Colu. 2 Colu. 3 Columna 4

División por columnas

INICIO

Page 84: Curso PIC

84

Comienzo del Programa

Puede verse en la pantalla anterior, la directiva ORG (Origen) poco después de la directiva INCLUDE. Élla asigna la dirección en la cual va a comenzar una sección del programa. En este caso, el programa comienza en la dirección 0 de la memoria EPROM del microcontrolador.

Al comenzar el programa, se debe preparar los puertos y registros que se van a utilizar. En este caso, se asignará la programación de los puertos, tal como se puede observar a partir de la etiqueta “PREPAR” en el programa de la página anterior.

En la sección siguiente se presenta el comienzo el programa. Se verá cómo se realiza el análisis para un “grupo” de una sola entrada del puerto A y dos salidas del puerto B.

INICIO

Page 85: Curso PIC

85

Trata de completar lo que debe ir en las secciones: GRUPO1, GRUPO2 y GRUPO3. Es importante que cada etiqueta se escriba en una sola palabra, sin espacio, es decir que sería incorrecto colocar, por ejemplo, GRUPO 1.

Recuerda que aquí se utiliza la instrucción BTFSS PORTA,0; la cual indica que se va a hacer un test del bit 0 del puerto A, o sea RA0, (Bit Test de F, Salta si es 1). Si el resultado es 0, ejecutará la instrucción siguiente GOTO VERD0ON, la cual hará que el programa salte a la posición VERD0ON, en donde se apagará el led rojo (BCF PORTB,0; que hará RB0=0) y encenderá el led verde (BSF PORTB,1; que hará RB1=1). Si al hacer el test de RA0, éste es igual a 1, el interruptor estará abierto; en el programa se indica que debe saltar una línea, por lo tanto se pasará a la línea ROJO0ON, en donde se apagará el led verde (BCF PORTB,1), y se encenderá el rojo.

Las direcciones que se le asignan a las etiquetas, se hacen de manera automática. Por ejemplo, la etiqueta PREPAR, que está ubicada después de los comentarios iniciales, tendrá asignada la dirección 0, ya que se ubica inmediatamente después de la directiva ORG 0.

La etiqueta INICIO, se ubicará entonces en la dirección 4, ya que está cuatro instrucciones por debajo de PREPAR. Recuerda que ni los comentarios ni las directivas cuentan como instrucciones del programa en el microcontrolador.

En la página siguiente, podrás observar la parte final de este programa, que sirve como una de las soluciones para activar los cuatro interruptores que manejan los ocho leds.

Si no estuvo claro el comienzo, lee esto detenidamente

INICIO

Page 86: Curso PIC

86

Continuación del programa

INICIO

Page 87: Curso PIC

87

2.5.- Ensamblaje del Programa

Después de editar el programa, o en los momentos que creas convenientes, deberás guardar tu programa con un nombre luego un punto (.) y después “asm”: “nombre.asm”. Te recomendamos que abras un subdirectorio en el directorio “Mis documentos” y guardes allí los programas elaborados. Cuando hayas editado todo, procederás a ensamblar el programa. El programa que se presentó anteriormente, no presenta errores de codificación. Sin embargo, tú puedes intentar editarlo, y luego podrás proceder a ensamblarlo o codificarlo. Al ensamblar un programa, se generará un archivo objeto codificado en binario o hexadecimal, el cual será el mismo que se grabará en la memoria del microcontrolador; este archivo tendrá como nombre, el mismo del programa editado, pero con extensión .hex. Por ejemplo si al programa anterior le colocaste por nombre conmutador.asm, el archivo generado al compilar se llamará conmutador.hex. Por otro lado se generará un archivo de listado con todos los símbolos utilizados (conmutador.lst) y un archivo con los errores (conmutador.err),

INICIO

Page 88: Curso PIC

88

Ensamblando el archivo editado

Para ensamblar un archivo, deberás seleccionar en Project y luego Quickbuilt nombre.asm:

INICIO

Page 89: Curso PIC

89

Resultados del ensamblaje

Si al final aparece la frase: “BUILD SUSCCEEDED”, significa Que ha sido exitosa la compilación.

INICIO

Page 90: Curso PIC

90

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:

INICIO

Page 91: Curso PIC

91

Listado de errores

Al tratar de ensamblar nuevamente, nos encontraremos con un error, tal como lo muestra la siguiente figura:

INICIO

Al aparecer la frase “BUILD FAILED”, indica que no se pudo realizar el ensambalje, debido a que hay uno o más errores en el programa.

Page 92: Curso PIC

92

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.

El error consiste en que no se ha definido previamente “PUERTOA”. Para solucionar esto, se deberá colocar la variable PORTA, definida en P16C5X.INC o escribir previamente la directiva PUERTOA EQU 5, para indicar que el puerto A corresponde a la dirección 5 de la memoria de registros o RAM.

Si hay más errores en el programa, el procedimiento para hallarlos es el mismo. En la edición de errores, se hace doble clic en la línea correspondiente, donde aparece el error, luego te indicará dónde se produjo éste en el programa fuente.

Trata de interpretar los mensajes dados, y corrige los errores en el programa. INICIO

Indicación de la línea con error

Page 93: Curso PIC

93

2.6.- Simulación

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.

¿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”:

INICIO

Page 94: Curso PIC

94

Ventanas para verificar el programa

INICIO

Registros

Memoria de programa

Registro de funciones especiales

Page 95: Curso PIC

95

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.

INICIO

Page 96: Curso PIC

96

Para asignar cada entrada

Para asignar cada entrada, se hará lo siguiente:

1. Presionar el botón “Add Row”

2. Presionar uno de los rectángulos blancos de la primera fila. Aparecerá:

INICIO

Page 97: Curso PIC

97

Explicación de los estímulos

INICIO

Los terminales seleccionados y el tipo de acción, se podrán escoger en cada fila:

Type. Indica si la entrada es sincrónica o asincrónica con respecto a los pulsos del reloj. Por lo general, para entradas externas se fija en “Asynch” (Asincrónico).

Enable. Se utiliza para generar la acción en el terminal de entrada.

Pin. Indica el terminal del microcontrolador que se va a utilizar para generar el estímulo: RA0, RA1, etc. Al presionar la flecha adyacente encontrarás las opciones.

Action. Determina el tipo de entrada que se va a colocar: High (cambia a 1), Low (cambia a cero), Toggle (cambia al estado opuesto cada vez que se presiona), Pulse (pulso que cambia momentáneamente al estado opuesto y luego vuelve al inicial).

High cicles. Número de ciclos en que la entrada se mantiene en uno, al aplicar un estímulo sincrónico.

Low cicles. Número de ciclos en que la entrada se mantiene en cero, al aplicar un estímulo sincrónico.

PC. Dirección numérica o símbolo en el cual ocurrirá el estímulo.

Invert. Si el símbolo de chequeo está activo, indica que se invertirá el pulso si se está utilizando un estímulo sincrónico.

Comments. Puedes indicar un comentario relacionado con el estímulo.

Page 98: Curso PIC

98

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”:

INICIO

Page 99: Curso PIC

99

Ejecución del programa

Para ejecutar el programa, podrás seleccionar inicialmente la velocidad del microcontrolador, los puntos de parada y las opciones de trazado en “Debugger” y luego en “Settings”.Si no has seleccionado nada en “Settings”, al ejecutar el programa y mover adecuadamente las ventanas, encontrarás lo siguiente:

INICIO

Ejecución del programa

Detención del programa

Paso que se ejecuta

Verificación de estados

Estimulación de entradas

Reinicio

Ejecución paso a paso

Ejecución animada

Page 100: Curso PIC

100

Revisión de resultados

INICIO

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.

Page 101: Curso PIC

101

2.7.- Grabación del Microcontrolador

Después de revisar cuidadosamente el programa, ahora se procederá a grabar el microcontrolador. Es importante tener un borrador de EPROM y el programador. Si no tienes el borrador de EPROM que consiste en una lámpara ultravioleta, entonces trabaja mejor con un PIC16F54 o un PIC16F84A. En el caso de no tener el programador, trata de comprarlo o hacer alguno de los que se proponen en la Internet.

Para realizar este paso, supondremos que se dispone del programador PICSTART Plus. La ventaja de utilizar este programador, es que sirve para casi cualquier microcontrolador PIC, desde ocho terminales hasta cuarenta terminales. Si tienes una versión vieja del programador, podrás ir al anexo 7, en el cual se explican los pasos para actualizar el programador.

El programador se conectará por medio de una fuente que trae el equipo, y el puerto de comunicación serial disponible de una computadora personal.

Para empezar, deberás seleccionar en el MPLAB, el programador que vas a utilizar:

INICIO

Page 102: Curso PIC

102

Selección del puerto de comunicación serial

Si se desea cambiar el puerto serial, como por ejemplo, el puerto 2, se deberá escoger en Programmer, Settings, Comunications. Después se selecciona el puerto serial deseado.

INICIO

Page 103: Curso PIC

103

Equipo de Desarrollo PICSTAR Plus

1 Programador PICSTART Plus

2 Cable serial RS-232 (Interfaz con la Computadora)

3 Microcontroladores

4 Disco con software, manuales y notas de aplicaciones

INICIO

Page 104: Curso PIC

104

Comenzando a Grabar

INICIO

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:

Chequeo si Leer Grabar Verificar Borrar está borrado memoria programa programación memoria Flash

Page 105: Curso PIC

105

Cargando el programa a la computadora

Si un programa ha sido recién ensamblado, en la ventana “View, Program Memory”, aparecerá el programa en código hexadecimal. En este caso ya todo estaría listo para programar el microcontrolador. Suponiendo que antes de cargar el programa, queremos verificar si el microcontrolador está borrado, al presionar en , se podrá hacer esta verificación. En el caso de hacer una lectura del contenido de la memoria del microcontrolador, los datos se tranferiran a la ventana de la memoria del programa y se borra la del programa ensamblado. Para cargar nuevamente el programa ensamblado, se buscará en File, Import, Download To Memory... Luego se accede al archivo con el nombre con extensión .hex, el cual ha sido ensamblado anteriormente.

INICIO

Page 106: Curso PIC

106

Estableciendo las condiciones de Hardware y grabación en la memoria del

microcontrolador

INICIO

Antes de programar nos fijaremos en la ventana inferior, la cual establece algunas condiciones del hardware del microcontrolador:

De éstas cambiaremos el Watchdog Timer a Off, ya que en nuestro programa, no hemos usado este temporizador. Por otro lado, debemos dejar el Code Protect en off, ya que si lo cambiamos, no podríamos volver a regrabar el microcontrolador.

Una vez realizado esto, se puede proceder a grabar. Para ello, simplemente se activará el botón , y se transfiere los datos a la EPROM del microcontrolador.

Si se desea verificar que la grabación fue correcta, se podrá activar el botón .

Page 107: Curso PIC

107

Si no se dispone del microcontrolador PIC16C54 o un borrador de EPROM

Si no puedes trabajar con el PIC16C54JW, ya sea porque no lo consigues en el mercado local, o porque no tienes la lámpara de luz ultravioleta, entonces podrás utilizar el PIC16F54, el cual es igual al PIC16C54, con la diferencia de que se puede regrabar sin necesidad de la lámpara de luz ultravioleta, gracias a su memoria de programa tipo FLASH. Otro microcontrolador PIC que puedes utilizar, haciendo pocas modificaciones, es el PIC16F84A que también contiene una memoria del tipo FLASH.

Entre el PIC16C54 y el PIC16F84A hay compatibilidad de hardware, es decir que los terminales de conexión coinciden en ambos casos y por lo tanto no tienes que modificar el circuito. Otro detalle que hay en ambos microcontroladores, es la compatibilidad del software. A pesar de que el PIC16F84A es un microcontrolador de la gama media, el programa que editaste con el PIC16C54 puede ejecutarse sin problemas, ya que las instrucciones de los microcontroladores de la gama básica son compatibles con los de la gama media. A pesar de esta compatibilidad, deberás hacer las siguientes modificaciones para que puedas grabar correctamente al PIC16F84A:

• En el programa deberás cambiar la directiva INCLUDE “P16C5X.INC”, por la directiva INCLUDE “P16F84.INC”, ya que vas a trabajar con el PIC16F84A.

• En el MPLAB deberás seleccionar en Options, Development Mode y Processor al PIC16F84A. De esta manera al grabar con el MPLAB seleccionarás los códigos adecuados para este microcontrolador.

• Finalmente, deberás reensamblar el programa, para generar los códigos del PIC16F84.

INICIO

Page 108: Curso PIC

108

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.

INICIO

Page 109: Curso PIC

109

Circuito final

PIC16C54

18 17 16 15 14 13 12 11 10

5V

5V

1 2 3 4 5 6 7 8 9

5V

5V

8 Resistencias de 3004 Resistencias de 4,7K

10K

f680KHz

100 pF

INICIO

Page 110: Curso PIC

110

Algunas Preguntas

• ¿Para qué sirve la instrucción TRIS?• ¿Cuáles líneas se emplearon para entrada y cuáles para salida?• ¿Qué hace la directiva ORG?• ¿Qué hace la directiva EQU?• ¿Cuál es la diferencia entre una directiva y una instrucción?• ¿Cuánta corriente circulan por los leds, cuando ellos están encendidos?• ¿Qué hace la instrucción BTFSS?• ¿Qué hacen las instrucciones BCF y BSF?• ¿En cuáles partes del programa se ejecutan saltos?• ¿Para qué sirve la directiva END?• ¿Por qué son importantes los comentarios en un programa?• ¿Entendiste la lógica del programa?• ¿Te atreverías a escribir nuevamente un programa que haga lo mismo,

sin consultar este módulo instruccional? Explícalo claramente.• ¿Comprendiste los pasos necesarios para programar a un

microcontrolador?

INICIO

Page 111: Curso PIC

111

2.8.- Reduciendo el programa

Es posible reducir la cantidad de líneas de programa, para utilizar menor espacio en la memoria de programa. Para ello, se leerá el puerto de entrada, y con la instrucción de rotación. Se podrá hacer la evaluación bit por bit en un registro. Con este procedimiento, también se podrá escribir los bits en el puerto de salida.

Te recomendamos que antes de comenzar a interpretar el programa que se presenta en la siguiente página, analiza lo que realizan las siguientes instrucciones:

MOVWF f MOVF f,d

DECF f,d INCF f,d

DECFSZ f,d INCFSZ f,d

RRF f,d RLF f,d

En las instrucciones RRF y RLF, el registro f rueda un bit hacia la derecha o hacia la izquierda respectivamente; sin embargo esto lo hace al través de un noveno bit que se llama Carry (C) que se encuentra en el registro STATUS. Este registro guarda algunas condiciones después de que se ejecutan ciertas operaciones, por ejemplo, si un resultado es igual a cero, en STATUS hay un bit Z, que se colocará en 1. De manera similar, si en el bit 0 de f hay un “1”, al hacer la rotación a la derecha, el bit C del STATUS, se colocará en “1”.

INICIO

Page 112: Curso PIC

112

Programa reducido para lalectura de interruptores

INICIO

Page 113: Curso PIC

113

2.9.- Advertencia para un vehículo

Te recomendamos que analices, edites, ensambles y simules el programa que se presentó anteriormente. Verás que hará lo mismo que el primer programa. Nota que en este programa se utiliza algunas posiciones de la RAM, en la que se guarda los valores temporales del puerto A, puerto B y el contador de ciclos.

A continuación, se presentará un programa que indicará ciertas condiciones de advertencia para un vehículo. Para ello te recomendamos que estudies y analices las siguientes instrucciones:

ANDWF f,d ANDLW K

IORWF f,d IORLW K

XORWF f,d XORLW K

COMF f,d NOP

Recordando las funciones lógicas que se efectuará en cada bit de índice “n” de los registros W y F:

AND IOR XOR COM Donde:

n Posición de bit

f Direc. de RAM

w Reg de trabajo

d Destino (w o f)INICIO

Page 114: Curso PIC

114

Descripción del Problema

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.

INICIO

Page 115: Curso PIC

115

Circuito y Ecuaciones Lógicas

De acuerdo a la descripción del problema, te proponemos como actividad, que dibujes el circuito del microcontrolador, con los detectores y las luces de advertencia.

Las ecuaciones lógicas para cada condición de advertencia, según el problema planteado, se podrán colocar de la siguiente manera:

COND1 = MOTOR.(PCOND+PACOM)COND2 = MOTOR.CINTUCOND3 = MOTOR.LUCESCOND4 = MOTOR.PCOND.LLAVEADGEN = COND1 + COND2 + COND3 + COND4

Según las asignaciones en cada puerto, se puede plantear también lo siguiente:

RA0 = RB0.(RB1+RB2)RA1 = RB0.RB3RA2 = RB0.RB4RA3 = RB0.RB1.RB6RB7 = 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. INICIO

Page 116: Curso PIC

116

Lógica del Programa

En un primer intento, la lógica a utilizar en este programa, consiste en asignar un registro a cada entrada, y luego hacer las operaciones lógicas correspondientes, para colocar los resultados en registros que correspondan a cada solución. Esto implica que hay que tomar la lectura de las líneas RB0 hasta RB5, y asignar las condiciones al bit menos significativo de cada uno de los registros correspondientes. Los resultados, se colocarán en el bit menos significativo de cada registro. Véase a continuación, la asignación de etiquetas en el programa:

INCLUDE "P16C5X.INC" ; INCLUYE ETIQUETAS DE P16C5X.INC

MOTOR EQU 10 ;MOTORPCOND EQU 11 ;PUERTA DEL CONDUCTORPACOM EQU 12 ;PUERTA DEL ACOMPAÑANTECINTU EQU 13 ;CINTURON DE SEGURIDADLLAVE EQU 14 ;LLAVE DE ENCENDIDOLUCES EQU 15 ;LUCESCOND1 EQU 16 ;CONDICION 1COND2 EQU 17 ;CONDICION 2COND3 EQU 18 ;CONDICION 3COND4 EQU 19 ;CONDICION 4ALGEN EQU 1A ;ALARMA GENERAL

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. INICIO

Page 117: Curso PIC

117

CONSIDERANDO UN PROGRAMA MODULAR

La forma en la cual se presentó las posiciones de los registros es completamente válida. Sin embargo, te recomendamos que te acostumbres a hacer módulos de subrutina, de manera que con pocos cambios, lo puedas utilizar sin problemas en otros programas.

Para ello, en cada subrutina se especificará la longitud del programa, la dirección de arranque, la cantidad de registros utilizados y la posición de referencia de estos registros. Si te acostumbras a hacer esto, entonces podrás hacer módulos que utilizarías luego sin mucha dificultad. Para ello te proponemos que especifiques los registros de la manera siguiente:

MOTOR EQU 10 ;MOTORPCOND EQU MOTOR+1 ;PUERTA DEL CONDUCTORPACOM EQU MOTOR+2 ;PUERTA DEL ACOMPAÑANTECINTU EQU MOTOR+3 ;CINTURON DE SEGURIDADLLAVE EQU MOTOR+4 ;LLAVE DE ENCENDIDOLUCES EQU MOTOR+5 ;LUCESCOND1 EQU MOTOR+6 ;CONDICION 1COND2 EQU MOTOR+7 ;CONDICION 2COND3 EQU MOTOR+8 ;CONDICION 3COND4 EQU MOTOR+9 ;CONDICION 4ALGEN EQU MOTOR+0A ;ALARMA GENERAL

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.

INICIO

Page 118: Curso PIC

118

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

La directiva “cblock” asigna un bloque de constantes, a partir de un valor específico, es decir que en el caso anterior se define la etiqueta MOTOR con el valor 10h, y a continuación a PCOND se le asigna el valor 11h, y así sucesivamente. Como podrás observar ésta es una manera más sencilla de asignar valores a un bloque de constantes.

La directiva “endc” indica la finalización de la lista de constantes, es decir que la última de ellas es ALGEN.

INICIO

Page 119: Curso PIC

119

Asignación de detectores a registros

INICIO

Page 120: Curso PIC

120

Asignación de advertencias

INICIO

Page 121: Curso PIC

121

Condición de Alarma General

El programa presentado, es una de las formas de solucionar este problema. En la siguiente página, se presenta otro programa, mucho más corto y que utiliza menos registros. La lógica que se utilizó, se basa en asignar las operaciones lógicas en forma paralela, es decir, que cada condición se manifiesta en un bit de una palabra. Deberá notarse que en todas las operaciones está involucrada la variable “MOTOR”, por lo que se aprovecha esto, para simplificar más el programa.

INICIO

Page 122: Curso PIC

122

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 MOTOROPER2 EQU OPER1+1 ; EL OPERADOR 2 SE UTILIZARA PARA COLOCAR LAS OTRAS

; CONDICIONES

INCLUDE "P16C5X.INC" ; INCLUYE ETIQUETAS DE P16C5X.INC

ORG 0PREPAR

CLRW ; EL PUERTO A SERA UTILIZADO COMO ENTRADATRIS PORTAMOVLW 7F ; RB7 SERA UTILIZADO COMO SALIDA Y EL RESTOTRIS PORTB ; DE LOS BITS DEL PUERTO B SERAN ENTRADAS

INICIO

Page 123: Curso PIC

123 INICIO

Programa de advertencia reducido

Page 124: Curso PIC

124

2.10.- Control de leds por medio de pulsadores

En este ejemplo se hará lo mismo que en el caso de la lectura de los interruptores, pero se utilizará pulsadores para encender los leds de manera alterna.

Se deberá considerar el efecto de rebote del pulsador, el cual consiste en que al accionarlo, sus contactos rebotan varias veces antes de lograr permanecer en su estado estable; el tiempo de duración del efecto de rebote, podrá estar entre 5 y 25 mSeg dependiendo de la calidad y el tipo del pulsador. En otras palabras, se deberá hacer la lectura de los conmutadores por lo menos cada 25 mSeg.

El programa a realizar, entonces deberá leer el estado del pulsador. En el caso de que éste se haya presionado, se deberá encender el led que estaba apagado, y apagar el que estaba encendido en el canal correspondiente, además se deberá esperar un tiempo de aproximadamente 25 mSeg, para efectuar la siguiente lectura.

El circuito, entonces deberá constar de cuatro entradas y ocho salidas, de manera similar que en el caso de los interruptores.

INICIO

Page 125: Curso PIC

125

Circuito utilizado para leer pulsadores

De acuerdo a lo establecido anteriormente, se deberá escoger un microcontrolador que tenga al menos doce líneas para puertos de entrada-salida. Una elección posible, podría ser el PIC16C54, ya que tiene doce terminales de entrada-salida. Las conexiones se presentarán a continuación, en donde se escogerá al puerto A como entrada (4 bits) y el puerto B como salida (8 bits).

Vss

PIC

16C54

INICIO

Page 126: Curso PIC

126

Comienzo del Programa

El programa que se presenta a continuación, se utilizará para detectar el estado de uno de los pulsadores.

Como siempre, el programa deberá empezar con comentarios que den suficiente información acerca del programa que se va a realizar.

;;; PROGRAMA PARA LA LECTURA DE PULSADORES;;; Este programa se utilizará en un circuito con cuatro pulsadores de entrada y; ocho indicadores a la salida, de los cuales cuatro serán de color rojo, y cuatro; serán de color verde.;; Longitud del programa 82 (51h) palabras. Dirección de inicio del programa 0H; Cantidad de registros 2. Posición de referencia PBANTES dirección 10h;; Cada pulsador estará asociado con dos indicadores de diferente color, y; al presionarlo, deberá cambiar el encendido, de uno a otro. En condiciones iniciales,; deberán encender los indicadores de color rojo.;; Se tomará el puerto A como entrada para los pulsadores.; Un "1" determinará que el pulsador está abierto; Un "0" determinará que el pulsador está presionado;; El puerto B se utilizará como salida; Los terminales pares se conectarán a los leds rojos; Los terminales impares se conectarán a los leds verdes

INICIO

Page 127: Curso PIC

127

Preparación y detección

INCLUDE "P16F84.INC" ; ESTA DIRECTIVA INDICA QUE SE ASIGNARA VALORES; NUMERICOS A CADA UNO DE LOS REGISTROS DE FUNCIONES; ESPECIALES Y LOS BITS DEL REGISTRO STATUS

PBANTES EQU 10 ; INDICA EL ESTADO ANTERIOR DEL PUERTO BSTTUSPA EQU PBANTES + 1 ; INDICA EL ESTADO DE LOS BITS LEIDOS EN EL PUERTO A

ORG 0PREPAR MOVLW 0F

TRIS PORTA ; PUERTO A SERA ENTRADACLRWTRIS PORTB ; PUERTO B SERA SALIDAMOVLW 55MOVWF PORTB ; SE ALTERNAN 1 Y 0 EN LAS LINEAS DE SALIDA DEL PUERTO BCLRF PBANTES ; PALABRA DE ESTATUS QUE INDICA EN CADA GRUPO QUE LOS

; LEDS ROJOS ESTAN ENCENDIDOS Y LOS VERDES APAGADOSCLRF 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 0BCF 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 1BCF STTUSPA,1

GRUPO2 BTFSS PORTA,2 ; CHEQUEA CONDICION BIT 2 DEL PUERTO A GOTO CAMBIO2 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 2BCF STTUSPA,2

GRUPO3 BTFSS PORTA,3 ; CHEQUEA CONDICION BIT 3 DEL PUERTO A GOTO CAMBIO3 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 3BCF STTUSPA,3

SIGCICL CALL RETARDO ; LLAMA RUTINA DE RETARDO PARA ESPERAR TIEMPO DE REBOTEGOTO INICIO

INICIO

Page 128: Curso PIC

128

Cambio de estado en dos de los grupos

INICIO

Page 129: Curso PIC

129

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:

INICIO

Page 130: Curso PIC

130

En el siguiente ejemplo, se muestra cómo realizar la suma binaria de dos números de 4 bits que se leen en el puerto B. Trata de aprender a utilizar las siguientes instrucciones:

2.11.- Ejemplo de un programa para sumar

INICIO

ADDWF f,d SUBWF f,dCALL K RETLW KCLRF SWAPF f,d

Page 131: Curso PIC

131

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 SALIEAINICIO MOVF PORTB,W ; EL CONTENIDO DE PORTB VA A W

ANDLW 0F ; SE TOMAN LOS 4 BITS MENOS SIGNIFICATIVOSMOVWF 8 ; SE GUARDA VALOR EN LA POSICIÓN 8HMOVF PORTB,W ; SE VUELVE A LEER EL PUERTO B ANDLW OFO ; SE TOMAN LOS 4 BITS MAS SIGNIFICATIVOSMOVWF 9 ; SE GUARDA VALOR EN LA POSICIÓN 9HSWAPF 9,F ; EL VALOR SE COLOCA ENCALL SUMABYTEMOVF 0A,WMOVWF PORTAGOTO INICIO ; VA AL INICIO DEL PROGRAMA

SUMABYTE MOVF 8,W ; Mueve Sumador ubicado en la posición 8 a WADDWF 9,W ; Suma valor de la posición 9 con W, resultado

a WMOVWF 0A ; El resultado se guarda en la posición 0ARETLW 0 ; Retorno con W = 0END

INICIO

Page 132: Curso PIC

132

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;

MINUENDO EQU 8 ; Posición del minuendoSUSTRAENDO EQU 9 ; Posición del sustraendoRESULTADO EQU 0A ; Posición del resultado

ORG 50 ; Dirección del comienzo del programa 50hRESTABYTE

MOVLW 5 ; Asigna el valor 5 a W (Registro de trabajo)

MOVWF MINUENDO ; El valor 5 pasa al minuendoMOVLW 3 ; Asigna el valor 3 a WMOVWF SUSTRAENDO ; El valor 3 pasa al sustraendoMOVF SUSTRAENDO,W ; El valor del sustraendo pasa a W

SUBWF MINUENDO,W ; Resta MINUENDO – SUSTRAENDO,; resultado en W

MOVWF RESULTADO ; El resultado se guarda en la posición 0A

END ;Finalización del programa INICIO

Page 133: Curso PIC

133

Trata de hacerlo tú

En el siguiente ejemplo se propone hacer el control de cuatro semáforos en una intersección de dos vías. Los semáforos tienen cruces a la izquierda en cada esquina. Se asume que los tiempos de duración serán los que se muestran en la tabla anexa:

Esquinas1 y 3 Esquinas 2 y 4 Duración

Rojo y Verde cruce Rojo 8 segundos

Verde Rojo 20 segundos

Amarillo Rojo 3 segundos

Rojo Rojo y Verde cruce 8 segundos

Rojo Verde 25 segundos

Rojo Amarillo 3 segundos

1

23

4

INICIO

Page 134: Curso PIC

134

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.

INICIO

Page 135: Curso PIC

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)

TEMA 3MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y TEMPORIZADORES CONTENIDO

INICIO

Page 136: Curso PIC

136

Objetivos Terminales:

• Describir los registros de funciones especiales del microcontrolador PIC16C54.

• Mencionar la utilidad de los temporizadores en los microcontro-ladores.

TEMA III:MEMORIA DE PROGRAMA, REGISTROS, PUERTOS

Y TEMPORIZADORES

INICIO

Page 137: Curso PIC

137

Memoria de DatosMemoria de Programa

Se almacenan todas las instrucciones del programa de control. El tamaño de esta memoria es de 512 palabras.

Los datos que manejan los programas varían continuamente y esto exige que la memoria que los contiene, debe ser de lectura y escritura, por lo que la memoria RAM estática (SRAM) es la más adecuada, aunque sea volátil.

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:

3.1- Organización de las memoriasdel PIC16C54

INICIO

Page 138: Curso PIC

138

El PIC16C54, tiene 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>

NIVEL DE PILA 1NIVEL DE PILA 2

MEMORIA DE

PROGRAMA

VECTOR DE INICIALIZACIÓN

000h

0FFh100h

1FFh

Espaciopara

memoriadel

usuario

CALL, RERLW9

Memoria de programa del PIC16C54

3.2.- Organización de la memoria de programa del PIC 16C54

INICIO

Page 139: Curso PIC

139

La memoria de datos está organizada por registros de un byte de extensión, contenidos en una RAM. Los registros se dividen en dos grupos:

Registros defuncionesespeciales

Registros depropósitos generales

Estos incluyen:

El registro STATUS (Estado)

El Registro FSR (Registro

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)

Se utilizan para guardar información de datos y control por medio de las instrucciones del programa.

3.3.- Organización de la memoria de datos del microcontrolador PIC 16C54

INICIO

Page 140: Curso PIC

140

INDF(1)

TMRO

PCL

STATUS

FSR

PORTA

PORTB

00h

01h

02h

03h

04h

05h

06h

07h

0Fh10h

1Fh

REGISTROS DE

PROPÓSITOSGENERALES

MEMORIA DE DATOS DEL PIC16C54

(1) El registro INDF, no corresponde a una posición física, sino al registro cuya dirección está contenida en el registro FSR.

INICIO

Page 141: Curso PIC

141

a.- Registro de propósitos generales:Los registros de propósitos generales, son aquéllos donde se guardan los datos de los programas de aplicación. Ellos se pueden acceder de manera directa por medio de la dirección f en una instrucción, o de manera indirecta, a través del registro FSR o registro apuntador de direcciones.

b.- Registros de funciones especiales:Estos registros los usa la CPU y los periféricos para el control de la operación del microcontrolador. Debes tener cuidado de no utilizar un registro de función especial, como un registro de propósito general, ya que en los registros de funciones especiales se asigna un control específico, que puede estar relacionado con el hardware del microcontrolador o el control del programa. En la siguiente tabla se representa un resumen de las funciones de estos registros.

Tipos de Registros

INICIO

Page 142: Curso PIC

142

Función de cada bit de los registros de funciones especiales

Nota: “x” significa “cualquier cosa” y “u” significa “no cambia”

Valor después Valor después

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

03h STATUS PA2 PA1 PA0 TO PD Z DC C 0001 1xxx

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

INICIO

Page 143: Curso PIC

143

Está ubicado en la dirección 03h, en la memoria de datos, y contiene los bits de estado de la Unidad Lógica y Aritmética y el estado de la inicialización (RESET).

El registro STATUS puede ser el destino para una instrucción, como cualquier otro registro. Si este registro es el destino de una instrucción que afecta los bits C (acarreo), DC (acarreo decimal) o Z (cero), entonces la escritura de estos tres bits es inhibida, es decir, estos bits se establecerán de acuerdo a la lógica del dispositivo.

Por otro lado, los bits TO (Tiempo de espera) y PD (Reposo) no se pueden escribir.

A continuación se presentarán los bits del registro STATUS (dirección: 03h).

3.4 Registro STATUS

INICIO

Page 144: Curso PIC

144

R = bit de lectura W = bit de escritura -N = Valor después de la inicialización.

Bit 7-5: PA2 PA0: No se usan para el PIC16C54Bit 4: TO: Bit “Tiempo de espera”.

1 = Al encender la alimentación o con las instrucciones CLRWT o SLEEP.

0 = Al haber un desbordamiento en el registro WDT.Bit 3: PD: Bit “Reposo”.

1 = Al encender la alimentación o con las instrucciones CLRWT.0 = Al ejecutar la instrucción SLEEP.

Bit 2: Z: Bit cero.1 = El resultado de una operación lógica o aritmética es cero.0 = El resultado de una operación lógica o aritmética es diferente

de cero.Bit 1: DC: Bit de acarreo/débito de dígito (instrucciones ADDWF o SUBWF).

ADDWF1 = Ocurre un acarreo en el cuarto bit del resultado (se excede el valor 0Fh).0 = No ocurre un acarreo en el cuarto bit del resultado.

SUBWF1 = No ocurre un débito en el cuarto bit del resultado.0 = Ocurre un débito en el cuarto bit del resultado.

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x

PA2 PA1 PA0 TO PD Z DC C

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

INICIO

Bits del Registro STATUS

Page 145: Curso PIC

145

Bit 0: C: Bit de acarreo/débito (instrucciones ADDWF, SUBWF, RRF o RLF).

ADDWF

1 = Ocurre un acarreo.

0 = No ocurre un acarreo.

SUBWF

1 = No ocurre un débito.

0 = Ocurre un débito.

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.

El bit “C” o bit de acarreo (Carry)

INICIO

Page 146: Curso PIC

146

Programa para incrementar un contador BCD

Un programa típico es el de un contador BCD. Éste, a diferencia de los contadores binarios, presentan la salida en código BCD, de manera que pueda ser fácilmente llevado a una presentación decimal.

El programa que se presenta a continuación, cada vez que es llamado, incrementa un contador cuya salida es de código BCD. Para ello se utilizan los bits DC y C del registro STATUS.

INCLUDE "P16C5X.INC"CONT EQU 0X10 ; En CONT se encuentra el contador BCD

org 0clrf CONT ; Se hace CONT igual a 0

Increm incf CONT,F ; Se incrementa CONT en 1movlw 6 ; Se hace el ajuste a BCDaddwf CONT,W ; suma 6 para corrección digito 0btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0movwf CONT ; corrige si hay acarreo digito 0movlw 60addwf CONT,W ; suma 60 para corrección digito 1btfsc STATUS,C ; corrige si hay acarreo digito 1movwf CONTgoto Incremend

INICIO

Page 147: Curso PIC

147

El registro INDF no es un registro físico; si se accede al registro INDF, se coloca en el registro cuya dirección está contenida en el registro FSR, es decir, que FSR es un apuntador de direcciones.

Ejemplo de cómo utilizar los

registros INF y FSR:

La siguiente sección de programa, permite borrar los registros ubicados desde la dirección 10h hasta la 1Fh. Una forma de realizar esto es por medio del modo de acceso indirecto.

MOVLW 0X10 ; Inicialización del apuntador de la RAM

MOVWF FSR ; El Registro FSR toma el valor 10h

Próximo CLRF INDF ; Borra registro cuya dirección está en FSR

INCF FSR, F ; Incremento del apuntador

BTFSS FSR,5 ; ¿Borrado completo? (Examina bit 5 de FSR)

GOTO Próximo ; No, borra siguiente

3.5 Registros INDF y FSR, Modo de acceso indirecto

INICIO

Page 148: Curso PIC

148

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:

8 7 0

PC PCL

Palabra de Instrucción

PIC16C54

3.6 Registro contador de programa PC

INICIO

Page 149: Curso PIC

149

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.

Algunas de las instrucciones donde el PCL es el destino, o se le modifica el contenido, son: MOVWF PCL, ADDWF PCL y BSF PCL, 5. Recuerda que la dirección del PCL es la 2

8 7 0

PC PCL

Palabra de Instrucción

PIC16C54

Inicialización A “0”

INICIO

Page 150: Curso PIC

150

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:

BTFSS REG0,3 ; Chequea el bit 3 de REG0 si es “1” salta una instrucción

BTFSC STATUS,C ; Chequea el bit de acarreo del estatus, salta si es “0”

GOTO FINAL ; Salto incondicional a la dirección final, el salto corresponde a 9 bits

CALL MULT ; Ejecuta la rutina MULT, el salto corresponde a 8 bits

RETLW 0 ; Retorno de subrutina, la dirección del STACK va al PC

MOVWF PCL ; El contenido de W va a los 8 bits menos significativos del PC

ADDWF PCL,F ; Se suma W + PCL y el resultado va al PC

XORWF PCL,F ; Se hace el exor entre PCL y W y el resultado modifica al PC

BCF PCL,2 ; Coloca en 0 el bit 2 del PC

Otras instrucciones que ejecutan cambios en el PC son: ANDWF PCL,F;IORWF PCL,F; COMF PCL; BSF PCL,1; RRC PCL,F; RLC PCL, F; INCF PCL,F; DECF PCL,F; INCFSZ PCL,F; DECFSZ PCL,F; CLRF PCL; SWAPF PCL,F; etc.

INICIO

Page 151: Curso PIC

151

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.

3.7 Registro STACK (pila)

INICIO

Page 152: Curso PIC

152

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 0INICIO movf valorBCD,w ; el valor BCD a convertir se lleva a W

call BCD7SEGgoto INICIO

BCD7SEG ; rutina de conversion BCD a 7 segmentosaddwf PCL,f ; El valor BCD se suma al contador de programa

; en el retorno se convierte en 7 segmentosretlw b'00111111' ; 0retlw b'00000110' ; 1retlw b'01011011' ; 2retlw b'01001111' ; 3retlw b'01100110' ; 4retlw b'01101101' ; 5retlw b'01111101' ; 6retlw b'00000111' ; 7retlw b'01111111' ; 8retlw b'01101111' ; 9end

INICIO

a (RB0)

f (RB5) b (RB1)

g (RB6)

e (RB4) c (RB2)

d (RB3)

Page 153: Curso PIC

153

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.

Puerto B: El puerto B es un registro de entrada-salida de 8 bits (PORTB<7:0>).

3.8 Puertos de Entrada y Salida

INICIO

Page 154: Curso PIC

154

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.

Registro de control de puerto TRIS

INICIO

Page 155: Curso PIC

155

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.

Cualquier línea de un puerto, puede programarse individualmente

como entrada o salida.

El circuito equivalente para cada línea de un puerto, es el que se

muestra a continuación:

Interfaces de Entrada y Salida

INICIO

Page 156: Curso PIC

156

Registro Tipo D

QD

QCK

Bus deDatos

Escribe en puerto

Registro TRIS

QD

QCK

RegistroW

TRIS f

Inicialización

Lee de Puerto

P

N

Vss

terminal deEntrada/Salida

Vdd

INICIO

Page 157: Curso PIC

157

La siguiente tabla presenta un resumen de la posición de las líneas en cada uno de los puertos:

Nota: “x” significa “cualquier cosa” y “u” significa “no cambia”

INICIO

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

Valor después Valor después

Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR

Page 158: Curso PIC

158

Escritura en un Indicador 7 segmentos

RB0

RB1

RB2

PIC 16C54 RB3

RB4

RB5

RB6

En el registro W se encuentra el código 7 segmentos que se va a escribir en el indicador numérico.

La instrucción:

MOVWF PORTB ; Lleva el contenido de W al puerto B.

Previamente se debe programar al puerto B como salida con la instrucción TRIS PORTB.

INICIO

Page 159: Curso PIC

159

Escritura en Dígitos Multiplexados

RA0

RA1

RA2

RA3

PIC16C54

RB0

RB1

RB2

RB3

RB4

RB5

RB6

La siguiente figura muestra una configuración de una salida de cuatro dígitos controlados por los puertos A y B.

Los indicadores numéricos 7 segmentos son del tipo ánodo común, por lo tanto se debe considerar que los segmentos encenderán con un “0” en vez de con un “1”.

Los dígitos se encenderán con un “0” en la entrada del transistor que le corresponde manejar al dígito correspondiente.

En la siguiente página se muestra una rutina para el control de varios dígitos.

INICIO

Page 160: Curso PIC

160

Rutina para el manejo de cuatro dígitos

;4IDIGITOS

;Salida para 4 dígitos 7 segmentosINCLUDE "P16C5X.INC"CBLOCK H'10'

DIGITO0, DIGITO1, DIGITO2, DIGITO3ENDC ; VALORES DE SALIDA DE CADA DIGITOORG 0

PREPARA CLRWTRIS PORTATRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS

INICIO MOVF DIGITO0,W ; EL CONTENIDO DE DIGITO 0 VA A WMOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO BMOVLW B’1110’ ; SELECCION DEL PRIMER DIGITOMOVWF PORTA,F ; SE SELECCIONA RA0, PARA EL PRIMER DIGITOCALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADORMOVF DIGITO1,W ; EL CONTENIDO DE DIGITO 1 VA A WMOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO BMOVLW B’1101’ ; SELECCION DEL SEGUNDO DIGITOMOVWF PORTA,F ; SE SELECCIONA RA1, PARA EL PRIMER DIGITOCALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADORMOVF DIGITO2,W ; EL CONTENIDO DE DIGITO 2 VA A WMOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO BMOVLW B’1011’ ; SELECCION DEL TERCER DIGITOMOVWF PORTA,F ; SE SELECCIONA RA2, PARA EL PRIMER DIGITOCALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADORMOVF DIGITO3,W ; EL CONTENIDO DE DIGITO 3 VA A WMOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO BMOVLW B’0111’ ; SELECCION DEL CUARTO DIGITOMOVWF PORTA,F ; SE SELECCIONA RA3, PARA EL PRIMER DIGITOCALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR

INICIO

Page 161: Curso PIC

161

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, SELDIGIENDC ; VALORES DE SALIDA DE CADA DIGITOORG 0

PREPARA CLRWTRIS PORTATRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS

INICIO MOVLW B’11111110 ; SE HACE 0 EL BIT 0, PARA ENCENDER PRIMER DIGITOMOVWF SELDIGI,F ; EL VALOR SE LLEVA DE W A SELDIGIMOVLW DIGITO0 ; VALOR DIGITO 0 VA A W PARA CARGARLO A FSRMOVWF FSR ; DIGITOX VA AL APUNTADOR DE DIRECCIONES

PROXDIG MOVF INDF,W ; VALOR DEL DIGITO VA A WMOVWF PORTB ; SE SACA VALOR AL PUERTO BMOVF SELDIGI,W ; SELECCIONADOR DE DIGITO A WMOVWF PORTA ; SELECCION DE DIGITO AL PUERTO ABSF STATUS,C ; COLOCA ACARREO EN 1, PARA APAGAR DIGITO 0RLF SELDIGI,F ; CAMBIO EN LA SELECCION DE DIGITOINCF FSR,F ; INCREMENTA APUNTADOR DE DIGITOSCALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADORBTFSS SELDIGI,4 ; SI FINALIZA ULTIMO DIGITO SALTAGOTO PROXDIG ; SINO VA AL PROXIMO DIGITO

INICIO

Page 162: Curso PIC

162

El registro OPTION es un registro de 6 bits de escritura solamente, y contiene los bits de control para configurar el escalamiento del temporizador TMR0 (Timer 0) o del temporizador WDT (Perro guardián). El registro OPTION no tiene dirección asignada en los microcontroladores de la gama básica. Sin embargo, este registro sí tiene una dirección específica en los microcontroladores de la gama media.

A continuación se presenta la asignación de los bits del 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

Bit 5: TOCS: Bit de selección de fuente del temporizador TMR0

1 = Transición del terminal TOCKI

0 = Reloj de ciclo de instrucciones interno (CLKOUT)

Bit 4: TOSE: Bit de selección de transición de fuente del temporizador TMR0

1 = Incremento en una transición de bajada en el terminal TOCKI

0 = Incremento en una transición de subida en el terminal TOCKI

3.9 Registro OPTION

INICIO

Page 163: Curso PIC

163

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.

PS2 PS1 PS0 Relación TMR0 Relación WDT

000 1:2 1:1

001 1:4 1:2

010 1:8 1:4

011 1:16 1:8

100 1:32 1:16

101 1:64 1:32

110 1:128 1:64

111 1:256 1:128

INICIO

Page 164: Curso PIC

164

Cambios en el preescalador

Veamos un ejemplo de cómo cambiar el preescalador para los temporizadores del PIC16C54. En el primer caso se hace un cambio del temporizador 0 al WDT. Recuerda que los valores binarios “x”, son los que vamos a asignar:

CLRWDT ; BORRA EL TEMPORIZADOR PERRO GUARDIAN WDT

CLRF TMR0 ; BORRA TEMPORIZADOR TMR0

MOVLW B’00xx1111’ ; LAS ULTIMAS TRES INSTRUCCIONES SE REQUERIRAN SI

OPTION ; SE DESEA HACER EL CAMBIO

CLRWDT ; PS<2:0> A 000 O 001

MOVLW B’00xx1xxx’ ; SE ESTABLECE EL PREESCALADOR AL VALOR DESEADO

OPTION ; PARA EL WDT

En el segundo caso se hace un cambio del preescalador del WDT al TMR0.

CLRWDT ; BORRA EL WDT Y EL PREESCALADOR

MOVLW B’xxxx0xxx’ ; SELECCIONA EL NUEVO ESCALAMIENTO PARA TMR0 Y LA

OPTION ; FUENTE QUE ACTIVA ESTE TEMPORIZADOR

INICIO

Page 165: Curso PIC

165

Un temporizador contador tiene la función de calcular el tiempo transcurrido durante la ejecución del programa del microcontrolador o, contar los pulsos producidos por uno o más eventos externos. Básicamente el circuito que se utiliza es el de un contador independiente, que puede ser activado por el oscilador del microcontrolador o por un oscilador externo.

El temporizador TMR0 presenta las siguientes características:

Registro contador - temporizador de 8 bits de lectura y escritura.

Escalamiento programable (Véase registro Option).

Selección de entrada de oscilador interna o externa.

Selección del tipo de transición que activa la cuenta.

3.10 Temporizador contador

INICIO

Page 166: Curso PIC

166

El modo temporizador se selecciona al colocar un cero en el bit TOCS, bit 5 del registro OPTION. En este modo, el temporizador se incrementa por cada transición del escalamiento, el cual divide la frecuencia de cada ciclo de instrucción. Si se escribe el registro TMR0 (temporizador 0), el incremento se inhibe durante los dos ciclos siguientes, véase las siguientes figuras:

INICIO

Ciclos del Temporizador 0, para el oscilador interno sin escalamiento:

PC (Contador de programa)

01020304 01020304 01020304 01020304 01020304 01020304 01020304 01020304

Preparación de instrucción

Temporizador 0

Instrucción Ejecutada

Escribir TRMRO Ejecutado

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO+1

Leer TMRO

Lee NTO+2

MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0, W

Modo Temporizador

Page 167: Curso PIC

167

PC (Contador de programa)

01020304 01020304 01020304 01020304 01020304 01020304 01020304 01020304

Preparación de instrucción

Temporizador 0

Instrucción Ejecutada

Escribir TRMRO Ejecutado

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO

Leer TMRO

Lee NTO+1

MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0,W

Ciclos del Temporizador 0:Oscilador interno con escalamiento 1 a 2

INICIO

El programador debe considerar este retardo en la escritura para ajustar el valor deseado en TMR0.

Page 168: Curso PIC

168

El modo contador se selecciona al poner en 1 el bit TOCS (bit 5 del registro OPTION). En este modo, el temporizador o el escalamiento se incrementará en 1 cada vez que haya una transición en el terminal de entrada TOCKI. El tipo de transición se determina por medio del bit TOSE (bit 4 del registro OPTION); si éste es cero, la entrada es sensible a transiciones de subida.

En la siguiente figura, se muestra la conexión eléctrica del terminal TOCKI, que es la entrada del temporizador TMR0:

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. INICIO

TOCKIN

Entrada con Disparador de Schmitt

Modo Contador

Page 169: Curso PIC

169

Valor al Valor después

Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Encender de TMR0 y TO

N/A TMRO Temporizador 0 - Contador/reloj de tiempo real de 8 bits xxxx xxxx uuuu

uuuu

N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 11 1111 1111 1111

En la tabla siguiente, se muestra un resumen de los registros asociados con

el temporizador TMR0.

INICIO

Page 170: Curso PIC

170

Contador de tiempo

INICIO

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.

Page 171: Curso PIC

171

El Contador de segundos y minutos

INICIO

include "P16C5X.INC" ; Incluye los símbolos del PIC16C54cblock 10H

segund, minuto, hora, diaendc

prepara movlw b'00000110' ; Selección del preescalador a TMR0 y división por 128option ; Carga al registro OPTION la configuración

tmr0full movf TMR0,wbtfss STATUS,Z ; Chequea si el TMR0 está en 0goto tmr0fullmovlw d'61'movwf TMR0 ; carga el valor 61 para que se ejecuten 195 ciclos de tmr0incf segund,f ; Se incrementan los segundoscall ajustegoto tmr0full ; Se espera hasta que el tmr0 vuelva a 0. Para otras aplicacione

; el programa principal puede seguir mientras se incrementa TMR0ajuste movlw 6 ; Se hace el ajuste a BCD

addwf segund,w ; suma 6 para corrección digito 0btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0movwf segund ; corrige si hay acarreo digito 0movlw 0A0addwf segund,w ; suma 100 para corrección de segundosbtfsc STATUS,C ; corrige si hay acarreogoto incminu ; va a incrementar los minutosretlw 0 ; retorna si no hay incremento de minutos

incminu movwf segund ; corrige si hay acarreo en el siguiente dígitoincf minuto,f ; • ; el programa continúa, aquí se puede hacer las correcciones para • ; contar los minutos, horas, días, etc.

Page 172: Curso PIC

172

En el programa anterior observamos que el microcontrolador está un tiempo inactivo, mientras espera el desbordamiento del TMR0. Para este programa, puede no ser problema alguno, pero en otros programas se necesita administrar mejor el tiempo del microcontrolador. Esto se puede solucionar si el microcontrolador tuviera una interrupción que avisara que ya se llenó el TMR0. Sin embargo los PIC de la gama media no tienen este recurso, cosa que sí tienen los PICs de gamas más avanzadas.

Si se desea aprovechar mejor un programa de un PIC de la gama básica, entonces se sugiere que el programa que se esté ejecutando realice sus actividades mientras el TMR0 está contabilizando el tiempo. Es importante que mientras se ejecuta dicho programa, el tiempo no exceda al de un ciclo del TMR0, porque sino, al evaluar su salida, pudo ya haber pasado por cero, y entonces habrá que esperar otro desbordamiento del temporizador.

Una consideración respecto al programa anterior

INICIO

Page 173: Curso PIC

173

Un pequeño pulso se pierde en el muestreoEntrada de un

Oscilador Externo o Salida del Escalamiento

Salida del Oscilador Externo/Escalamiento Después del muestreo

01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04

(3)

(1)

Incremento del tem-porizador TMR0 (Q4)Temporizador TMR0

INICIO

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.

Al no usar el escalamiento, la señal del oscilador externo entra directamente al bloque de sincronización. Esta sincronización de TOCKI con la fase del oscilador interno, se realiza por medio del muestreo de la salida escalada en los ciclos Q2 y Q4 de la fase del oscilador interno. Por consiguiente, se necesita que TOCKI esté en 1 por lo menos dos veces el periodo del oscilador y en 0 al menos otro intervalo de tiempo igual. Véase la siguiente figura:

Uso de un oscilador externo para TMR0

Page 174: Curso PIC

174

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.

INICIO

Page 175: Curso PIC

175

En la mayoría de los microcontroladores, se incorpora un temporizador

independiente llamado “perro Guardián” (Watchdog Timer). Éste tiene

la finalidad de reiniciar el programa principal o atender una interrupción,

cuando ocurre una anormalidad en la ejecución de la secuencia de

instrucciones programadas. Básicamente esta “anormalidad” hará que el

programa ejecute un lazo sin retorno, y por tanto el microcontrolador no

hará la función que se le había asignado. Si esto ocurre, y se dispone de

un temporizador “perro guardián”, éste, después de un tiempo de

espera, enviará la señal de interrupción que repondrá al

microcontrolador y podrá ser capaz de iniciar o continuar el programa

principal. Es de suponer, que si se va a utilizar este temporizador, el

programa principal debe borrarlo en un tiempo menor al tiempo de

espera especificado por el temporizador, porque de lo contrario el

programa nunca se ejecutaría completamente.

3.11 Temporizador WDT (Perro Guardián)

INICIO

Page 176: Curso PIC

176

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.

El temporizador WDT puede ser deshabilitado permanentemente al

colocar en “0” el bit de configuración WDTE. Véase el tema IV, acerca de

los bits de configuración para los microcontroladores 16C5X.

INICIO

Page 177: Curso PIC

177

El período de espera del temporizador WDT, es de alrededor 18 mSeg cuando no tiene escalamiento. Si se desea un mayor tiempo de espera, este período se puede aumentar por medio del escalamiento hasta 128 veces. Para ello se debe colocar en “1” los bits PSA, PS2, PS1 y PS0 del registro OPTION. De esta manera, se puede obtener un tiempo de espera normal de hasta 2,3 segundos. Este periodo puede variar con la temperatura, VDD y las tolerancias en las especificaciones.

Período del temporizador WDT

INICIO

Page 178: Curso PIC

178

REGISTROS ASOCIADOS CON EL TEMPORIZADOR WDT (PERRO GUARDIÁN):

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

INICIO

Consideraciones al programar el Temporizador WDT:

La instrucción CLRWDT borra el contenido del temporizador WDT y el escalamiento, si éste ha sido asignado a WDT. Esto permitirá que no ocurra una inicialización del microcontrolador.

La instrucción SLEEP, borra el contenido del temporizador WDT y el escalamiento, si éste ha sido asignado a WDT. El “perro guardián” (WDT) “despertará” al microcontrolador en el tiempo máximo de espera fijado por el WDT.

Page 179: Curso PIC

179

Programa que utiliza el WDT para prevenir lazos infinitos

INICIO

Veamos el ejemplo del contador de segundos y minutos. Sabemos que el programa deberá chequear continuamente el temporizador TMR0. Una manera de prevenir que el programa se “guinde” es de la siguiente manera:

tmr0full movf TMR0,wbtfss STATUS,Z ; Chequea si el TMR0 está en 0goto tmr0fullmovlw d'61'movwf TMR0 ; carga el valor 61 para que se ejecuten 195 ciclos de tmr0clrwdt ; Borra el temporizador WDTincf segund,f ; Se incrementan los segundos•••

Recordemos que el WDT reiniciaría el microcontrolador cada 18mSeg aproximadamente, si no se borra antes de que transcurra ese tiempo, ya que este valor no se puede ampliar porque el TMR0 está utilizando el escalador. Si sabemos que el TMR0 se carga cada 10mSeg, entonces podría ser una buena alternativa colocar la instrucción de borrado del WDT después de cargar el valor en el TMR0.Es importante tomar en cuenta, que el WDT se activa por medio de los bits de configuración al hacer la programación del PIC, lo cual se verá en el próximo tema.

Page 180: Curso PIC

180

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.

INICIO

Page 181: Curso PIC

TEMA 4Características Especiales del Hardware

CONTENIDO

4.1.- Configuración de la serie PIC16C5X

4.2.- Modo SLEEP (Reposo)

4.3.- Inicialización de los PIC16C5X

4.4.- El Temporizador de Inicialización (DRT)

4.5.- Inicialización por Encendido (POR)

INICIO

Page 182: Curso PIC

182

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.

INICIO

Page 183: Curso PIC

183

En la dirección FFFh de los microcontroladores de la serie 16C5X, se

dispone de una palabra de configuración de 12 bits, de los cuales 4 bits

tienen funciones específicas. Cuando se va a grabar el programa en el

microcontrolador, se tiene acceso a esta dirección. Para ello, se dispone

de una ventana que permite configurar algunas características del

hardware del microcontrolador.

Estos bits pueden programarse para seleccionar algunas funciones de

Hardware del microcontrolador.

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.

4.1.- Configuración de la serie PIC16C5X

INICIO

Page 184: Curso PIC

184

CP WDTE FOSC0FOSC1

Bit 11 10 9 8 7 6 5 4 3 2 1 Bit 0

Registro CONFGDirección FFFH

Bits 11-4: No utilizados: Se leen “0”

Bit 3: CP: Bit de protección de códigos

1-> No protegido

0-> Protegido

Bit 2: WDTE: Habilitación del temporizador WDT (Perro Guardián)

1-> Habilitado

0-> Inhabilitado

Diagrama de la palabra de configuración

INICIO

Page 185: Curso PIC

185

Los microcontroladores PIC tienen la posibilidad de proteger el programa grabado en memoria al acceder al bit 3 de la palabra configuración.

Si este Bit tiene valor 0, entonces no será posible leer el programa guardado.

Habilitación del Temporizador WDT

El temporizador WDT se utiliza normalmente para reiniciar el programa principal, cuando ocurre una anormalidad.

En el bit 2 de la palabra de configuración se puede habilitar o no este temporizador, al colocar un 1 ó un 0 respectivamente.

Protección de códigos

INICIO

Page 186: Curso PIC

186

Los microcontroladores PIC16C5X, pueden operar en uno de cuatro modos de oscilación; para ello, el usuario deberá programar dos de los bits de configuración del microcontrolador.

En la palabra de configuración, que sólo se accede a ella en el modo de programación, se encuentran los bits FOSC1 y FOSC0 (bits 1 y 0 respectivamente).

De acuerdo a la combinación de ellos, se puede escoger lo siguiente:

LP Cristal resonante a bajo consumo (00)

XT Cristal resonante (01)

HS Cristal resonante de alta velocidad (10)

RC Resistencia y condensador (11)

Selección del Oscilador

INICIO

Page 187: Curso PIC

187

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

Señal de un osciladorexterno

Abierto

OSC1

OSC2PIC 16C5X

INICIO

Page 188: Curso PIC

188

Tipo de Frecuencia C1 C2 Oscilador resonante

LP 32KHz 15 pF 15pF

XT 100KHz 15-30 pF 200-300 pF 200KHz 15-30 pF 100-200 pF

455KHz 15-30 pF 15-100 pF 1MHz 15-30 pF 15-30 pF 2MHz 15 pF 15 pF 4MHz 15 pF 15 pF

HS 4MHz 15 pF 15 pF 8MHz 15 pF 15 pF 20MHz 15 pF 15 pF

C2(1)

RS(2)

SLEEP

Hacia lógicainterna

RF(3)

OSC2

XTAL

C1(1) OSC1PIC16C5X

NOTAS:

1.- Ver tabla de selección de C1 y C2

2.- Puede ser necesario colocar una resistencia en cristales sin blindajes

3.- El valor de RF depende del cristal seleccionado

INICIO

Tabla de Selección

Page 189: Curso PIC

189

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

Rext

OSC1

PIC16C5X

OSC2/ClkOUTFOSC/4Vss

Cext

Reloj Interno

N

INICIO

Page 190: Curso PIC

190

Valores típicos de frecuencia que sepueden obtener en el modo RC

Cext Rext FrecuenciaVdd= 5V, Tamb=25ºC

20pF3.3K5K

10K100K

5,0MHz3,8MHz2,2MHz260KHz

100pF3.3K5K

10K100K

1,6MHz1,2MHz680KHz72KHz

300pF3.3K5K

10K160K

660KHz480KHz270KHz29KHz

INICIO

Page 191: Curso PIC

191

Los microcontroladores PIC, tienen la posibilidad de estar en un modo de operación de bajo nivel de consumo. Sin embargo, durante ese tiempo, no podrá ejecutar instrucciones, tal como si estuviera durmiendo. Luego podrá despertar para funcionar en el modo normal, por medio de una señal de inicialización.

Para estar en el modo “Reposo”, se deberá ejecutar en el programa la instrucción SLEEP. Si el temporizador “perro guardián” está habilitado, al ejecutar la instrucción SLEEP, borrará el contenido del registro WDT, para dar comienzo el tiempo de espera seleccionado según el escalamiento del WDT, y enviar después la señal del temporizador “perro guardián”. Por otro lado, el bit TO o tiempo de espera (bit 4 de STATUS), se coloca en “1”, y el bit PD o baja potencia (bit 3 de STATUS), se coloca en “0”, entonces el oscilador se detiene. Los puertos de entrada y salida mantienen el estado anterior a la ejecución de la instrucción SLEEP.

Si se desea un consumo aún menor en este estado, se deberá colocar el terminal TOCKI a un nivel fijo (VDD o VSS) y la entrada MCLR/Vpp deberá colocarse a un nivel alto.

4.2.- Modo SLEEP (Reposo)

INICIO

Page 192: Curso PIC

192

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.

Un cero en el bit TO, indicará que el tiempo de espera en el WDT “despertó al microcontrolador”.

INICIO

Page 193: Curso PIC

193

Los microcontroladores PIC pueden iniciar sus funciones de las siguientes

formas:

Inicialización por encendido (POR).

Inicialización MCLR (operación normal).

Inicialización MCLR al “despertar” (desde el modo Reposo o SLEEP).

Inicialización WDT (operación normal).

Inicialización del WDT para “despertar” (desde el modo Reposo o

SLEEP).

La siguiente tabla muestra las condiciones de los bits de los registros PCL

y STATUS, después de una inicialización.

4.3.- Inicialización de los PIC16C5X

INICIO

Page 194: Curso PIC

194

Nota: “x” significa “cualquier valor”; “u” significa que mantiene el valor anterior

Condición PCLDirección: 02h

STATUSDirección: 03h

Inicialización por encendido 1111 1111 0001 1xxx

Inicialización MCLR(operación normal)

1111 1111 000u uuuu

Inicialización MCLR al“despertar” (desde modo

Reposo)

1111 1111 0001 0uuu

Inicialización WDT(operación normal)

1111 1111 0000 1uuu

Inicialización WDT al“despertar” (desde modo

Reposo)

1111 1111 0000 0uuu

INICIO

Page 195: Curso PIC

195

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.

TO PD Inicialización fue causada por:

1 1 Encendido (POR)

u u Inicialización MCLR (Operación Normal)

1 0 Inicialización MCLR al despertar

0 1 Inicialización WDT (Operación Normal)

0 0 Inicialización WDT Al despertar

INICIO

Page 196: Curso PIC

196

Registro Dirección Inicialización porEncendido

Inicialización porMCLR o WDT

W N/A xxxx xxxx uuuu uuuu

TRIS N/A 1111 1111 1111 1111

OPTION N/A - - 11 1111 - - 11 1111

INDF 00h xxxx xxxx uuuu uuuu

TMRO 01h xxxx xxxx uuuu uuuu

PCL(1) 02h 1111 1111 1111 1111

Estados de los registros, después de una inicialización

Nota: “x” significa “cualquier valor”.

“u” significa que mantiene el valor anterior.

INICIO

Page 197: Curso PIC

197

Registro Dirección Inicialización porEncendido

Inicialización porMCLR o WDT

STATUS 03h 0001 1xxx 000??uuu

FSR 04h 1xxx xxxx 1000 0000

PORTA 05h --- xxxx ---- uuuu

PORTB 06h xxxx xxxx uuuu uuuu

07h-7Fh xxxx xxxx uuuu uuuuRegistros de

propósitos generales

INICIO

Page 198: Curso PIC

198

En la siguiente figura, se muestra el diagrama de bloques del circuito de inicialización:

Detector de EncendidoVDD

MCLR/VDD

z

Oscilador RC

Interno

Contador de 8 Bits Asincrónico

(Temporizador de Arranque)

Inicio S Q

QR

Inicialización del Chip

POR (Inicializació

n por Encendido)

Tiempo de espera del

WDT

INICIO

Page 199: Curso PIC

199

El temporizador de inicialización (DRT) es un circuito interno, basado en un oscilador RC, que introduce un tiempo de espera nominal de 18mseg, antes de la inicialización del microcontrolador.

El retardo en la inicialización que introduce este circuito, permite la estabilización de la frecuencia de oscilación en el circuito resonante que fija los ciclos del microcontrolador; lo cual evita la necesidad de colocar una red RC externa para este propósito.

El DRT también se activa después de un tiempo de espera del “perro guardián” (WDT), lo cual es importante para aplicaciones en las que “despertará” al microcontrolador, después del modo “dormir” o reposo.

4.4. El Temporizador de Inicialización (DRT)

INICIO

Page 200: Curso PIC

200

Los microcontroladores de la familia PIC16C5X incorporan un circuito de inicialización por encendido dentro del chip, para la mayoría de las situaciones. Para utilizar estas facilidades, el diseñador simplemente debe colocar el terminal MCLR/Vpp al voltaje de alimentación Vpp.

Los circuitos de la inicialización por encendido (POR) y del temporizador de inicialización (DRT), están muy relacionados. Cuando se enciende el microcontrolador, el registro de inicialización se coloca en “1” y se borra el DRT. Luego el DRT arranca cuando detecta un “1” en la línea MCLR. Después de un tiempo de espera, que dura aproximadamente 18mseg, se pone en “0” el registro de inicialización y de esta manera se genera la señal de inicialización.

Un ejemplo de encendido en donde MCLR no se conecta a VDD se grafica en la siguiente figura:

4.5. Inicialización por encendido (POR)

INICIO

Page 201: Curso PIC

201

POR INTERNO

MCLR

VDD

ESPERA DRT

INICIALIZACIÓN INTERNA

TDRT

V1

El VDD aumenta y se estabiliza antes de que MCLR sea

igual a “1”. La inicialización se efectuará un tiempo después de

que MCLR sea “1” y será fijado por el DRT.

INICIO

Page 202: Curso PIC

202

INICIALIZACIÓN INTERNA

VDD

MCLR

POR INTERNO TDRT

ESPERA DRT

V1

El caso conveniente se consigue cuando MCLR se conecta

a VDD. El valor de VDD permanece estable antes de que se cumpla

el tiempo de espera en el DRT, y no hay problemas en obtener la

inicialización adecuada.

La siguiente figura muestra el caso en que MCLR se conecta a VDD.

INICIO

Page 203: Curso PIC

203

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:

VDD

INICIALIZACIÓN INTERNA

MCLR

POR INTERNO

ESPERA DRT

V1

TDRT

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.

INICIO

Page 204: Curso PIC

204

Si se desea mayor información, consultar la nota de aplicación AN522 en el “Embedded Control Handbook” o en www.microchip.com.

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

C

MCLR

PIC16C5X

INICIO

Page 205: Curso PIC

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

TEMA V

Otros Microcontroladores de la Gama Básica

INICIO

Cesar Alvarez
Page 206: Curso PIC

206

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.

INICIO

Page 207: Curso PIC

207

5.2 Familia de los microcontroladores

PIC de la gama básica

A continuación se presentan otros modelos de microcontroladores PIC de la gama básica con sus características:

INICIO

Producto Memoria de programa RAM Líneas Encapsulado Temporizadores Veloc. Otras características MCU Bytes OTP/EPROM ROM Bytes E/S y WDT Máx.

Page 208: Curso PIC

208

Familia de los microcontroladores PIC de la gama básica con memoria FLASH

A continuación se presentan los dos modelos de microcontroladores PIC de la gama básica con memoria FLASH y sus características:

INICIO

ProductoMCU

Memoria de programa

FLASH

RAMBytes

LíneasE/S

Encapsulado

Temporiza-dores y

WDT

Velocidad

Máx.

OtrasCaracterística

s

PIC16F54 512X12 25 12 18/PDIP18/SOIC 20/SSOP

1-8 bits1-WDT

20MHz Memoria FLASH

PIC16F57 2KX12 72 20 1-8 bits1-WDT

20MHz 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.

Page 209: Curso PIC

209

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.

Cada conexión tiene su propia función específica

INICIO

Page 210: Curso PIC

210

5.4 Organización de las memorias de los microcontroladores PIC

de la gama básicaSabemos 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.

INICIO

PC<8:0>

NIVEL DE PILA 1NIVEL DE PILA 2

MEMORIA DE

PROGRAMA

VECTOR DE INICIALIZACIÓN

000h

0FFh100h

1FFh

Espaciopara

memoriadel

usuario

CALL, RERLW9

Memoria de programa de los PIC16C54 y 55

Page 211: Curso PIC

211

Organización de las memorias de los microcontroladores PIC16C56, 57 y 58

PC<9:0>

NIVEL DE PILA 1NIVEL DE PILA 2

MEMORIA DE

PROGRAMA(página 0)

VECTOR DE INICIALIZACIÓN

000h

0FFh100h1FFh

Espaciopara

memoriadel

usuario

CALL, RERLW10

MEMORIA DE

PROGRAMA(página 1)

200h2FFh300h

3FFh

Memoria de programa del PIC16C56

PC<10:0>

NIVEL DE PILA 1NIVEL DE PILA 2

MEMORIA DE

PROGRAMA(página 0)

VECTOR DE INICIALIZACIÓN

000h

0FFh100h

1FFh

Espaciopara

memoriadel

usuario

CALL, RERLW11

MEMORIA DE

PROGRAMA(página 1)

200h

2FFh300h3FFh400hMEMORIA

DEPROGRAMA(página 2)MEMORIA

DEPROGRAMA(página 3)

4FFh500h

6FFh700h

7FFh

Memoria de programa del PIC16C57 y 58

5FFh600h

INICIO

Page 212: Curso PIC

212

5.5 Registro STATUS

R = bit de lectura W = bit de escritura -N = Valor después de la inicialización.

Bit 7: PA2: No se usa para la serie 16C5X

Bit 6-5: PA1-PA0: Página seleccionada de la memoria de programa (PIC 16C56/57/58)

00 = Pág. 0 = (000h - 1FFh)01 = Pág. 1 = (200h - 3FFh)10 = Pág. 2 = (400h - 5FFh) PIC16C57/5811 = Pág. 3 = (600h - 7FFh) PIC16C57/58

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x

PA2 PA1 PA0 TO PD Z DC C

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

INICIO

Hemos visto en la descripción del PIC16C54 que el registro STATUS se ubica en la dirección 03h en la memoria de datos. Este registro tiene unos bits que indican los estados de las operaciones lógicas y aritméticas, la detección del tipo de inicialización y la selección de página de la memoria de programa.

A continuación se presentan los bits del registro STATUS y más abajo, la explicación de los bits PA1 y PA0, los cuales son los bits que se utilizan para la selección de página de la memoria de programa.

Page 213: Curso PIC

213

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:

5.6 Registro Contador de Programa PC

PIC16C56

7 PA0

STATUS

0

9 8 7 0

PC PCL

Palabra de Instrucción

8 7 0

PC PCL

Palabra de Instrucción

PIC16C54/55

PIC16C57/58

10 9 8 7 0

PC PCL

Palabra de Instrucción2

7

PA1 PA0

STATUS

0

INICIO

Page 214: Curso PIC

214

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.

Algunas de las instrucciones donde el PCL es el destino, o se le modifica el contenido, son: MOVWF PCL, ADDWF PCL y BSF PCL, 5. Recuerda que la dirección del PCL es la 2

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.

INICIO

Page 215: Curso PIC

215

8 7 0

PC PCL

Palabra de Instrucción

PIC16C54/55

Inicialización A “0”

7 PA0

STATUS

0

9 8 7 0

PC PCL

Palabra de Instrucción

Inicialización A “0”

PIC16C56

PIC16C57/58

10 9 8 7 0

PC PCL

0 Palabra de Instrucción

2

7PA1 PA0

STATUS

0

INICIO

Page 216: Curso PIC

216

El contador de programa (PC) es cargado en la última dirección de la memoria de programa cuando hay una inicialización (RESET), lo cual significa que la dirección del PC se coloca al finalizar la dirección de la última página, es decir al valor del vector inicialización.

Los bits de la página preseleccionada en el registro STATUS, son borrados después de una inicialización, lo cual significa que se preselecciona la página 0. Por consiguiente, después de la inicialización, una instrucción GOTO en la posición del vector inicialización, hará que el programa salte a la página 0.

Si ocurre una inicialización inadecuada (por ejemplo una baja de tensión en la alimentación), los bits de preselección de página, en el registro STATUS, pueden no ser borrados. Por consiguiente, es una buena práctica de programación borrar el registro STATUS (CLRF STATUS) en la posición del vector de inicialización para que después el PC se coloque en la posición 000h.

Efectos de la inicialización

INICIO

Page 217: Curso PIC

217

Consideraciones para las páginasen los PIC 16C56/57/58

Si el contador de programa está apuntando a la última dirección de una

página seleccionada, cuando éste se incremente, hará que el programa

continúe hacia la página siguiente. Sin embargo, los bits de la página

preseleccionada en el registro STATUS, no se actualizarán. Por

consiguiente, la próxima instrucción GOTO, CALL o de modificación del

PCL, enviará al programa a la página especificada por los bits

preseleccionados de página (PA0 o PA1).

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.

INICIO

Page 218: Curso PIC

218

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.

En la memoria de datos se ubican los registros de funciones especiales y los de propósitos generales. En las siguientes páginas, podrás observar la ubicación de los registros en los microcontroladores PIC de la serie 16C5X. En ellos encontrarás que los dispositivos de 28 terminales, tienen al puerto C ubicado en la posición 07h, que corresponde a un registro de propósito general para los microcontroladores de 18 terminales. Por otro lado, observarás que los PIC16C57 y PIC16C58 tienen una memoria RAM de mayor capacidad, y por tanto el acceso se hace por medio del registro FSR, ya sea de manera indirecta a través del registro INDF o directa, por medio de los bits 6 y 5 del registro FSR, ya que éstos indican el banco de memoria a utilizar, que está especificado de acuerdo a su valor en binario.

ecuerda

INICIO

Page 219: Curso PIC

219

5.7 Memoria de datos PIC16C54, 55 y 56

INDF(1)

TMROPCL

STATUS

FSRPORTA

PORTB

00h01h

02h

03h

04h

05h

06h

07h

0Fh10h

1Fh

REGISTROS DE

PROPÓSITOSGENERALES

MEMORIA DE DATOS DE LOS PIC16C54 Y 56

MEMORIA DE DATOS DEL PIC16C55

INDF(1)

TMROPCL

STATUS

FSRPORTA

PORTB

00h01h

02h

03h

04h

05h

06h

07h

0Fh10h

1Fh

REGISTROS DE

PROPÓSITOSGENERALES

PORTC

(1) El registro INDF, no corresponde a una posición física, sino al registro cuya dirección está contenida en el registro FSR.

INICIO

Page 220: Curso PIC

220

Memoria de datos PIC16C57

INDF(1)

TMROPCL

STATUSFSR

PORTAPORTB

00h01h02h03h04h05h06h07h

08h

0Fh

REGISTROS DE

PROPÓSITOSGENERALES

PORTC

00 01 10 11

REGISTROS DE

PROPÓSITOSGENERALES

10h

1Fh

FSR<6:5>Dirección

de registro

REGISTROS DE

PROPÓSITOSGENERALES

30h

3Fh

REGISTROS DE

PROPÓSITOSGENERALES

50h

5Fh

REGISTROS DE

PROPÓSITOSGENERALES

70h

7Fh

20h 40h 60h

Este Mapa de Direccionesretoma a las direccionesdel Banco 0

2Fh 4Fh 6Fh

Banco 0 Banco 1 Banco 2 Banco 3

MEMORIA DE DATOS DEL PIC16C57

INICIO

Page 221: Curso PIC

221

Memoria de datos PIC16C58

INDF(1)

TMROPCL

STATUSFSR

PORTAPORTB

00h01h02h03h04h05h06h07h

0Fh

REGISTROS DE

PROPÓSITOSGENERALES

00 01 10 11

REGISTROS DE

PROPÓSITOSGENERALES

10h

1Fh

FSR<6:5>Dirección de registro

REGISTROS DE

PROPÓSITOSGENERALES

30h

3Fh

REGISTROS DE

PROPÓSITOSGENERALES

50h

5Fh

REGISTROS DE

PROPÓSITOSGENERALES

70h

7Fh

20h 40h 60h

Este Mapa de Direccionesretoma a las direccionesdel Banco 0

2Fh 4Fh 6Fh

Banco 0 Banco 1 Banco 2 Banco 3

MEMORIA DE DATOS DEL PIC16C58

INICIO

Page 222: Curso PIC

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

TEMA VI

Microcontrolador PIC16F84A

INICIO

Cesar Alvarez
Page 223: Curso PIC

223

Objetivos Terminales:

• Establecer las diferencias de software y hardware entre los microcontroladores de la gama básica y los de la gama media.

• Explicar la arquitectura del microcontrolador PIC16F84.

• Diseñar circuitos básicos con microcontroladores de la gama media.

INICIO

Page 224: Curso PIC

224

6.1- INTRODUCCIÓN

Los microcontroladores de la gama básica son útiles para aplicaciones sencillas, en donde se realiza una tarea a la vez. Ejemplos de estas aplicaciones, pueden ser los relojes digitales, las combinaciones de cajas fuertes y cerraduras, medidores de frecuencia, tacómetros y algunos circuitos básicos de control.

Cuando una aplicación se hace más compleja, se podría añadir circuitos externos a estos microcontroladores; sin embargo, la idea de utilizar estos dispositivos consiste en reducir considerablemente el número de componentes, y por tanto, el espacio y el consumo de energía en los circuitos de diferentes aplicaciones. Por ejemplo. Suponiendo que se necesita diseñar un circuito que sea capaz de controlar un sistema con varias señales analógicas a la vez; si utilizáramos un microcontrolador de la gama básica, tendríamos que añadir al circuito: un convertidor analógico a digital, uno o más multiplexers analógicos, posiblemente se deba agregar más memoria RAM, se necesitaría utilizar una EEPROM externa para guardar constantes del sistema y constantes de calibración, y así el circuito se haría bastante complejo, de tal forma, que quizás sea más indicado utilizar un microprocesador que un microcontrolador.

Como se ha visto en la primera sección de esta guía, existen microcontroladores que internamente tienen los elementos que nombramos anteriormente, y por lo tanto hay la posibilidad de diseñar equipos con cierta complejidad utilizando un solo microcontrolador. En esta sección se verán los microcontroladores de la gama media a partir del PIC16F84.

INICIO

Page 225: Curso PIC

225

6.2- Familia de la serie PIC16F8X

INICIO

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

A continuación, se presenta la familia PIC16F8X con sus características principales:

Page 226: Curso PIC

226

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:

Microcontrolador PIC16F84A PIC16C54JW

Memoria de Programa 1Kx14 tipo Flash 0,5Kx12 tipo EPROM

Memoria de datos 68 bytes tipo RAM

64 bytes tipo EEPROM

25 bytes tipo RAM

Manejo de interrupciones 4 0

Número de líneas de E/S digitales

13 12

Número de temporizadores 2: TMR0 y WDT 2: TMR0 y WDT

INICIO

Page 227: Curso PIC

227

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.

INICIO

Page 228: Curso PIC

228

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.

INSTRUCCIONES DE SALTO, se realizan en dos ciclos porque ejecutan un salto hacia la dirección de retorno.

RETFIE ; Retorno y habilitación de interrupción, el PC toma el valor del TOS (Pila) RETURN ; Retorno de subrutina, el PC toma el valor del TOS (Pila)

Cambios en las INSTRUCCIONES DE CONTROL

OPTION MOVWF OPTION_REG ; Las posiciones de estos registros están enTRIS f MOVWF TRISF ; el banco 1 de la RAM (BSF STATUS,RP0)

INICIO

Page 229: Curso PIC

229

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.

INICIO

Page 230: Curso PIC

230

Ubicación de los registros del microcontrolador PIC16F84A

INICIO

Banco 0 Banco 1

En la siguiente tabla, se presentan las direcciones y los nombres de los registros del PIC16F84A.

Notas:

(1) Al igual que el PIC16C54, el registro indirecto “INDF”, no corresponde a una posición fija en la RAM; al acceder a ese registro, se lee o escribe en el registro señalado en la dirección señalada por el registro FSR.

(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.

Page 231: Curso PIC

231

Asignación de bits en cada registro

INICIO

Dirección NombreValor después de encender

Valor después de otra inicialización

Page 232: Curso PIC

232

Como en el caso de los microcontroladores de la gama básica, este registro está ubicado en la dirección 03h de la memoria de datos, y contiene los bits de estado de la Unidad Lógica y Aritmética, el estado de la inicialización (RESET), y los bits de selección de los bancos de registros de la memoria de datos.

Los bits de STATUS de los PIC de la gama básica y el PIC16F84A tienen las mismas funciones, con la excepción de que los bits de selección de página en los microcontroladores de la gama básica se cambian por los de selección de banco de los registros de la memoria de datos. Observa las diferencias en el tema 3.

6.6- Registro STATUS

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x

IRP RP1 RP0 TO PD Z DC C

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

R = bit de lectura W = bit de escritura -N = Valor después de la inicialización.

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 datos00 = 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)

INICIO

Page 233: Curso PIC

233

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.

INICIO

Page 234: Curso PIC

234

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”.

AUTOR: César ÁlvarezDISEÑO INSTRUCCIONAL:M. Sánchez y C. Álvarez

100

0

20

40

60

80

Programa Principal:

Lee posición de la memoria

Convierte a 7 segmentos

Escribe valor en el indicador

Interrupción:

Lee la señal

Convierte a digital

Guarda en memoria

INICIO

Page 235: Curso PIC

235

Fuentes de interrupción en el PIC16F84A

En el PIC16F84A, el vector de interrupción está ubicado en la dirección 4h de la memoria de programa. Esto significa que en esa posición comienza la rutina de interrupción, y por lo tanto, el programa principal no debería tener nada escrito allí.

Debemos considerar lo siguiente acerca de las interrupciones en el PIC16F84A:

• Una interrupción puede ocurrir debido a diversas causas. Para el PIC16F84A estas causas pueden ser:

• Una activación en la entrada RB0/INT

• Un desbordamiento en la cuenta del temporizador 0 (TMR0).

• El cambio de estado de uno de los 4 terminales de mayor peso del puerto B.

• La finalización de la escritura en la EEPROM.

• Cuando se atiende una interrupción, el microcontrolador deshabilita automáticamente cualquier otra interrupción que pueda ocurrir, al colocarse en 0 el bit GIE del registro INTCON. Al salir de la rutina de interrupción, por medio de la instrucción RETFIE se vuelve a habilitar automáticamente la atención de alguna otra interrupción.

• Las interrupciones se pueden habilitar o deshabilitar por software al escribir un 1 o un 0 en el bit GIE del registro INTCON.

• Cada interrupción se puede habilitar o deshabilitar individualmente según los bits de control del registro INTCON.

INICIO

Page 236: Curso PIC

236

El registro INTCONControl de interrupciones

La mayor parte de las indicaciones de las fuentes de interrupción y las habilitaciones de interrupción, se encuentran en el registro INTCON. En el caso de las habilitaciones de las interrupciones, un 1 indica habilitado y un 0 indica deshabilitado. Para el caso de las indicaciones, un 1 señala que ocurrió el evento, es decir que podrá interrumpir si hay habilitación y un 0 que no ha ocurrido nada.

• GIE. Habilitación global de interrupciones. Si GIE = 0 no se acepta ninguna de las interrupciones. Si GIE = 1, se aceptan solamente las interrupciones habilitadas.

• EEIE. Habilitación de interrupción por finalización de la escritura en la EEPROM.

• T0IE. Habilitación de interrupción por desbordamiento de TMR0 (Temporizador 0).

• INTE. Habilitación de interrupción por la activación del terminal RB0/INT.

• RBIE. Habilitación de interrupción por cambio de estado en RB7, RB6, RB5 ó RB4.

• T0IF. Indicador de un desbordamiento en TMR0.

• INTF. Indicador de la activación en el terminal RB0/INT.

• RBIF. Indicador de un cambio de estado en RB7, RB6, RB5 ó RB4.

INICIO

INTCONGIE EEIE T0IE INTE RBIE T0IF INTF RBIF

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

Page 237: Curso PIC

237

Guardar W y STATUS en la rutina de interrupción

En el momento de ejecutar una rutina de interrupción, es sumamente importante guardar los registros W y STATUS, además de algún otro que pueda ser utilizado en el programa principal y que la rutina de interrupción los modifique.

En los PICs de la gama media esta labor no es tan directa como en otros microcontroladores, los cuales utilizan las instrucciones PUSH y POP. Aquí hay que tomar en cuenta el banco seleccionado por la RAM en el programa principal, el cual al interrumpir al microcontrolador, no sabemos cuál está seleccionado. En el caso del PIC 16F84A, los registros de propósitos generales que se acceden en el banco 0, corresponden a la misma dirección en el banco 1, de esta manera bastaría con salvar los registros W y STATUS como se muestra a continuación:

Rut_interr movwf W2 ; se guarda el valor de w en W2. swapf STATUS,w ; se utiliza esta instrucción, ya que movf afecta al bit Z de STATUSmovwf STATUS2 ; Se guarda el STATUS en STATUS2 con los nibbles intercambiados • ; Se ejecuta la rutina de interrupción • •swapf STATUS2,w ; se recupera el valor del STATUS con los nibbles en la posición originalmovwf STATUSswapf W2,f ; se toma el valor de W2 con los nibbles intercambiadosswapf W2,w ; se recupera el valor de w. retfie ; Retorno de la interrupción

INICIO

Page 238: Curso PIC

238

Ejemplo de interrupción por TMR0

include "P16F84A.INC" ; Incluye los símbolos del PIC16F84A • ; Definición de símbolos, tales como: segundo, minuto, hora, día, etc.org 0 ; Dirección inicial del programa en el microcontroladorgoto prepara ; En prepara se establece la selección de TMR0, interrupciones, puertos, etc.org 4 ; Dirección donde comienza la rutina de interrupción

interrupt btfsc INTCON,T0IF ; Evalúa si la interrupción fue del TMR0goto tmr0full ; si es 1 atiende rutina de TMR0btfsc eecon1,eeif ; Evalúa si la interrupción fue de la EEPROM •

tmr0full movwf W2 ; se guarda el valor de w en W2, para recuperarlo al retornoswapf STATUS,wmovwf STATUS2 ; Se guarda el STATUS en STATUS2, para luego recuperarlomovlw d'61‘movwf TMR0 ; carga el valor 61 decimal para que se ejecuten 195 ciclos de tmr0incf segundo,f ; Se incrementan los segundoscall ajuste ; En ajuste se cambia los incrementos a la bases numéricas adecuadasswapf STATUS2,w ; se recupera el valor del STATUSmovwf STATUSswapf W2,fswapf W2,w ; se recupera el valor de wbcf INTCON,T0IF ; se borra el bit de interrupción de TMR0retfie ; Se regresa al programa principal. En la rutina ajuste, se pueden hacer • ; todos los ajustes para llevar la cuenta del tiempo real

prepara movlw b'00000110‘ ; Selección del preescalador a TMR0 y división por 128movwf TMR0 ; Se carga a TMR0 con un valor diferente de 0 ó 0FF para no interrumpir aúnbsf STATUS,RP0 ; Selecciona banco 1 para acceder a los registros OPTION y TRISmovwf REG_OPTION ; Carga al registro OPTION la configuraciónmovlw b’11100000 ; Se habilita interrupción global, la de TMR0 y la EEPROMmovwf INTCONT ; Después de esta instrucción, continúa otras inicializaciones y el programamovlw b’xxxxxxxx’ ; Palbra de configuración del puerto Amovwf TRISA ; Configura puerto A • • • • •

INICIO

Page 239: Curso PIC

239

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.

INICIO

Page 240: Curso PIC

240

Explicación de los registros relacionados con la EEPROM

Para acceder a las direcciones de la EEPROM en el PIC16F84A, se deberá utilizar los registros: EEADR, EEDATA, EECON1 y EECON2. Las direcciones son: 08h y 09h en el banco 0 y, 88h y 89h en el banco 1 respectivamente.• EEADR: Es el registro de 8 bits que tiene la dirección del dato de la

EEPROM. El PIC16F84, sólo puede acceder a 64 bytes de la EEPROM, por lo tanto estas direcciones están comprendidas desde la dirección 0h hasta la 3Fh.

• 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.

• EEIF, Bit 4 (Indicador de finalización de escritura). Un 1 indicará que se completó el ciclo de escritura. Se deberá colocar en 0 por medio del programa.

• EECON2: En este registro se coloca una secuencia clave para evitar grabaciones accidentales.

INICIO

Page 241: Curso PIC

241

Escribir un dato en la EEPROM

El registro EECON2 se utiliza para colocar el código de control en la escritura de datos de la EEPROM y evitar una grabación accidental de la misma. Para ello, después de habilitar la escritura de la EEPROM al poner en 1 el bit WREN de EECON1, se deberá escribir en EECON2 el código 55h y luego el código AAh; finalmente, para grabar el dato que está en el registro EEDATA en la dirección marcada por el registro EEADR que fija la dirección de la EEPROM, se deberá escribir un 1 en el bit WR del registro ECON1. Un programa propuesto que realiza la escritura de un byte en la EEPROM es el que se presenta a continuación:

BCF STATUS, RP0 ; En el banco 0 están los registros EEADR y EEDATAMOVLW DIRECCION ; DIRECCION indica la posición donde se guardaráMOVWF EEADR ; el dato en la EEPROMMOVLW DATO ; DATO es el valor que irá a la EEPROMMOVWF EEDATA ; BSF STATUS, RP0 ; Selecciona banco 1 de la RAMBCF INTCON, GIE ; Deshabilita interrupciones al escribir EEPROMBCF EECON1, EEIF ; Se borra el bit indicador de finalización de escritura

. BSF EECON1, WREN ; Habilita escritura en la EEPROMMOVLW 55h ; MOVWF EECON2 ; Escribe código 55h en EECON2 MOVLW 0AAh ; (Códigos de protección para no grabar accidental-MOVWF EECON2 ; mente un dato) Escribe código AAH en EECON2BSF EECON1,WR ; Comienza la grabación del datoBSF INTCON,GIE ; Habilitación global de interrupciones

INICIO

Page 242: Curso PIC

242

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 EEADRMOVLW DIR_LECT ; Dirección de lectura en WMOVWF 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. INICIO

Page 243: Curso PIC

243

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.

6.9 Registro contador de programa

PIC16F84

12 11 10

9 8 7 0

PC PCL

Palabra de Instrucción27 4

PCLATCH 4-3

PCLATCH

0

11

INICIO

Page 244: Curso PIC

244

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

PIC16F84

12 11 10 9 8 7 0

PC PCL

Resultado de la ALU5

7

PCLATCH4-0

PCLATCH

0

INICIO

El vector de inicialización del PIC16F84A está en la dirección 3FFh, esto significa que la primera instrucción del programa se debe colocar en esa dirección.

Page 245: Curso PIC

245

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.

Una instrucción RETLW, RETURN o RETFIE cargará el contenido del nivel 1 de la pila al PC y el del nivel 2 al nivel 1 y así sucesivamente, hasta colocar el nivel 8 al 7. Si más de ocho instrucciones entre RETLW, RETURN o RETFIE se ejecutan, la pila se llenará con la dirección almacenada previamente en el nivel 8.

6.10 Registro STACK (pila)

INICIO

Page 246: Curso PIC

246

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:

TMR0 WDT OPTION INTCON

INICIO

Page 247: Curso PIC

247

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.

Palabra de Configuración en el PIC16F84A: CP CP CP CP CP CP CP CP PWRTE WDTE FOSC0FOSC1

Bit 11 10 9 8 7 6 5 4 3 2 1 Bit 0

INICIO

Page 248: Curso PIC

248

TEMA VIIMICROCONTROLADORES 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

INICIO

Page 249: Curso PIC

249

Objetivos Terminales:

Establecer las diferencias de hardware entre el microcontrolador PIC16F84A y los PIC16F87XDescribir las características de los PIC16F87XExplicar el uso de las interrupciones en los PIC16F87XDescribir cada uno de los módulos de hardware de los PIC16F87XDiseñar circuitos con microcontroladores PIC16F87X

INICIO

Page 250: Curso PIC

250

7.1 Generalidades de los PIC16F87X

INICIO

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.

Todas estas características colocan a los PIC16F87X como la familia de microcontroladores de la gama media de mayor cantidad de recursos, y que obviamente se presentan como soluciones a una gran diversidad de desarrollos.

Page 251: Curso PIC

251

7.2 La familia de los PIC16F87X

INICIO

Anteriormente ya habíamos presentado a la familia de los PIC16F87X. Conviene volverlos a mostrar, y esta vez observa mejor las características que presentan cada uno de sus miembros y la comparación con el PIC16F84A:

Microcontrolador

PIC16F84

PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 PIC16F876 PIC16F877

FLASH (Programa)

1Kx14 2K x 14 2K x 14 2K x 14 4K x 14 4K x 14 8K x 14 8K x 14

RAM(Datos)

64 bytes

128 bytes 128 bytes 128 bytes 192 bytes 192 bytes 368 bytes 368 bytes

EEPROM(Datos

permanentes)

64 bytes

64 bytes 64 bytes 64bytes 128 bytes 128 bytes 256 bytes 256 bytes

Puertos A,B A, B, C A,B,C,D,E A, B, C A, B, C A,B,C,D,E A, B, C A,B,C,D,E

Entradas Analógicas

No 5 canales 8 canales 5 canales 5 canales 8 canales 5 canales 8 canales

Captura, Comparación y Modulador de ancho de

pulso

No 1 1 1 2 2 2 2

Puerto serial

No AUSART AUSART M2CSPI AUSART/ M2CSPI

AUSART/ M2CSPI

AUSART/ M2CSPI

AUSART/ M2CSPI

Temporizadores

1-8bits, WDT

1-16bits2-8bits,

WDT

1-16bits, 2-

8bits,WDT

1-16bits, 2-8bits,

WDT

1-16bits, 2 8bits, WDT

1-16bits, 2-8bits, WDT

1-16bits, 2-8bits,

WDT

1-16bits2-8bits,

WDT

Page 252: Curso PIC

252

Conexiones de los PIC16F870/72/73/76

INICIO

Page 253: Curso PIC

253

Conexiones de los PIC16F871/74/77

INICIO

Page 254: Curso PIC

254

7.3 Registros de funciones especiales

INICIO

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

Page 255: Curso PIC

255

PIC16F870 y 871

Banco 0 Banco 1 Banco 2 Banco 3

En la siguiente tabla, se presentan las direcciones y los nombres de los registros de los PIC16F870 y PIC16F871.

Notas:(1) El registro indirecto “INDF”,

no corresponde a una posición fija en la RAM; al acceder a ese registro, se lee o escribe en el registro señalado en la dirección indicada por el registro FSR.

(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.

(3) El PIC16F870 no tiene los puertos D y E ni los registros TRIS correspondientes.

INICIO

Page 256: Curso PIC

256

PIC16F872

Banco 0 Banco 1 Banco 2 Banco 3

INICIO

En la siguiente tabla, se presentan las direcciones y los nombres de los registros del PIC16F872.

Notas:(1) El registro indirecto “INDF”,

no corresponde a una posición fija en la RAM; al acceder a ese registro, se lee o escribe en el registro señalado en la dirección indicada por el registro FSR.

(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.

Page 257: Curso PIC

257

PIC16F873 y 874

Banco 0 Banco 1 Banco 2 Banco 3

INICIO

En la siguiente tabla, se presentan las direcciones y los nombres de los registros de los PIC16F873 y PIC16F874.

Notas:(1) El registro indirecto “INDF”,

no corresponde a una posición fija en la RAM; al acceder a ese registro, se lee o escribe en el registro señalado en la dirección indicada por el registro FSR.

(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.

(3) El PIC16F873 no tiene los puertos D y E ni los registros TRIS correspondientes.

Page 258: Curso PIC

258

PIC16F876 y 877

Banco 0 Banco 1 Banco 2 Banco 3

INICIO

En la siguiente tabla, se presentan las direcciones y los nombres de los registros de los PIC16F876 y PIC16F877.

Notas:(1) El registro indirecto “INDF”,

no corresponde a una posición fija en la RAM; al acceder a ese registro, se lee o escribe en el registro señalado en la dirección indicada por el registro FSR.

(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.

(3) El PIC16F876 no tiene los puertos D y E ni los registros TRIS correspondientes.

Page 259: Curso PIC

259

Bits de los Registros de Funciones Especiales (Banco 0)

INICIO

Page 260: Curso PIC

260

Bits de los Registros de Funciones Especiales (Banco 1)

INICIO

Page 261: Curso PIC

261

Bits de los Registros de Funciones Especiales (Bancos 2 y 3)

INICIO

Page 262: Curso PIC

262

Diferencias entre los registros de funciones especiales de los PIC16F87X

Los PIC16F87X tienen más registros de funciones especiales que el PIC16F84. En la siguiente tabla, podemos observar aquellos registros diferentes entre ellos, sus respectivas ubicaciones y a qué función está asociada:

INICIO

Funciones asociadas

Registro PIC16F870 PIC16F871

PIC16F872 PIC16F873

PIC16F874 PIC16F876 PIC16F877

PORTD ----- 08h ----- ----- 08h ----- 08h

Puerto TRISD ----- 88h ----- ----- 88h ----- 88h

Paralelo PORTE ----- 09h ----- ----- 09h ----- 09h

TRISE ----- 89h ----- ----- 89h ----- 89h

SSPBUF ----- ----- 13h 13h 13h 13h 13h

Módulo de SSPCON ----- ----- 14h 14h 14h 14h 14h

Comunicación SSPCON2 ----- ----- 91h 91h 91h 91h 91h

Serial SSPADD ----- ----- 93h 93h 93h 93h 93h

Síncrona SSPSTAT ----- ----- 94h 94h 94h 94h 94h

RCSTA 18h 18h ----- 18h 18h 18h 18h

Puerto TXTA 98h 98h ----- 98h 98h 98h 98h

de Comunicación TXREG 19h 19h ----- 19h 19h 19h 19h

Serial Universal SPBRG 99h 99h ----- 99h 99h 99h 99h

USART RCREG 1Ah 1Ah ----- 1Ah 1Ah 1Ah 1Ah

Segundo módulo CCPR2L ----- ----- ----- 1Bh 1Bh 1Bh 1Bh

de Comparación, CCPR2H ----- ----- ----- 1Ch 1Ch 1Ch 1Ch

Captura y PWM CCP2CON ----- ----- ----- 1Dh 1Dh 1Dh 1Dh

Page 263: Curso PIC

263

7.4 Las Interrupciones de los PIC16F87X

Los microcontroladores PIC de la serie 16F87X de 28 terminales tienen 13 fuentes de interrupción, y los de 40 terminales tienen 14 fuentes de interrupción. Esta cantidad de fuentes de interrupción obedece a que estos microcontroladores cuentan con más periféricos que el PIC16F84. Entre ellos podemos nombrar: El convertidor analógico a digital, el módulo de comparación, captura y modulador de ancho de pulso (PWM), el módulo de comunicación serial y el módulo de comunicación paralela.Los registros asociados a las interrupciones son los siguientes:

Registro Función Direcciones

INTCON Habilitación y señalizado de interrupciones 0

0BH, 8BH, 10BH, 18BH

PIE1 Habilitación de Interrupciones 1 8CH

PIE2 Habilitación de Interrupciones 2 8DH

PIR1 Indicador de Interrupciones 1 0CH

PIR2 Indicador de Interrupciones 2 0DHBá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.

INICIO

Page 264: Curso PIC

264

El registro INTCONControl de interrupciones

El registro INTCON contiene algunas de las indicaciones de las fuentes de interrupción y las habilitaciones de interrupción. En el caso de las habilitaciones de las interrupciones, un 1 indica habilitado y un 0 indica deshabilitado. Para el caso de las indicaciones, un 1 señala que ocurrió el evento, es decir que podrá interrumpir si hay habilitación y un 0 que no ha ocurrido nada. Los bits del registro INTCON son:

• GIE. Habilitación global de interrupciones. Si GIE = 0, no se acepta ninguna de las interrupciones. Si GIE = 1, se aceptan solamente las interrupciones habilitadas.

• PEIE. Habilitación de interrupciones de dispositivos que no se controlan con INTCON.

• T0IE. Habilitación de interrupción por desbordamiento de TMR0 (Temporizador 0).

• INTE. Habilitación de interrupción por la activación del terminal RB0/INT.

• RBIE. Habilitación de interrupción por cambio de estado en RB7, RB6, RB5 ó RB4.

• T0IF. Indicador de un desbordamiento en TMR0.

• INTF. Indicador de la activación en el terminal RB0/INT.

• RBIF. Indicador de un cambio de estado en RB7, RB6, RB5 ó RB4.

INICIO

INTCON (Acceso a todos los bancos por medio de la dirección 0BH)GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

Page 265: Curso PIC

265

Registro PIE1

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

PIE1 (8CH)PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

INICIO

El registro PIE1 contiene 8 bits que se utilizan para la habilitación de ocho de las interrupciones de los PIC16F87X.

Page 266: Curso PIC

266

Registro PIE2

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

PIE2 (8DH)--- 0 --- EEIE BCLIE --- --- CCP2IE

bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0

(1) Este bit es reservado y deberá mantenerse en “0”

INICIO

El registro PIE2 contiene 3 bits que se utilizan para la habilitación de tres de las interrupciones de los PIC16F87X.

Page 267: Curso PIC

267

Registro PIR1

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

PIR1 (0CH)PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

INICIO

El registro PIR1 contiene 8 bits que se utilizan para la indicación de ocho de las interrupciones de los PIC16F87X.

Page 268: Curso PIC

268

Registro PIR2

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

PIR2 (0DH)--- 0 --- EEIF BCLIF --- --- CCP2IF

bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0

(1) Este bit es reservado y deberá mantenerse en “0”

INICIO

El registro PIR2 contiene 3 bits que se utilizan para la indicación de tres de las interrupciones de los PIC16F87X.

Page 269: Curso PIC

269

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:

Rut_interr ; Las direcciones de W2 y STATUS2 deben estar entre 70h y 7Fhmovwf W2 ; se guarda el valor de w en W2.swapf STATUS,w ; se utiliza esta instrucción, ya que movf afecta al bit Z de STATUSmovwf STATUS2 ; Se guarda el STATUS en STATUS2 con los nibbles intercambiados • ; Se ejecuta la rutina de interrupción • ; Al final de la interrupción se escribe lo siguienteswapf STATUS2,w ; se recupera el valor del STATUS con los nibbles en la posición movwf STATUS ; original, ya que se había guardado con los nibbles intercambiadosswapf W2,f ; se toma el valor de W2 con los nibbles intercambiadosswapf W2,w ; se recupera el valor original de w. retfie ; Retorno de la interrupción INICIO

Page 270: Curso PIC

270

En el caso de losPIC16F873 y PIC16F874

En los PIC16F873 y 874, no encontramos registros que se acceden en los cuatro bancos, sino en el 0 y 2 ó en el 1 y 3. Es decir que con el control de RP0, podemos guardar y recuperar W y STATUS. Guardar W y STATUS se hace más complejo que en los otros PIC16F87X, y se sugiere hacerlo como se presenta a continuación:

Push btfss STATUS,RP0 ; Chequea si el programa principal señala al banco 0goto rp0_en_0bcf STATUS,RP0 ; Si no estaba, selecciona el banco 0 para guardarmovwf W2 ; w y STATUSswapf STATUS,wmovwf STATUS2bsf STATUS2,1 ; Nótese que se cambia el bit guardado que correspondegoto rutint ; a RP0, que pasó de la posición 5 a 1 con el swapf

rp0_en_0 movwf W2 ; Si el programa principal señala el banco 0 no se swap STATUS,w ; realizan modificacionesmovwf STATUS2

rutint • ; Rutina de interrupción •

pop swapf STATUS2,wmovwf STATUS ; se recupera el status, pero como pudo haber cambiadobtfss STATUS,RP0 ; RP0, se chequea para recuperar correctamente a W2goto recup_w ; en el banco 0bcf STATUS,RP0swap W2,fswap W2,wbsf STATUS,RP0 ; se coloca como estaba RP0 en el programa principalretfie

recup_w swapf W2,f ; si RP0 era 0, no se hace cambios y se recupera wswapf W2,wretfie

INICIO

Page 271: Curso PIC

271

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.

INICIO

Page 272: Curso PIC

272

7.5 Las Memorias EEPROM y FLASH

En los PIC16F87X, se pueden escribir o leer datos, tanto en la EEPROM, como en la memoria FLASH. Para escribir o leer la EEPROM, básicamente se ejecutan los mismos pasos que con el PIC16F84, con la diferencia de que en los PIC16F87X hay que colocar en 0 el bit EEPGD (bit 7) del registro EECON1 (dirección 18CH), para seleccionar la EEPROM. Para leer o escribir la memoria FLASH necesitaremos que los registros de dirección y de datos tengan mayor longitud, porque la FLASH es de 14 bits de contenido, y entre 11 y 13 bits de dirección. Por lo tanto se agregarán los registros EEADRH, para los bits más significativos de la dirección, y EEDATAH, para los bits más significativos del contenido a grabar en la FLASH.

La escritura en la FLASH puede protegerse por áreas o totalmente, por medio de los bits de configuración. Estos bits se acceden en el momento de grabar el programa, al utilizar un programador de microcontroladores.

INICIO

Page 273: Curso PIC

273

Registros asociados para la lectura y escritura de la EEPROM y la FLASH

En la siguiente tabla se presentan los registros asociados para la lectura y escritura de las memorias 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 y BOR

OtrosResets

0BH (todos los bancos)

INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x

0000 000u

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

18DH EECON2 Registro

de control

de la EEPROM

y la FLASH

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

INICIO

Page 274: Curso PIC

274

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.

INICIO

Page 275: Curso PIC

275

Escribir un dato en la EEPROM

El registro EECON2 se utiliza para colocar el código de control en la escritura de datos de la EEPROM y evitar una grabación accidental de la misma. Para ello, después de habilitar la escritura de la EEPROM al poner en 1 el bit WREN de EECON1, se deberá escribir en EECON2 el código 55h y luego el código 0AAh; finalmente, para grabar el dato que está en el registro EEDATA en la dirección marcada por el registro EEADR que fija la dirección de la EEPROM, se deberá escribir un 1 en el bit WR del registro ECON1. Un programa propuesto que realiza la escritura de un byte en la EEPROM es el que se presenta a continuación:

BCF STATUS, RP0 ; En el banco 2 están los registros EEADR y EEDATABSF STATUS, RP1 ;MOVF DIRECCION,W ; En DIRECCION está la posición donde se guardaráMOVWF EEADR ; el dato en la EEPROMMOVF DATO,W ; En DATO está el valor que irá a la EEPROMMOVWF EEDATA ; BSF STATUS, RP0 ; Selecciona banco 3 de la RAMBCF INTCON, GIE ; Deshabilita interrupciones al escribir EEPROMBCF EECON1, EEPGD ; Selecciona acceso a la EEPROMBCF EECON1, EEIF ; Se borra el bit indicador de finalización de escritura

. BSF EECON1, WREN ; Habilita escritura en la EEPROMMOVLW 55h ; MOVWF EECON2 ; Escribe código 55h en EECON2 MOVLW 0AAh ; (Códigos de protección para no grabar accidental-MOVWF EECON2 ; mente un dato) Escribe código AAH en EECON2BSF EECON1,WR ; Comienza la grabación del datoBSF INTCON,GIE ; Habilitación global de interrupciones

INICIO

Page 276: Curso PIC

276

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:

BCF STATUS, RP0 ; Selecciona banco 2 para EEADRBSF STATUS, RP1 :MOVLW DIR_LECT ; Dirección de lectura en WMOVWF EEADR ; Dirección de lectura en EEADRBSF STATUS, RP0 ; Selecciona banco 3 para EECON1BCF EECON1, EEPGD ; Selecciona acceso a la EEPROMBSF EECON1, RD ; Lectura de la EEPROMBCF STATUS, RP0 ; Selecciona banco 2 para EEDATAMOVF 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. INICIO

Page 277: Curso PIC

277

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.

BCF STATUS, RP0 ; En el banco 2 están los registros EEADR, EEADRH, BSF STATUS, RP1 ; EEDATA y EEDATAHMOVF DIRECCIONH,W ; En DIRECCIONH está la posición más significativa dondeMOVWF EEADRH ; se guardará el dato en la FLASHMOVF DIRECCIONL,W ; En DIRECCIONL está la posición menos significativa dondeMOVWF EEADR ; se guardará el dato en la FLASHMOVF DATOH,W ; En DATOH está el valor más significativo del datoMOVWF EEDATAH ; MOVF DATOL,W ; En DATOL está el valor menos significativo del datoMOVWF EEDATABSF STATUS, RP0 ; Selecciona banco 3 de la RAMBCF INTCON, GIE ; Deshabilita interrupciones al escribir en la FLASHBSF EECON1, EEPGD ; Selecciona acceso a la FLASHBCF EECON1, EEIF ; Se borra el bit indicador de finalización de escritura

. BSF EECON1, WREN ; Habilita escritura en la EEPROMMOVLW 55h ; MOVWF EECON2 ; Escribe código 55h en EECON2 MOVLW 0AAh ; (Códigos de protección para no grabar accidental-MOVWF EECON2 ; mente un dato) Escribe código AAH en EECON2BSF EECON1,WR ; Comienza la grabación del datoNOP ; El microcontrolador ignora estas dos instrucciones y continúaNOP ; después de terminar el proceso de grabaciónBSF INTCON,GIE ; Habilitación global de interrupcionesBCF EECON1, WREN ; Se deshabilita la escritura para prevenir un borrado accidental

INICIO

Page 278: Curso PIC

278

Lectura de un dato en la FLASH

Una sección de programa para leer un dato de la FLASH, es la que se muestra a continuación:

BCF STATUS, RP0 ; Selecciona banco 2 para EEADRBSF STATUS, RP1 :MOVLW DIR_LECTH ; Dirección más significativa de lectura en WMOVWF EEADRH ; DIR_LECTH en EEADRHMOVLW DIR_LECTL ; Dirección menos significativa de lectura en WMOVWF EEADR ; DIR_LECTL en EEADRBSF STATUS, RP0 ; Selecciona banco 3 para EECON1BSF EECON1, EEPGD ; Selecciona acceso a la FLASHBSF EECON1, RD ; Lectura de la FLASHNOP ; Después de esta instrucción, la memoria de programaNOP ; es leída en los siguientes dos ciclosBCF STATUS, RP0 ; Selecciona banco 2 para EEDATAMOVF EEDATA, W ; Coloca dato bajo leído de la FLASH en WMOVWF DATOL ; Parte menos significativa del dato en DATOLMOVF EEDATAH,W ; Coloca dato alto leído de la FLASH en WMOVWF DATOH ; Parte más significativa del dato en DATOH

Al igual que en el caso de la EEPROM, se considera buena práctica leer los datos, depués de que estos sean grabados.

INICIO

Page 279: Curso PIC

279

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.

Modelo PIC CP1 CP0 Dirección inicial de protección

Dirección final de protección

PIC16F870/871/872 0 0 TODO PROTEGIDO

PIC16F873/874 0 0 0000H 0FFFH

PIC16F873/874 0 1 0800H 0FFFH

PIC16F873/874 1 0 0F00H 0FFFH

PIC16F876/877 0 0 0000H 1FFFH

PIC16F876/877 0 1 1000H 1FFFH

PIC16F876/877 1 0 1F00H 1FFFH

Todos los modelos 1 1 NO PROTEGIDO

INICIO

Page 280: Curso PIC

280

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.

INICIO

Page 281: Curso PIC

281

7.6 El Puerto A, el Puerto Ey el Convertidor A/D

INICIO

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:

Cada terminal se puede configurar como entrada o salida de manera individual mediante el registro TRISA, ubicado en la dirección 85h de la RAM, tal como se hace con el PIC16F84A. Para configurar una función relacionada con el convertidor analógico a digital, se deberá acceder a los registros ADCON0 y ADCON1 (direcciones 1FH y 9FH respectivamente).

RA5/AN4/SS# RA4/TOCKI RA3/AN3/Vref RA2/AN2 RA1/AN1 RA0/AN0

E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL

ENTRADA ANALÓGICA 4

ENTRADA ANALÓGICA 3

ENTRADA ANALÓGICA 2

ENTRADA ANALÓGICA 1

ENTRADA ANALÓGICA 0

MODO ESCLAVO EN COMUNICACIÓN

SERIAL SÍNCRONA

ENTRADA DE RELOJ DEL

TMRO

VOLTAJE DE REFERENCIA A/D

C

Page 282: Curso PIC

282

Registros asociados a PORTA

INICIO

La siguiente tabla muestra los registros asociados al puerto A y la ubicación de los mismos en la memoria RAM.

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.

0--- 00000--- 0000PCFG0

PCFG1

PCFG2

PCFG3

---------ADFMADCON19Fh

0000 00-0

--11 1111

--0u 0000

Otros

Resets

0000 00-0

--11 1111

--0x 0000

Valor en POR y BOR

CHS2

RA5

Bit 5

ADCS0

---

---

Bit 6

ADCS1

---

---

Bit 7

ADCON0

TRISA

PORTA

Registro

ADON---GO/DONE#

CHS0CHS1

1Fh

85h

RA0RA1RA2RA3RA405h

Bit 0Bit 1Bit 2Bit 3Bit 4Dirección

Registro de Configuración de PORTA

Page 283: Curso PIC

283

El Puerto E y las entradas analógicas AN5, AN6 y AN7

Los microcontroladores PIC16F871, 874 y 877 tienen tres entradas analógicas adicionales, las cuales se encuentran en el puerto E (PORTE, dirección 09H).

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

POR y BOROtros

Resets

89h TRISE IBF OBF IBOV PSPMODE

--- 0000 -111

0000 -111

Registro de Configuración de

PORTE

INICIO

Lectura en el modo PSP (RD)

Entrada Analógica 5

E/S DIGITAL

RE0/RD#/AN5

Escritura en el modo PSP (WR)

Entrada Analógica 6

E/S DIGITAL

RE1/WR#/AN6

Selección de Chip en el modo PSP (CS)

Entrada Analógica 7

E/S DIGITAL

RE2/CS#/AN7

c

c

Page 284: Curso PIC

284

El Convertidor Analógico a Digital

Los microcontroladores PIC16F87X poseen un convertidor analógico digital de 10 bits de resolución y cinco canales de entrada en los modelos de 28 terminales (puerto A) y ocho canales en los que tienen 40 terminales (puertos A y E).Este convertidor puede aceptar sólo señales positivas comprendidas entre Vref

+ y Vref-. La resolución que tiene cada bit que procede de la conversión es

función de la tensión de referencia según la siguiente ecuación:

Resolución = (Vref+ - Vref

-)/1024bits

En el caso de que la tensión de referencia positiva (Vref+) sea igual a 5 voltios

y la negativa sea 0V, la resolución será de 4,8mV/bit. La tensión de referencia determina los límites máximo y mínimo de la tensión analógica que puede leer el microcontrolador, y puede seleccionarse externamente por medio de RA3 (Vref

+) y RA2 (Vref-) o emplearse la fuente de alimentación del

microcontrolador (Vdd y Vss).El convertidor analógico digital es el único dispositivo que puede seleccionarse para que esté activo en el modo de reposo, para ello, los pulsos del convertidor deberán conectarse al oscilador RC interno.Los cinco primeros canales de entradas analógicas del PIC16F87X están en el puerto A. Por lo tanto se deben configurar dichas líneas para expresar aquéllas que se utilizarán como entradas analógicas.El convertidor analógico a digital utiliza la técnica de aproximaciones sucesivas y requiere una tensión mayor a 2V y menor a Vdd – Vss como voltaje de referencia.

INICIO

Page 285: Curso PIC

285

Descripción del funcionamiento del AD/C

Para que funcione el convertidor analógico a digital (AD/C), se necesita configurarlo inicialmente. Esto significa que hay que definir las líneas que se utilizarán como entradas analógicas, cuáles van a ser las tensiones de referencia a emplear, la velocidad de conversión del AD/C, cuál oscilador se va a emplear, cómo se escribirá el valor digital en los registros ADRESH y ADRESL, y la habilitación o no de la interrupción por convertidor. Después de esto, en el programa se seleccionará cada canal a convertir seguido de la orden de conversión.

En principio, el AD/C utiliza la técnica de aproximaciones sucesivas y está controlado por un oscilador. Estos pulsos pueden ser una señal proveniente del oscilador de cristal, dividida entre 2, 8 ó 32, o el oscilador RC interno del microcontrolador. Si se selecciona esta última opción, se podrán hacer conversiones durante el modo de reposo. Es importante tomar en cuenta que el tiempo del AD/C para cada bit, no debe ser menor de 1,6μSeg, para que las conversiones se hagan correctamente. En el caso de utilizar el oscilador RC, este tiempo es de aproximadamente 4μSeg.

La señal a convertir se selecciona por medio del multiplexer analógico, luego va al circuito de muestreo y retención y después al convertidor A/D. El tiempo total de lectura está dado por el tiempo de adquisición mas el tiempo que emplea el convertidor.

Un dato importante es conocer el tiempo de lectura de cada señal, para el empleo de circuitos de control. En la siguiente página se muestra el cálculo del tiempo de lectura y la frecuencia de muestreo para la señal correspondiente a un canal.

INICIO

Page 286: Curso PIC

286

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:

tadq = tamp + tcc + tcT

Donde: tamp es el tiempo de establecimiento del amplificador, 2μSeg.

tcc es el tiempo de carga del condensador del circuito de muestreo y retención (sample & hold),

16,5μSeg.

tcT es el tiempo debido al coeficiente de temperatura:

tcT = (T-25°C)0,05μSeg

El tiempo de conversión está dado por 12tAD, donde tAD es el tiempo de conversión de cada bit.

El tiempo de lectura mínimo a 25°C está dado para tAD = 1,6μSeg:

tlect = 2μSeg + 16,5μSeg + 0 + 12x1,6μSeg = 37,7μSeg

La máxima velocidad de muestreo se dará para 40μSeg, dando un margen de 2μSeg para la espera del convertidor y la realización de instrucciones de lectura y ordenamiento, es decir que estará en el orden de las 25K muestras por segundo.

INICIO

Page 287: Curso PIC

287

Configuración del Convertidor A/D

En resumen, los pasos necesarios para configurar el convertidor A/D son:

• Determinar las líneas que se utilizarán como entradas analógicas.

• Seleccionar las tensiones de referencia.

• Seleccionar el oscilador del convertidor.

• Seleccionar el modo de escritura en los registros ADRESH-L del convertidor A/D.

• Activar la interrupción para el convertidor A/D.

INICIO

Page 288: Curso PIC

288

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.

INICIO

Page 289: Curso PIC

289

El oscilador del convertidor A/D

ADCS1 - ADCS0 Frecuencia

00 fosc/2

01 fosc/8

10 fosc/32

11 Osilador RC interno

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:

Nota 1: El tiempo típico de conversión, al utilizar el oscilador interno, es aproximadamente 4μSeg, aunque éste puede estar comprendido entre 2 y 6μSeg.

INICIO

Page 290: Curso PIC

290

Selección de la escritura en los registros ADRESH y ADRESL

En los registros ADRESH y ADRESL se escribe el resultado de la conversión analógica a digital. Por medio del bit ACFM (bit7) que está en el registro ADCON1 (dirección 9FH). Un “1” en el bit ACFM alínea la lectura hacia la derecha, y un “0” lo alínea hacia la izquierda.

INICIO

Page 291: Curso PIC

291

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.

INICIO

PIE1 (8CH)PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

cc

PIR1 (0CH)PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

cc

Page 292: Curso PIC

292

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

INICIO

Page 293: Curso PIC

293

Ejemplo de un programa que configura al convertidor A/D

INICIO

De acuerdo a lo que hemos visto hasta ahora, presentamos a continuación un programa que configura al convertidor A/D, a partir de los siguientes criterios:

N° canales de entrada = 4, tensión de referencia = 2,5V (referida a tierra), Fosc = 20MHz, tiempo de lectura = 40μSeg, lectura alineada a la derecha.

CONFIGADBCF RP1 ; Selecciona el banco 1 de la RAMBSF RP0MOVLW 3F ; Configuración de las líneas del puerto A como entradasMOVWF TRISAMOVLW 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 derechaBSF PIE1,ADIE ; Habilita la interrupción para el AD/CBCF RP1 ; Selecciona el banco 0 de la RAMMOVLW 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.

Page 294: Curso PIC

294

Actividades

INICIO

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.

Page 295: Curso PIC

295

7.7 El Puerto B

INICIO

0000 000x

0000 000x

RBIFINTFTOIFRBIEINTETOIEPEIEGIEINTCON0Bh, 8Bh,10Bh,18B

h

1111 1111

1111 1111

uuuu uuuu

Otros

Resets

1111 1111

1111 1111

xxxx xxxx

Valor en POR y BOR

TOCS

RB5

Bit 5

INTEDEG

RB6

Bit 6

RBPU#

RB7

Bit 7

OPTION_REG

TRISB

PORTB

Registro

PS0PS1PS2PSATOSE81h,181h

86h,186h

RB0RB1RB2RB3RB406h,106h

Bit 0Bit 1Bit 2Bit 3Bit 4Dirección

Registro de Configuración de PORTB

El puerto B dispone de 8 líneas bidireccionales que se utilizan para entradas o salidas digitales. Cada línea se puede programar como salida o entrada al colocar en “0” o en “1” respectivamente el bit asociado en el registro TRISB. Dos de las líneas de este puerto se utilizan en el momento de grabar la memoria de programa del microcontrolador. Estas dos entras son: RB6/PGC (Program Clock) y RB7/PGD (Program Data) para más detalles, ver el anexo 7. El terminal RB0 se puede emplear como entrada de interrupción externa. Por otro lado, es posible hacer la conexión de cada terminal RBn a una resistencia interna asociada a Vdd (Pull-up), al colocar un 0 en el bit RBPU# del registro OPTION REG. Por otro lado, si seleccionas a RB0 como entrada de interrupción, podrás escoger el tipo de transición a la cual se activará ésta. Un “0” en el bit INTEDEG del registro OPTION_REG, hará que la interrupción en el microcontrolador sea por medio de una transición de bajada y un “1”, por una transición de subida. En la siguiente tabla se resume los registros asociados a PORTB.

Page 296: Curso PIC

296

7.8 El Puerto C y losTemporizadores

INICIO

RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA

RC3/SCK/SCL

RC2/CCP1 RC1/T10SC1/

CCP2

RC0/T1OSC0/

T1CKI

E/S DIGITAL E/S DIGITAL E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

RECEPCIÓN USART

TRANSMIS. USART

SALIDA DATOS

SPI

ENTRADA DATOS

SPI

RELOJ SPI ENTRADA CAPTURA

1

ENTR. TMR1ENTR. CAPT2

ENTRADA TMR1

DATOS TRANS

SINCRONA

RELOJ TRANS

SINCRONA

ENTRADA DATOS

I2C

RELOJ I2C SAL COMP1

SAL PWM1

SAL COMP2SAL PWM2

SALIDA TMR1

Debemos tomar en cuenta que los PIC16F870/871/872 sólo tienen un módulo de comparación, captura y PWM. Por otro lado, los PIC16F870/871 no poseen el módulo SPI y el PIC16F872 no tiene el módulo de comunicación USART. Por lo tanto es conveniente tomar en consideración esto al programar el puerto C.

El puerto C dispone de 8 líneas bidireccionales, que están multiplexadas con otras funciones relacionadas con los temporizadores TMR1 y TMR2, la transmisión-recepción serial, la captura, la comparación y la modulación de ancho de pulsos.

Los PIC16F87x tienen tres temporizadores TMR0, TMR1 y TMR2. El funcionamiento de TMR0 es básicamente igual al de los PIC16C54 y PIC16F84A. TMR1 es un temporizador con 16 bits de capacidad y TMR2 contiene 8 bits con pre y post escalamiento.

En la siguiente tabla se muestra las funciones de los terminales del puerto C.

Page 297: Curso PIC

297

El Temporizador TMR1

INICIO

TMR1 es un temporizador con preescalamiento de conteo ascendente, con una capacidad de 16 bits. Esto significa que se necesitan dos registros para cargar un valor entre 0000H y 0FFFFH: TMR1H (dirección 0FH) y TMR1L (dirección 0EH). Al igual que con TMR0 en el PIC16F84A, al haber un desbordamiento en la cuenta, puede generar una interrupción por medio del bit TMR1IF del registro PIR1. La habilitación de esta interrupción se hace por medio del bit TMR1IE del registro PIE1.

Los pulsos de conteo de TMR1 pueden provenir del oscilador del microcontrolador (fosc/4) o externamente a través de los terminales RC0 o RC1. El registro de control de TMR1 es el T1CON y se ubica en la posición 10H. El diagrama de bloques de TMR1 es el que se muestra en la siguiente figura:

Page 298: Curso PIC

298

Registro de control del TMR1:

T1CON

INICIO

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

T1CON (10CH) ---- ---- T1CKPS1 T1CKPS0 T1OSCEN TISYNC# TMR1CS TMR1ON

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

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.

Page 299: Curso PIC

299

Algo más sobre TMR1

INICIO

El TMR1 es colocado automáticamente en 0 cuando en la cuenta hay un desbordamiento al pasar de 0FFFFh. Otra forma de hacer 0 a TMR1 automáticamente, es por medio de los módulos CCPs (Comparación, captura y modulación de ancho de pulso). Para ello, alguno de los módulos CCP1, CCP2 o ambos se deben configurar como comparadores.

Se debe tener cuidado al leer o escribir en TMR1 mientras éste se está incrementando, ya que podría suceder que haya un desbordamiento de uno de los 8 bits, y el valor cambie para uno de los registros. Para evitar esto, se recomienda que, durante una operación de lectura o escritura, se detenga a TMR1. En el caso de que éste no se pueda detener, ya que lleva la cuenta del tiempo real del programa, se recomienda hacer la lectura de la siguiente forma:LEETMR1 MOVF TMR1H, W ; Lee el byte de mayor peso de TMR1 a W

MOVWF TEMPH ; El valor va a un registro temporal TEMPHMOVF TMR1L, W ; Lee el byte de menor peso de TMR1MOVF TEMPL ; El valor va a TEMPLMOVF TMR1H, W ; S vuelve a leer el byte de mayor pesoSUBWF TEMPH, W ; Se restan ambas lecturasBTFSC STATUS, Z ; Si el resultado es cero, no hubo cambio en TMR1H mientras se leíaGOTO CONTINUA ; Por lo tanto, el programa continúaGOTO LEETMR1; ; Sino, se vuelve a leer TMR1

CONTINUA ; Continúa con el programa principal

Al escribir un valor en TMR1, se deberá también tener cuidado de que no haya un incremento en TMR1H mientras se ejecuta la operación. Para evitar esto se podría iniciar la escritura borrando inicialmente a TMR1L.

Page 300: Curso PIC

300

Actividades

INICIO

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.

Page 301: Curso PIC

301

El Temporizador TMR2

INICIO

El temporizador TMR2 es un contador ascendente de 8 bits, que se puede leer y escribir, y también puede realizar funciones con el módulo de comunicación serial SSP y los módulos de captura y comparación. TMR2 se ubica en la posición 11H de la memoria RAM, utiliza la señal fosc/4, la cual pasa por un pre-escalador, y luego su salida pasa por un post-escalador. El registro de control de TMR2 es T2CON. A continuación se muestra el diagrama de bloques de 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).

Page 302: Curso PIC

302

Registro de control del TMR2:

T2CON

T2SCKPS1 - T2CKPS0 Relación del predivisor

00 1:1

01 1:4

1x 1:16

INICIO

A continuación se describe el funcionamiento de cada uno de los bits del registro T2CON.

T2CON (12CH) ---- - TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2SCKPS1 T2SCKPS0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

Los bits T2SCKPS1 y T2CKPS0 sirven para seleccionar la frecuencia del pre-escalador según la siguiente tabla:

Los bits TOUTPS3 hasta TOUTPS0 sirven para seleccionar la frecuencia del post-escalador según la siguiente tabla: funcionamiento de cada uno de los bits.TOUTPS3 - TOUTPS0 Relación del postdivisor

0000 1:1

0001 1:2

0010 1:3

..... 1:Bn + 1

1110 1:15

1111 1:16

El bit TMR2ON se utiliza para encender con un “1” al TMR2. Un “0 deshabilitará al TMR2.

Page 303: Curso PIC

303

7.9 El Puerto C y los Módulos de Captura, Comparación y PWM

INICIO

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:

SALIDA TMR1

ENTRADA TMR1

E/S DIGITAL

RC0/T1OSC0/

T1CKI

SAL COMP2SAL PWM2

ENTR. TMR1ENTR. CAPT2

E/S DIGITAL

RC1/T10SC1/

CCP2

SAL COMP1SAL PWM1

RELOJ I2CENTRADA DATOS I2C

RELOJ TRANS

SINCRONA

DATOS TRANS

SINCRONA

ENTRADA CAPTURA 1

RELOJ SPI ENTRADA DATOS SPI

SALIDA DATOS

SPI

TRANSMIS. USART

RECEPCIÓN USART

E/S DIGITALE/S DIGITALE/S DIGITALE/S DIGITAL

E/S DIGITALE/S DIGITAL

RC2/CCP1RC3/SCK/SCLRC4/SDI/SDARC5/SDORC6/TX/CKRC7/RX/DT

c

c

c

Page 304: Curso PIC

304

El Registro CCP1CON

INICIO

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.

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

0110 Modo captura con cada 4 flancos ascendentes en RC2/CCP1

0111 Modo captura con cada 16 flancos ascendentes en RC2/CCP1

1000 Modo comparación que activa el terminal RC2/CCP1 al coincidir valores

1001 Modo comparación que desactiva el terminal RC2/CCP1 al coincidir valores

1010 Modo comparación que genera una interrupción (no afecta al terminal RC2/CCP1)

1011 Modo comparación que pone a 0 TMR1 y provoca interrupciones periódicas

11xx Modo PWM

CCP1CON (17H)

---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

Page 305: Curso PIC

305

El Registro CCP2CON

INICIO

Al igual que CCP1CON, en el registro CCP2CON se utilizan 4 bits para configurar la función del módulo CCP2, los cuales son CCP2M3-CCP2M0; los bits CCP2X y CCP2Y 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 de ese ciclo de trabajo se encuentran en el registro CCPR2L. A continuación se presenta la disposición de los bits de CCP2CON y el modo de trabajo de CCP2 según los valores de CCP2M3 – CCP2M0.

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

CCP2CON (1DH)

---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

Page 306: Curso PIC

306

Modo Captura

INICIO

En este modo, si ocurre un evento en los terminales RC2/CCP1 o RC1/CCP2, el valor del temporizador se carga a los registros CCPR1H-L o CCPR2H-L respectivamente. Esto podría utilizarse para la medición de intervalos de tiempo entre pulsos o para la medición de la duración de un pulso. Sin estos módulos, las mediciones de intervalos de tiempo habrían que hacerla con un temporizador al detectar una interrupción externa, el problema está en que la lectura no será precisa debido a que el temporizador sigue contando mientras se ejecuta la rutina de interrupción que va a leer su contenido. En el modo de captura es importante que el TMR1 esté configurado como temporizador o como contador sincrónico para que la transferencia se haga correctamente. Como se vio en las tablas de los registros CCP1CON y CCP2CON, los eventos pueden darse como: una detección de una transición de subida, una detección de una transición de bajada, una detección de 4 pulsos de transición ascendente o una detección de 16 pulsos de transición ascendente. La selección se hace por medio de los bits CCP1M3-0 ó CCP2M3-0, según el módulo que se vaya a utilizar.La resolución en la medición del tiempo de captura y el período máximo están dados por el ancho de los pulsos que activan al TMR1. Por ejemplo si selecciona a fOSC/4 como entrada del TMR1, el escalamiento es 1:1, y la frecuencia fOSC es igual a 20MHz, entonces la resolución de la medición del intervalo será igual a 200nSeg. El período máximo en el cual se podrá hacer la captura, será igual a 13,107mSeg. ¿Por qué?

Page 307: Curso PIC

307

Esquema del Modo Captura

INICIO

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.

Page 308: Curso PIC

308

Inicialización en el modo Captura

INICIO

A continuación se presenta la sección de un programa para la inicialización del módulo CCP1, para que éste trabaje en el modo Captura.

CLRF CCP1CON ; El módulo CCP es apagadoCLRF TMR1L ; Borra byte de menor peso del temporizador 1CLRF TMR1H ; Borra byte de mayor peso del temporizador 1CLRF INTCON ; Deshabilita interrupciones y borra TOIFBSF STATUS, RP0 ; Selecciona Banco 1BSF TRISC, CCP1 ; Configura CCP como terminal de entradaCLRF PIE1 ; Deshabilita interrupcionesBCF STATUS, RP0 ; Selecciona Banco 0CLRF PIR1 ; Borra avisos de interrupcionesMOVLW 0x06 ; Configura modo de captura, cada 4 transiciones

ascendenteMOVWF CCP1CON ;BSF T1CON, TMR1ON ; Arranca el temporizador 1

; Al estar la interrupción de CCP1 deshabilitada se evalúa; el bit CCP1IF continuamente

CAPTURABTFSS PIR1, CCP1IFGOTO CAPTURA

; Ocurre la capturaBCF PIR1, CCP1IF ; Este bit debe borrarse antes de la próxima comparación

Page 309: Curso PIC

309

Modo Comparación

INICIO

En este modo se compara continuamente los valores de los registros CCPR1H-L o CCPR2H-L con el de TMR1H-L. En el caso de haber coincidencia, ocurre un evento según se haya programado en los registros CCP1CON y CCP2CON. Estos eventos pueden ser: Colocar un “1” en el terminal RC2/CCP1 o RC1/CCP2; colocar un “0” en uno de esos terminales; activar una interrupción por medio de los bits CCP1IF de PIR1 o CCP2IF de PIR2, sin afectar a los terminales mencionados; o poner en 0 al TMR1. En este último caso, si la comparación ocurre con CCPR1H-L, puede activar una interrupción mediante el bit CCP1IF, y si la comparación ocurre con CCPR2H-L, entonces activa una conversión del módulo convertidor analógico a digital.Al trabajar el módulo CCP en el modo comparación, el módulo TMR1 deberá trabajar en modo temporizador o como contador sincrónico para que se haga la comparación correctamente.Al haber en TMR1H-L un valor igual al de CCPR1H-L o CCPR2H-L, se coloca en “1” el bit CCP1IF del registro PIR1 o el indicador CCP2IF del registro PIR2, según la igualdad que se registre. 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 disparar con precisión algún tiristor que controle la velocidad de un motor de corriente alterna. Al igual que en el modo de captura, la precisión del disparo y el tiempo en que éste ocurre, está dada por la frecuencia del oscilador que envía los pulsos a TMR1.

Page 310: Curso PIC

310

Modo Comparación

INICIO

En la siguiente figura se muestra el esquema de funcionamiento en el modo Comparación para el módulo CCP1.

Page 311: Curso PIC

311

Inicialización en el modo Comparación

INICIO

La siguiente sección de programa presenta la configuración del módulo CCP1 para trabajar en el modo Comparación.

CLRF CCP1CON ; El módulo CCP es apagadoCLRF TMR1L ; Borra byte de menor peso del temporizador 1CLRF TMR1H ; Borra byte de mayor peso del temporizador 1CLRF INTCON ; Deshabilita interrupciones y borra TOIFBSF STATUS, RP0 ; Selecciona Banco 1BSF TRISC, CCP1 ; Configura CCP como terminal de entradaCLRF PIE1 ; Deshabilita interrupcionesBCF STATUS, RP0 ; Selecciona Banco 0CLRF PIR1 ; Borra avisos de interrupcionesMOVLW 0x08 ; Configura modo comparación, establece terminalMOVWF CCP1CON ; para la comparaciónBSF T1CON, TMR1ON ; Arranca el temporizador 1

; Al estar la interrupción de CCP1 deshabilitada se evalúa; el bit CCP1IF continuamente

COMPARABTFSS PIR1, CCP1IFGOTO COMPARA

; Ocurre la comparaciónBCF PIR1, CCP1IF ; Este bit debe borrarse antes de la próxima comparación

Page 312: Curso PIC

312

Modo Modulación de Ancho de Pulsos (PWM)

INICIO

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.

Page 313: Curso PIC

313

Duración del ciclo en el PWM

INICIO

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:

TCICLO = (PR2 + 1) X 4 X TOSC X preescalador de TMR2

Para el módulo CCP1, el ancho del pulso estará dado por la siguiente ecuación:

T1 = (CCPR1L,CCP1X,CCP1Y) X Tosc X preescalador de TMR2

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.

Page 314: Curso PIC

314

Diagramas de bloques del PWM

INICIO

A continuación se presenta el diagrama de bloques del modulador de ancho de pulsos para el módulo CCP1.

Page 315: Curso PIC

315

Configuración del PWM

INICIO

La siguiente sección de programa presenta la configuración del PWM.

CLRF CCP1CON ; El módulo CCP es apagadoCLRF TMR2 ; Borra contenido del temporizador 2MOVLW 0x7F ;MOVWF PR2 ;MOVLW 0x1F ;MOVWF CCPR1L ; Configura ciclo de trabajo al 25% del período de PWMCLRF INTCON ; Deshabilita interrupciones y borra TOIFBSF STATUS, RP0 ; Selecciona Banco 1BSF TRiSC, PWM1 ; terminal RC2/PWM1 como terminal de salidaCLRF PIE1 ; Deshabilita interrupcionesBCF STATUS, RP0 ; Selecciona Banco 0CLRF PIR1 ; Borra avisos de interrupcionesMOVLW 0x2C ; Configura modo PWM, 2 bits de bajo peso del cicloMOVWF CCP1CON ; de trabajo = 10BSF T2CON, TMR2ON ; Arranca el temporizador 2

; Al estar la interrupción de CCP1 deshabilitada se evalúa; el bit CCP1IF continuamente

PER_PWMBTFSS PIR1, TMR2IFGOTO PER_PWM

; Se actualiza este período del PWM y sigue siguiente cicloBCF PIR1, TMR2IF ; Este bit debe borrarse antes de la próxima comparación

Page 316: Curso PIC

316

Actividades

INICIO

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.

Page 317: Curso PIC

317

7.10 El Puerto C y el Módulo deComunicació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.

INICIO

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.

Page 318: Curso PIC

318

La comunicación SPI

La comunicación en el modo SPI (Serial Peripheral Interface) permite la transferencia de datos de 8 bits en serie, los cuales se transmiten y reciben en forma síncrona y simultáneamente. El microcontrolador en este tipo de transmisión puede trabajar como “maestro” o como “esclavo”. En el caso de trabajar como “esclavo”, además de utilizar los terminales SDO, SDI y SCK, utilizará una línea adicional de selección de esclavo, la cual se ubica en el terminal RA5/SS# y que deberá ser puesta a nivel “0”.

Para que un dispositivo trabaje como “maestro”, se deberá configurar la línea RC5/SCK como salida. Cuando se trabaja en modo “esclavo”, las líneas RC5/SCK y RA5/SS# se deberán configurar como entradas; esta última se colocará a 0V. Para ambos casos, la línea RC3/SDO se configurará como salida y la línea RC4/SDI se configurará como entrada.

La transferencia de información entre el “maestro” y el “esclavo” se suele hacer de la siguiente manera:• Escritura: El “maestro” envía la dirección,

luego el comando de escritura y después el dato.

• Lectura: El “maestro” envía la dirección, luego el comando de lectura y después el “esclavo” envía el dato.

INICIO

Page 319: Curso PIC

319

Formas de onda en modo Maestro

En la figura siguiente se presentan las formas de ondas para la comunicación en el modo SPI. Nótese las diversas combinaciones que se pueden obtener con la señal de sincronización SCK, según los valores de los bits CKP y CKE, los cuales se ubican en los registros SSPCON y SSPSTAT respectivamente. También se observa cuándo un dato en la entrada SDI se tomará como válido según el valor del bit SMP, ubicado en el registro SSPSTAT. Esto es importante para la compatibilidad en la comunicación con otros dispositivos seriales. Finalmente, podemos ver la línea SSPIF del registro PIR1, la cual se utilizará para interrumpir al programa principal cuando un dato se haya transmitido o recibido.

INICIO

Page 320: Curso PIC

320

Formas de onda en modo Esclavo

Similarmente podemos observar a continuación las formas do onda en modo esclavo.

Para CKE=0

INICIO

Para CKE=1

Page 321: Curso PIC

321

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.

INICIO

Page 322: Curso PIC

322

Registro SSPSTATRegistro de Estatus del MSSP

SMP: Modo de muestreo.

Maestro: 1 muestreo al final del dato de salida.

0 muestreo a la mitad del dato de salida.

Esclavo: Debe ponerse en 0.

CKE: Selección de transición de la señal se sincronización.

Si CKP=0: 1 La transmisión ocurre desde el estado de activación hasta el de reposo de la señal de sincronización.

0 La transición ocurre desde el estado de reposo hasta el de activación de la señal de sincronización.

Si CKP=1: 1 El dato es transmitido en la transición de bajada de SCK.

0 El dato es transmitido en la transición de subidad de SCK.

BF: Registro SSPBUF lleno.

1 Recepción terminada. SSPBUF está lleno.

0 No ha finalizado la recepción. SSPBUF está vacío.INICIO

c

Page 323: Curso PIC

323

Registro SSPCONRegistro de control del MSSP

WCOL: Detección de colisión de bits.

1 Hay colisión; 0 No hay colisión.

SSPOV: Indicador de desbordamiento en la recepción.

1 Se recibió dato sin haber leído SSPBUF; 0 No hay desbordamiento.

SSPEN: Habilitación del puerto serial. Los terminales del puerto serial deben ser configurados apropiadamente como entradas y salidas.

1 Puerto serial habilitado. 0 Terminales configurados como E/S.

CKP: Selección de polaridad de la señal de sincronización (SCK).

1 Estado de reposo de SCK = 1; 0 Estado de reposo de SCK = 0.

SSPM3- Modo de trabajo del MSSP. Para el modo de trabajo del puerto serial

SSPM0: síncrono, ver la tabla de la página siguiente.

INICIO

Page 324: Curso PIC

324

Bits SSPM3-SSPM0

INICIO

Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupción activada y dirección de 10bits

1111

Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupción activada y dirección de 7bits

1110

Modo maestro I2C controlado por firmware1011

Modo maestro I2C con sincronización = Fosc/(4(SSPAD+1))1000

Modo esclavo I2C con dirección de 10 bits0111

Modo esclavo I2C con dirección de 7 bits0110

Modo esclavo SPI con sincronización igual a SCK (SS# no está activo)0101

Modo esclavo SPI con sincronización igual a SCK (SS# = 0)0100

Modo maestro SPI con sincronización igual a la salida de TMR2/20011

Modo maestro SPI con sincronización a Fosc/640010

Modo maestro SPI con sincronización a Fosc/160001

Modo maestro SPI con sincronización a Fosc/40000

Modo de trabajoSSPM3-SSPM0

c

Page 325: Curso PIC

325

Programa ejemplo

INICIO

Configuración y transmisión y recepción en Modo “maestro”CLRF STATUS ; Selección del banco 0

CLRF SSPSTAT, CKE ; SMP = 0, CKE = 0, bits de STATUS en 0

MOVLW 0x31 ; Activa puerto SPI, modo maestro y CLK/16

MOVWF SSPCON ; Los datos se transmiten en transición de bajada

; Los datos se leen en la mitad del pulso (SMP = 0)

BSF STATUS, RP0 ; Selección del banco 1

BSF PIE, SSPIE ; Habilitación de la interrupción SSP

BCF STATUS, RP0 ; Selección del banco 0

BSF INTCON, GIE ; Habilitación global de interrupciones

MOVLW DATOTX ; Se coloca el dato a ser transmitido

MOVWF SSPBUF ; Comienza la transmisión

• ; Lectura de un dato

MOVF SPBUF,W ; Dato pasa a W

MOVWF DATORX ; Se guarda dato en la RAM

MOVF TRANSM,W ; El dato a transmitir va a W

MOVWF SPBUF ; Se carga SPBUF y se transmite el

; dato automáticamente

Page 326: Curso PIC

326

Ejercicio: Transmitir un dato enmodo SPI

INICIO

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.

74XX164

SI

Clock

PIC16F87X

SDO

SCK

Page 327: Curso PIC

327

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.

INICIO

NMOS

VDD1

Page 328: Curso PIC

328

Funcionamiento del protocolo I2C

INICIO

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)

Page 329: Curso PIC

329

Formas de ondas en la transmisióny recepción en el protocolo I2C

Formas de onda para la escritura de datos al “esclavo”:

INICIO

Formas de onda para la lectura de datos desde el “esclavo”:

Page 330: Curso PIC

330

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.

INICIO

Page 331: Curso PIC

331

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”.

INICIO

Page 332: Curso PIC

332

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.

INICIO

0000 00000000 0000A0A1A2A3A4A5A6A7SSPADD93h

0000 00000000 0000TC0TC1TC2TC3TC4TC5TC6TC7TRISC87h

0000 00000000 0000RC0RC1RC2RC3/SClRC4/SDARC5RC6RC7PORTC07h

Page 333: Curso PIC

333

Registro SSPSTAT(Registro de Estatus del MSSP)

INICIO

SMP: Modo de muestreo.1 Control de transición deshabilitado para velocidad estándar (100KHz). 0 Control de transición habilitado para alta velocidad (400KHz).

CKE: Selección de transición de la señal se sincronización.1 Compatibilidad con SMBUS. 0 Compatibilidad con I2C.

D/A: Dato/Dirección1 Último byte fue un dato. 0 Último byte fue una dirección.

P Bit de parada.1 Detección de bit de parada al final. 0 No se detectó bit de parada.

S Bit de arranque.1 Detección de bit de arranque al final. 0 No se detecto el arranque.

R/W Bit de información de lectura y escritura.Modo esclavo: 1 Lectura. 0 Escritura.Modo maestro: 1 Hay una transmisión en proceos. 0 No hay transmisión.

UA Actualización de la dirección.1 Debe actualizarse la dirección. 0 La dirección no se necesita actualizar.

BF Registro SPBUF lleno.Recepción: 1 Recepción completa, SPBUF lleno. 0 Recepción incompleta,

SPBUF vacío.Transmisión: 1 Transmisión en proceso, SPBUF lleno. 0 Transmisión

finalizada.

Page 334: Curso PIC

334

Registro SSPCON(Registro de control del MSSP)

WCOL: Detección de colisión de bits.

1 Hay colisión; 0 No hay colisión.

SSPOV: Indicador de desbordamiento en la recepción.

1 Se recibió dato sin haber leído SPBUF; 0 No hay desbordamiento.

SSPEN: Habilitación del puerto serial. Los terminales del puerto serial deben ser configurados apropiadamente como entradas y salidas.

1 Puerto serial habilitado, configura a SDA y SCL.

0 Terminales configurados como E/S.

CKP: Selección de polaridad de la señal de sincronización (SCL, sólo en modo maestro).

1 Habilita sincronización (reloj); 0 Estado de reposo de SCL = 0.

SSPM3- Modo de trabajo del MSSP. Para el modo de trabajo del puerto serial

SSPM0: síncrono, ver la tabla de la página siguiente.

INICIO

Page 335: Curso PIC

335

Bits SSPM3-SSPM0

INICIO

Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupción activada y dirección de 10bits

1111

Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupción activada y dirección de 7bits

1110

Modo maestro I2C controlado por firmware1011

Modo maestro I2C con sincronización = Fosc/(4(SSPADD+1))1000

Modo esclavo I2C con dirección de 10 bits0111

Modo esclavo I2C con dirección de 7 bits0110

Modo esclavo SPI con sincronización igual a SCK (SS# no está activo)0101

Modo esclavo SPI con sincronización igual a SCK (SS# = 0)0100

Modo maestro SPI con sincronización igual a la salida de TMR2/20011

Modo maestro SPI con sincronización a Fosc/640010

Modo maestro SPI con sincronización a Fosc/160001

Modo maestro SPI con sincronización a Fosc/40000

Modo de trabajoSSPM3-SSPM0

c

Page 336: Curso PIC

336

Registro SSPCON2(Registro de control 2 del MSSP)

GCEN: Habilitación de llamada general (sólo en modo esclavo).

1 Habilita interrupción al detectar dirección 0000H; 0 Deshabilitado.

ACKSTAT: Bit de reconocimiento de estatus (Sólo en modo maestro).

1 No se recibió reconocimiento del esclavo; 0 Si hubo reconocimiento.

ACKDT: Bit de reconocimiento de dato (Sólo en modo maestro).

1 No reconocido. 0 Reconocido.

ACKEN: Reconocimiento de habilitación de secuencia (Sólo en modo maestro).

1 Reconoce secuencia en SDA y SCL y transmite bit de reconocimiento = 0

0 Secuencia de reconocimiento en reposo.

RCEN Bit de habilitación de recepción (Sólo en modo maestro).

1 Habilita modo de recepción; 0 Recepción en reposo.

PEN: Habilitación de la condición de parada (Sólo en modo maestro).

1 Habilita condición de parada en SDA y SCL. 0Condición de parada en reposo.

RSEN: Condición de arranque repetido (Sólo en modo maestro).

1 Inicia condición repetida de arranque en SDA y SCL. 0 Arranque en reposo.

SEN: Habilitación de condición de arranque (Sólo en modo maestro).

1 Inicia condición de arranque en SDA y SCL. 0 Condición de arranque en reposo.

INICIO

Page 337: Curso PIC

337

Configuración del puerto I2C

A continuación se presenta una sección de un programa que configura al puerto I2C en el modo “maestro”.

movlw b’00101000’ ; Carga a w el valor de la configuración

clrf STATUS ; Selección del banco 0

movwf SPCON1 ; Configuración en modo maestro

Para configurar la frecuencia de transmisión a 400KHz, asumiendo que la frecuencia del oscilador del microcontrolador es 16MHz, recurrimos a la ecuación:

ftrsm = fosc/(4(SSPADD+1))

movlw b’00001001’ ; Carga a w el valor de configuración

bsf STATUS,RP0 ; Selección del banco 1

movwf SSPADD ; Configuración de la frecuencia de transmisión a 400KHz

La configuración del control de la transición y fase de la sincronización se hace por medio del registro SSPSTAT.

movlw b’00000000’ ; Carga a W el valor de la configuración del registro SSPTAT

movwf SSPSTAT

Finalmente, se deben programar las líneas SCL y SDA como entradas, para que éstas trabajen en el modo I2C.

movlw b’00000110 ; Carga a W el valor de la configuración del puerto C

movwf TRISC ; Configura a SCL y SDA como entradas

INICIO

Page 338: Curso PIC

338

Implementación y control del puerto I2C

Otro aspecto que debemos tomar en cuenta, es si se va a configurar las interrupciones en el caso de que ocurran eventos tales como si hay un dato en SPBUF (bit SSPIE en el registro PIE1) y si hay una colisión al tratar de enviar un dato (bit BCLIE en el registro PIE2).

Una vez configurado el puerto I2C, entonces vendría la parte de implementación y control. Para ello se deberá seguir los siguientes pasos:

1) Arranque (Start).

2) Continuación (Restart).

3) Parada (Stop).

4) Lectura (recepción).

5) Reconocimiento (Acknowlege, después de una lectura).

ACK (Reconocimiento)

NACK (No reconocimiento)

6) Escritura.

Hasta aquí te hemos dado una introducción relacionada con el puerto I2C. Si deseas saber más detallada sobre este tema, te recomendamos que leas la nota de aplicación AN735,

INICIO

Page 339: Curso PIC

339

Actividad

Para esta sección, te proponemos que ubiques componentes que se comuniquen en el modo I2C y desarrolles programas que establezcan la comunicación con esos dispositivos. Si por alguna razón no te es posible ubicarlos, entonces te proponemos que hagas la comunicación entre dos microcontroladores PIC, de manera que transfieran datos entre uno y otro... Utiliza tu imaginación.

INICIO

Page 340: Curso PIC

340

7.12 El Puerto C y el USART

INICIO

Un USART es un Transmisor y Receptor Serial Asíncrono o Síncrono Universal. Éste es un dispositivo de suma importancia para la comunicación con una diversidad de equipos electrónicos, entre los cuales destacan: Computadores Personales, monitores, programadores, controles industriales, MODEM, etc. Los PICs de la serie 16F87X, con excepción del PIC16F872, tienen un módulo USART que puede trabajar en modo bidireccional asíncrono (full duplex) o en modo síncrono unidireccional (half duplex). Veamos en la siguiente tabla, los terminales del puerto C involucrados con este módulo.

En una transmisión sincrónica el terminal RC7/RX/DT se utiliza para la transferencia de datos en forma serial (DT) y en el terminal R6/TX/CK están los pulsos de sincronización (CK). En modo síncrono, el PIC podrá trabajar en los modos “maestro” o “esclavo”.

En una transmisión asíncrona, el terminal RC7/RX se utiliza para la recepción de datos (RX), mientras que el terminal RC6/TX se emplea para la transmisión de datos (TX).

SALIDA TMR1

ENTRADA TMR1

E/S DIGITAL

RC0/T1OSC0/

T1CKI

SAL COMP2SAL PMW2

ENTR. TMR1ENTR. CAPT2

E/S DIGITAL

RC1/T10SC1/

CCP2

SAL COMP1

SAL PMW1

RELOJ I2CENTRADA DATOS I2C

RELOJ TRANS

SINCRONA

DATOS TRANS

SINCRONA

ENTRADA CAPTURA

1

RELOJ SPI ENTRADA DATOS

SPI

SALIDA DATOS

SCPI

TRANSMIS. USART

RECEPCIÓN USART

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITALE/S DIGITAL

RC2/CCP1RC3/SCK/SCL

RC4/SDI/SDA

RC5/SDORC6/TX/CKRC7/RX/DT

c

c

Page 341: Curso PIC

341

Transmisión Asíncrona

INICIO

En la siguiente figura se muestra un esquema de dos equipos que se comunican de manera serial asincrónica.

La comunicación serial asíncrona es muy utilizada en una gran variedad de aplicaciones, tanto en equipos de computación, como en equipos industriales. Su ventaja radica en que sólo necesita de dos o tres cables para interconectar dos equipos, y por medio de ellos transmitir mensajes. Además de esto, debido a que la comunicación se realiza en forma serial, se adapta muy bien a sistemas de transmisión inalámbrica.

Al USART también se le suele llamar SCI por las siglas “Serial Comunications Interface”, y para el protocolo de transmisión de datos, es muy utilizada la norma RS-232-C.

La configuración del USART se hace mediante los registros: TXSTA (dirección 98h), RCSTA (dirección 18h) y SPBRG (dirección 99h), los cuales corresponden al control del transmisor, el control del receptor y el generador de baudios respectivamente.

RS-232C Tx

Rx

Gnd

Rx

Tx

Gnd

PIC 1 PIC 2

Page 342: Curso PIC

342

Diagrama de bloquesde la transmisión del USART

INICIO

En la siguiente figura se muestra el diagrama de funcionamiento de la sección de transmisión serial del USART que se encuentra en los PIC16F87X.

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.

Page 343: Curso PIC

343

Bits de configuración de la transmisión del USART

INICIO

De acuerdo a la explicación anterior, podemos nombrar los bits que configuran al transmisor del USART ubicados en el registro TXSTA.

CSRC: Selección de la fuente del oscilador.1 Modo Maestro (oscilador interno). 0 Modo esclavo (Oscilador

externo)TX9: Habilitación del bit 9 de transmisión.

1 Transmisión de 9 bits. 0 Transmisión de 8 bits.TXEN: Habilitación de la transmisión.

1 Transmisión habilitada. 0 Transmisión inhabilitada.SYNC: Selección del modo de operación del USART.

1 Modo síncrono. 0 Modo asíncrono.BRGH: Velocidad de transmisión:

1 Velocidad alta. 0 Velocidad baja.TRMT: Estado del registro de transmisión:

1 Registro vacío (transmitió los datos). 0 Registro no vacío.TX9D: Bit 9 del dato a transmitir. Usualmente se utiliza para el bit de paridad.

Page 344: Curso PIC

344

Formas de onda en la transmisión asíncrona

Otra manera de observar el funcionamiento de esta interfaz serial, la podemos analizar de acuerdo al diagrama de las formas de onda involucradas.

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. INICIO

Page 345: Curso PIC

345

Diagrama de bloquesde la recepción del USART

INICIO

Conociendo el funcionamiento de un dispositivo de transmisión serial asíncrona, será más fácil comprender el receptor serial. En principio, el receptor serial deberá ser un dispositivo que lea los datos enviados por el transmisor serial. En la siguiente figura se muestra el diagrama de funcionamiento de la sección de recepción serial del USART que se encuentra en los PIC16F87X.

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.

Page 346: Curso PIC

346

Bits de configuración de la recepción del USART

INICIO

Veamos a continuación la descripción de los bits de configuración del registro RCSTA:

SPEN: Habilitación del puerto serial.1 Puerto serial habilitado. 0 Puerto serial deshabilitado.

RX9: Habilitación del bit 9 de Recepción.1 Recepción de 9bits. 0 Recepción de 8 bits.

SREN: Configuración de la recepción sencilla en modo síncrono maestro.1 Habilita la recepción sencilla. 0 Deshabilita la recepción

sencilla.CREN: Configura la recepción continua.

1 Habilita la recepción continua. 0 Deshabilita la recepción continua.ADDEN: Habilitación de la detección de dirección:

1 Activa la detección de dirección e interrupción. 0 Inhibe la detección de dirección y el bit 9 puede ser utilizado.

FERR: Error de trama:1 Hay error de trama. 0 No hay error de trama.

OERR: Error de desbordamiento1 Hay error de desbordamiento. 0 No hay error de

desbordamiento.RX9D: Bit 9 del dato Recibido. Usualmente se utiliza para el bit de paridad.

Page 347: Curso PIC

347

Formas de onda en la transmisión asíncrona

Otra manera de observar el funcionamiento del receptor serial, la podemos analizar de acuerdo al diagrama de las formas de ondas involucradas.

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.

INICIO

Page 348: Curso PIC

348

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:

Velocidad de transmisión (Baudios o Bits/Seg) = fosc/K(X + 1)

Donde: X es el valor cargado en el registro SPBRGK = 64 si BRGH = 0, y K = 16 si BRGH = 1

En las tablas de la siguiente página, podemos obtener las velocidades de transmisión estandarizadas para la norma RS-232-C, en función de la frecuencia del oscilador y el valor del registro SPBRG y el bit BRGH.

INICIO

Page 349: Curso PIC

349

Determinar la velocidadde transmisión

En el caso de que BGRH=1, obtenemos la siguiente tabla:

En el caso de que BGRH=0, obtenemos la siguiente tabla:

INICIO

Page 350: Curso PIC

350

Pasos para configurar al módulode 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.

INICIO

Page 351: Curso PIC

351

Bits utilizados para latransmisión asíncrona

A continuación se presentan los bits utilizados para configurar la transmisión asíncrona en el USART.

INICIO

En la siguiente página se muestra un programa ejemplo para seguir los pasos mencionados anteriormente.

Page 352: Curso PIC

352

Pasos para configurar al módulode 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.

INICIO

Page 353: Curso PIC

353

Bits utilizados para larecepción asíncrona

A continuación se presentan los bits utilizados para configurar la recepción asíncrona en el USART.

INICIO

En la siguiente página se muestra un programa ejemplo para seguir los pasos mencionados anteriormente.

Page 354: Curso PIC

354

Programa de configuracióndel USART en modo asíncrono

; Configuración del USART para transmisión y recepción serial asíncrona

BCF STATUS, RP1

BSF STATUS, RP0 ; Selección del banco 1 para configurar TRISC

MOVLW b’10xxxxxx’ ; Palabra de configuración del puerto C

MOVWR TRISC ; Configura las líneas RC7 como entrada y RC6 como salida

MOVLW BAUDIOS ; Establece la velocidad de transmisión, el valor de

MOVWF SPBRG ; BAUDIOS se calcula según la tablas de SPBRG

MOVLW 0x40 ; Transmisión de 8 bits, modo baja velocidad

MOVWF TXTA ; Modo asincró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

INICIO

Page 355: Curso PIC

355

Configuración para la recepciónde una dirección

La detección de direcciones en un módulo de comunicación serial tiene aplicaciones en sistemas en donde varios equipos se conectan juntos. Para configurar el módulo USART para la recepción de una dirección, se siguen prácticamente los mismos pasos que en la recepción de un dato, con la diferencia de que en el caso de detectar una dirección, se deberá habilitar el bit ADDEN del registro RCSTA:• 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.• Colocar en “1” el bit ADDEN para habilitar la lectura de la dirección.• Habilitar la recepción al hacer CREN = 1

El módulo de recepción serial quedará configurado. Cuando una dirección 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 un “1” en CREN. Si se obtuvo la dirección al leer el registro RCREG, se deberá borrar el bit ADDEN, para la lectura de datos. INICIO

Page 356: Curso PIC

356

Algunos formatos de utilizadosen 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.

INICIO

Page 357: Curso PIC

357

Conexión RS-232

La figura muestra las líneas de transmisión y recepción, ya que se sobreentiende que éstas están referidas a tierra (GND) y representa el sistema más sencillo de transmisión bidireccional RS-232.

INICIO

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.

INTERFAZ o “TRANSCEIVER”

2

3

Page 358: Curso PIC

358

Asignación de terminales en un conector RS-232

N° Terminal Nombre DTE-DCE Función

1 DCD Detector de portadora de dato

2 RD Recepción de datos

3 TD Transmisión de datos

4 DTR Terminal listo

5 SG Tierra de señales

6 DSR Dato listo en el DCE

7 RTS Responde para enviar

8 CTS Borrar envío

9 RI Indicador de llamada

INICIO

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.

5 4 3 2 1

9 8 7 6

A continuación, en la siguiente tabla, se presenta la asignación de cada terminal en la mayoría de los conectores macho RS-232-C de 9 pines que emplean terminales o computadores. Además se muestran las abreviaciones y los nombres de cada terminal, y el sentido de flujo de datos entre un DTE (computador o terminal) y DCE (equipo de comunicación).

Page 359: Curso PIC

359

Utilización y configuración delpuerto RS-232-C de tu PC

INICIO

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.

Aparecerá entonces la siguiente ventana: En ella deberás hacer doble clic en Hypertrm

Page 360: Curso PIC

360

Utilizando tu PC en modo Hyper Terminal

INICIO

Al acceder al Hyper Terminal, deberás hacer la configuración. Aparecerá la ventana que está a la izquierda, en ella podrás escoger algún icono y colocar un nombre como por ejemplo “Puerto Serial 1”. Luego tendrás que hacer clic en “Aceptar”. Después aparecerá la ventana que está a la derecha, en la cual podrás seleccionar el puerto serial que utilizarás.

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.

Page 361: Curso PIC

361

Configuración del puerto RS-232-C

INICIO

En la siguiente ventana introducirás los parámetros del puerto de comunicación serial de tu computadora, y deberás seleccionar los valores que sean compatibles con el del puerto USART del PIC16F87X que tú irás a programar.

Después de configurar el puerto serial, tendrás lista tu PC para utilizar su puerto serial. Lo que escribas desde el teclado, será enviado por el terminal TX del puerto serial, y los caracteres que veas en pantalla, serán aquéllos que entran por el terminal RX del mismo puerto.

Es importante que utilices la interfaz que convierta las señales del PIC a los niveles establecidos por la norma RS-232C. Al final de este aparte te proponemos una actividad en la que deberás utilizar el puerto RS-232C.

Page 362: Curso PIC

362

Conexión RS-485

La interfaz RS-485 utiliza señales de transmisión en modo diferencial, de esta manera hay dos señales de voltaje que indican su valor por su diferencia de potencial relativa. Las salidas del RS-485 pueden ser tres estados, lo cual permite la conexión de varios dispositivos para transmitir o recibir con el mismo par de señales. Los dispositivos se configuran en un arreglo de un “maestro” y varios “esclavos”, y la transmisión puede hacerse mediante un par de cables o dos pares de cables. La figura muestra el esquema de conexión en una transmisión con dos pares de cables en donde las líneas son conectadas a varios dispositivos.

INICIO

Page 363: Curso PIC

363

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.

INICIO

Page 364: Curso PIC

364

Transmisión Síncrona enmodo “maestro”

La transmisión síncrona con el USART se realiza en modo Half Duplex, es decir, la transmisión y la recepción no ocurren al mismo tiempo. Al transmitir un dato, la recepción se inhibe y viceversa, ya que éstas se hacen por una misma línea. La otra línea es utilizada para sincronizar los datos, es decir, saldrán los niveles del oscilador si el transmisor es “maestro” o los recibirá si es un dispositivo “esclavo”. La ventaja de la transmisión síncrona, es que ésta es más sencilla y no requiere de una lógica complicada.

Para configurar el módulo USART en la comunicación serial síncrona en modo “maestro” se colocarán en “1” los bits SYNC (modo síncrono) y CSRC (oscilador interno) del registro TXSTA. Al habilitar el bit SPEN del registro RCSTA, se configuran los terminales RC6/TX/CK como el que produce la señal de sincronización o reloj, y el terminal RC7/RX/DT se utilizará como la línea que envía y recibe datos.

La transmisión serial síncrona ocurre de manera similar a la asíncrona. La gran diferencia está en que la señal del oscilador de sincronización, la cual es producida por el generador de baudios, se transmite simultáneamente con la señal de datos.

Para configurar el módulo USART para la transmisión síncrona en modo “maestro”, se deberá hacer pasos similares para la configuración en modo asíncrono. La única diferecncia será que hay que hacer “1” los bits SYNC y CSRC del registro TXSTA.

En la siguiente página se muestran los bits involucrados en la transmisión serial síncrona en modo “maestro” y las formas de ondas.

INICIO

Page 365: Curso PIC

365

Bits y formas de ondas relacionadoscon la transmisión síncrona

INICIO

Page 366: Curso PIC

366

Comunicación Síncrona enmodo “esclavo”

La transmisión síncrona en modo “esclavo” se diferencia de la del modo “maestro” en que, en modo esclavo el oscilador que produce la sincronización de datos es externo al dispositivo. Para especificar que el dispositivo trabaja en modo “esclavo”, se deberá colocar el bit CSRC = 0, el cual está en el registro TXSTA.

En el caso de la recepción síncrona en modo “esclavo”, se siguen los mismos pasos que en modo “maestro”.

Debido a que la sincronización en modo “esclavo” es externa, el dispositivo podrá trabajar en modo “reposo”. En este caso habrá diferencias en la configuración con respecto al modo “maestro”.

INICIO

Page 367: Curso PIC

367

Registros asociados en la comunicación síncrona en modo “esclavo”

INICIO

Page 368: Curso PIC

368

Programa de configuracióndel USART en modo síncrono

; Configuración de la transmisión serial síncrona

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

INICIO

Page 369: Curso PIC

369

Actividades

Ya hemos visto el funcionamiento del puerto universal sincrónico-asincrónico (USART). En principio, te habíamos mencionado la importancia de este puerto para realizar la comunicación con otros equipos, entre ellos, el computador.

La actividad que se propone, es la de que hagas un programa y montes un circuito que sea capaz de leer una señal analógica, la convierta a digital y la envíe al puerto RS-232 de tu computadora. Claro está, que deberás utilizar una interfaz que convierta la señal de 0 a 5V que maneja tu microcontrolador, en la de 12V a -12V que se emplea en el estándar RS-232-C. Para ello, te proponemos que emplees el dispositivo de la figura anexa, o uno similar. Por otro lado, deberás adquirir un cable para la conexión RS-232, el cual podrás comprar en una tienda de electrónica o computación.

INICIO

SN75155 Recepción

RS232C

Transmisión RS232C

RC7/RX del PIC

-12V

+12V

RC6/TX del PIC

Page 370: Curso PIC

370

Registros asociados al Puerto C

INICIO

0000 0000

0000 0000

BFR/WUASPD/ACKESMPSSPSTAT94h

0000 0000

0000 0000

SSPADD93h

0000 0000

0000 0000

SENRSENPENRCENACKEN

ACKDT

ACKSTATGCENSSPCON291h

0000 0000

0000 0000

SSPM0SSPM1

SSPM2

SSPM3

CKPSSPEN

SSPOV

WCOLSSPCON14h

uuuu uuuu

xxxx xxxxSSPBUF13h

0000 0000

0000 0000

RCREG1Ah

0000 0000

0000 0000

SPBRG99h

0000 0000

0000 0000

TXREG19h

0000 -010

0000 -010TX9DTRMTBRGH

---SYNCTXENTX9CSRCTXTA98h

0000 000x

0000 000x

RX9DOERRFERRADDEN

CRENSRENRX9SPENRCSTA 18h

--00 0000--00 0000CCP2M0

CCP2M1

CCP2M2

CCP2M3

CCP2YCCP2X------CCP2CON1Dh

uuuu uuuu

xxxx xxxxCCPR2H1Ch

uuuu uuuu

xxxx xxxxCCPR2L1Bh

--00 0000--00 0000CCP1M0

CCP1M1

CCP1M2

CCP1M3

CCP1YCCP1X------CCP1CON17h

uuuu uuuu

xxxx xxxxCCPR1H16h

uuuu uuuu

xxxx xxxxCCPR1L15h

1111 1111

1111 1111

uuuu uuuu

Otros

Resets

1111 1111

1111 1111

xxxx xxxx

Valor en POR y BOR

TOCS

RC5

Bit 5

INTDG

RC6

Bit 6

RBPU#

RC7

Bit 7

OPTION_REG

TRISC

PORTC

Registro

PS0PS1PS2PSATOSE81h, 181h

87h

RC0RC1RC2RC3RC407h

Bit 0Bit 1Bit 2Bit 3Bit 4Dirección

Registro de Configuración de PORTC

Registro 1 de Captura, Comparación y PWM menos significativo

Registro 1 de Captura, Comparación y PWM más significativo

Registro 2 de Captura, Comparación y PWM menos

significativo

Registro 2 de Captura, Comparación y PWM más significativo

Registro de datos a transmitir del USART

Registro de generación de la velocidad de transmisión

(Baudios)

Registro de datos recibidos del USART

Registro de datos transmitidos y recibidos del puerto serial

sincrónico

Registro de Direcciones del puerto serial sincrónico en modo

I2C

Page 371: Curso PIC

371

7.13 El Puerto D, el Puerto E y la Interfaz Paralela

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

Bit 7 PSP Bit 6 PSP Bit 5 PSP Bit 4 PSP Bit 3 PSP Bit 2 PSP Bit 1 PSP Bit 0 PSP

INICIO

Los PIC16F870/872/873/876 no tienen los puertos D y E, así que la tabla aplica solamente a los PIC16F871, PIC16F874 y PIC16F877.

El puerto D sólo lo tienen los dispositivos de 40 terminales o más. Dispone de 8 líneas bidireccionales multiplexadas y, las que se usan como entradas, tienen un disparador de Schmitt. El puerto D o PORTD, se ubica en la dirección 08h, mientras que TRISD se encuentra en la 88h.

El puerto D puede utilizarse como puerto paralelo esclavo de 8 líneas (PSP). Para que trabaje de esta manera, se deberá colocar el bit PSMODE en “1”. Este bit se ubica en la posición 4 del registro TRISE. Las líneas de control del puerto paralelo PSP, las cuales son RD, WR y CS se encuentran en el puerto E

En la siguiente tabla, podemos observar la función de cada terminal del puerto D.

Page 372: Curso PIC

372

Diagrama de bloques delPuerto Paralelo

INICIO

El puerto paralelo opera con palabras de 8 bits cuando el bit de control PSPMODE, ubicado en TRISE, se coloque en “1”. En el caso de que el puerto trabaje en modo “esclavo”, se podrá leer o escribir de manera asíncrona por medio de los terminales RE0/RD y RE1/WR respectivamente.

La interfaz paralela puede hacer del microcontrolador, un dispositivo de comunicación con microprocesadores de 8bits. Para ello se deberán configurar los bits RE2/CS, RE1/WR y RE0/RD como entradas de control que se conectarían a la selección del dispositivo (CS), la lectura RD y la escritura WR. Los datos se conectarán a las líneas del puerto D, que al ser bidireccionales, no tendrá efecto el registro TRISD en el puerto D.

En la siguiente figura se presenta el diagrama de bloques del puerto paralelo. Al analizar este diagrama, se podrá comprender el funcionamiento de las líneas del puerto D y las líneas de control que se encuentran en el puerto E.

Page 373: Curso PIC

373

Formas de onda parala escritura de datos

INICIO

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.

Page 374: Curso PIC

374

Formas de onda parala lectura de datos

INICIO

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.

Page 375: Curso PIC

375

Registros asociados alPuerto Paralelo

INICIO

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.

Page 376: Curso PIC

376

Registros Asociados a PORTD

INICIO

0000 -111

1111 1111

uuuu uuuu

Otros

Resets

0000 -111

1111 1111

xxxx xxxx

Valor en POR y BOR

IBOV

RD5

Bit 5

OBF

RD6

Bit 6

IBF

RD7

Bit 7

TRISE

TRISD

PORTD

Registro

PSPMODE

89h

88h

RD0RD1RD2RD3RD408h

Bit 0Bit 1Bit 2Bit 3Bit 4Dirección

Registro de Configuración de PORTD Registro de

Configuración de PORTE

Page 377: Curso PIC

377

El Puerto E

INICIO

El puerto E o PORTE ocupa la dirección 09h, dispone de 3 líneas bidireccionales, multiplexadas con otras funciones relacionadas con el control del puerto paralelo esclavo (PSP) y las entradas del Convertidor Analógico a Digital.

Los PIC16F870/872/873/876 no tienen los puerto D y E, así que la tabla aplica solamente a los PIC16F871, PIC16F874 y PIC16F877.

La configuración del puerto E se realiza por medio del registro TRISE.

Lectura en el modo PSP (RD)

Entrada Analógica 5

E/S DIGITAL

RE0/RD#/AN5

Escritura en el modo PSP (WR)

Entrada Analógica 6

E/S DIGITAL

RE1/WR#/AN6

Selección de Chip en el modo PSP

(CS)

Entrada Analógica 7

E/S DIGITAL

RE2/CS#/AN7

0000 -111

Otros

Resets

0000 -111

Valor en POR y BOR

IBOV

Bit 5

OBF

Bit 6

IBF

Bit 7

TRISE

Registro

---PSPMOD

E

89h

Bit 0Bit 1Bit 2Bit 3Bit 4Dirección

Configuración de las

Entradas/Salida Digitales

Page 378: Curso PIC

378

Actividades

INICIO

Con este aparte finalizamos la descripción de los módulos de los PIC16F87X. La primera actividad propuesta, relacionada con el puerto paralelo, será la de conectar dos microcontroladores entre sí por medio del puerto paralelo. Deberás enviar datos desde uno a otro, mediante un programa que tú mismo elaborarás. Recuerda utilizar las líneas de control RD, WR y CS, para el control del flujo de datos.

Otra actividad que podrás realizar, es la de transferir datos desde el puerto paralelo de tu computadora. Para ello, deberás buscar información de cómo se conectan las líneas de este puerto.

Page 379: Curso PIC

379

7.14 Palabra de Configuración

La palabra de configuración es una posición reservada en la memoria de programa, que se ubica en la posición 2007h, y sólo se puede acceder a ella en el momento de la grabación del PIC. Los bits de esta palabra determinarán algunas características de funcionamiento del microcontrolador.B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

CP1 CP0 - Debug

WRT CP0

LVP BODEN CP1

CP0

PWRTE# WDTE FOSC1 FOSC0

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.

INICIO

Page 380: Curso PIC

380

Protección de la memoria deprograma de los PIC16F87X

Modelo PIC CP1 CP0 Dirección inicial de

protección

Dirección final de protección

PIC16F870/871/872 0 0 TODO PROTEGIDO

PIC16F873/874 0 0 0000H 0FFFH

PIC16F873/874 0 1 0800H 0FFFH

PIC16F873/874 1 0 0F00H 0FFFH

PIC16F876/877 0 0 0000H 1FFFH

PIC16F876/877 0 1 1000H 1FFFH

PIC16F876/877 1 0 1F00H 1FFFH

Todos los modelos 1 1 NO PROTEGIDO

INICIO

Page 381: Curso PIC

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:[email protected]

INICIO

Page 382: Curso PIC

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 MICROCONTROLADORE

S PIC ANEXO 6. ACTUALIZACIÓN DEL PICSTART PLUS ANEXO 7. GRABACIÓN DE UN PROGRAMA EN LOS PIC16F87X

INICIO

Page 383: Curso PIC

383

GLO

SARIO

INICIO

Page 384: Curso PIC

384

Símbolo matemático que indica mayor o igual que.

Símbolo matemático que indica menor o igual que.

<> Los valores que estén encerrados en estos símbolos, indican

bits que

están asignados a un registro.

El valor que esté debajo de una línea continua, indica que

está negado o invertido lógicamente.

INICIO

Page 385: Curso PIC

385

Acceso: Entrada de datos a un lugar de memoria o puerto.

Actuador: Elemento de acción final en un sistema de control.

A/DC: Convertidor Analógico a digital.

ADD: Instrucción que ejecuta la operación suma o adición.

Analógico: Se dice a aquella señal o función que varía de forma continua en el tiempo.

AND: Instrucción que ejecuta la operación lógica AND, la cual tiene como resultado “0”, cuando cualquiera de sus entradas es “0”.

INICIO

Page 386: Curso PIC

386

Aritmética: Operación matemática, normalmente se refiere a una instrucción que ejecuta una suma, resta, incremento o decremento.

Arquitectura: Estructura interna de un microcontrolador donde se ubica sus elementos y la interconexión entre ellos.

ASCII: Se refiere a un formato internacional de caracteres, en los que un código binario corresponde a una letra, número o signo utilizado en un idioma. También corresponde a un protocolo de comunicación entre varios dispositivos. El protocolo ASCII ANSI X3 28-2.5-A4, corresponde a una norma de comunicación industrial en los que varios dispositivos se conectan a un par de cables.

Asincrónico: Que no está sincronizado con otra señal.

Atmel: Fabricante de semiconductores.

INICIO

Page 387: Curso PIC

387

B (b): Posición de un bit en un registro.

Bajo consumo: Que absorbe poca potencia.

Básica: Se refiere a la gama de los microcontroladores con palabras de instrucción de 12 bits.

Bidireccional: Que puede transferir datos en las dos direcciones.

Bit: Es la mínima unidad de información. Puede valer “0” ó “1”.

Booleano: Se refiere a la lógica o los elementos digitales.

Boole: Matemático que desarrolló el álgebra que lleva su nombre y los postulados de lógica que se usa como base para la elaboración de funciones digitales.

INICIO

Page 388: Curso PIC

388

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”.

BSAP: Se refiere a las siglas “Bristol Synchronous Asynchronous Protocol”. Es un protocolo utilizado para el control y supervisión de sistemas de control.

Bus: Líneas que agrupan dirección, datos o señales de control.

Byte: Octeto o agrupación de 8 bits.

INICIO

Page 389: Curso PIC

389

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.

CLEAR: Instrucción de borrado o puesta a cero de un dato.

INICIO

Page 390: Curso PIC

390

CLK: Reloj o señal de oscilación que define la frecuencia de trabajo del microcontrolador.

CMOS: Tecnología digital de bajo consumo, basada en el uso de transistoresMOS complementarios (Complementary Metal Oxide Semiconductor).

CLKOUT: Señal de salida del reloj o CLK.

Comparador: Elemento que lee dos magnitudes y las compara.

Complemento: Obtención del valor opuesto.

Configuración: Efecto de establecer unas condiciones que definen algunas funciones permanentes de un dispositivo.

Contador: Registro que efectúa la acción de contar.

Control: Organización de determinada información.

CPU: “Central Processor Unit” Unidad central deProcesamiento. Microprocesador.

INICIO

Page 391: Curso PIC

391

D/AC: Convertidor Digital a Analógico.

Dallas: Fabricante de Semiconductores

Dato: Cualquier valor que puede leerse o escribirse en un registro o memoria o puerto

DC: Corriente Directa. Acarreo decimal (Decimal Carry)

Decimal Carry: Acarreo decimal referido a un nibble. Corresponde al bit 1 del registro STATUS. Cuando en una operación suma (o resta) se excede el valor 1111, se activa el Decimal Carry.

Decremento: Disminución en una unidad el valor de un dato específico.

Deshabilitar: Inhabilitar o inhibir las funciones de un elemento.

INICIO

Page 392: Curso PIC

392

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 laseñal a detectar tiene pendiente positiva o negativa.

DRT: Temporizador interno que retarda la inicialización del microcontrolador en aproximadamente 18 mseg.

INICIO

Page 393: Curso PIC

393

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.

Ejecución: Acción de realizar la instrucción o instrucciones de un programa.

Embedded: Elemento dentro de otro, normalmente se refiere al microcontrolador como un sistema dentro de un chip

Emulador: Elemento que imita al microcontrolador, y que posee los mismos terminales que éste, y una conexión a la computadora.

Éste se inserta en el conector destinado al microcontrolador en un prototipo, y mediantela computadora se puede observar y corregirel programa que esté en el sistema diseñado

INICIO

Page 394: Curso PIC

394

Entrada: Terminal de conexión cuya señal se dirige hacia un dispositivo.

Entrada-Salida: Terminales de conexión al microcontrolador que pueden emplearse como entrada o salida.

EPROM: “Eraseble Programable Read Only Memory” Memoria de sólo lectura, que puede ser borrada con luz ultravioleta, y luego puede ser regrabada.

Escalamiento: Efecto de cambiar de escala a un valor.

Escribir: Almacenar un dato en una memoria, registro o puerto.

Escritura: Almacenamiento de un dato en una memoria, registro o puerto.

EXOR: Instrucción que ejecuta la función lógica “o exclusivo”. Esta instrucción definida para dos entradas tiene como resultado 0, si las dos entradas son iguales. Tiene como resultado 1 si las dos entradas son diferentes.

INICIO

Page 395: Curso PIC

395

F: Apuntador de direcciones de los registros de la memoria de datos.

FIFO: De las siglas “First In First Out” (Primero entrado, primero salido. Se refiere a las memorias cuyos datos van a una pila, y el dato que se lee es el que entró de primero.

Flash: Memoria de programa que puede borrar grupos de datos por medio de pulsos eléctricos.

FOSC: Frecuencia del oscilador del microcontrolador (reloj).

FSR: Registro apuntador de direcciones de la memoria de datos.

Gama: Grupo.

GOTO: Instrucción utilizada para cambiar la dirección de

ejecución del programa.

y

INICIO

Page 396: Curso PIC

396

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.

INICIO

Page 397: Curso PIC

397

Inicialización: Acción y efecto de dar valores iniciales a un dispositivo.

Instrucción: Acción que se desea que ejecute una línea de un programa.

INTCON: Registro de control de interrupciones

Intel: Fabricante estadounidense de microprocesadores y otros semiconductores.

Interfaz: Punto de enlace entre dos medios. Normalmente se aplica a las entradas y salidas de una computadora con el medio.

Interrupción: Detención momentánea de un programa, debido al llamado de un elemento que necesita ser atendido por medio de una rutina.

IOR: Instrucción que ejecuta la función lógica OR (inclusivo).

INICIO

Page 398: Curso PIC

398

yK: Prefijo que significa 1000. Letra que se utiliza para designar

a una constante.

K: Unidad de resistencia eléctrica equivalente a 1000 ohmios.

LCD: Pantalla de cristal líquido (Liquid Crystal Display).

Lectura: Obtención de un dato de una memoria, registro o puerto.

Leer: Acción y efecto de obtener un dato desde una memoria,

registro o puerto.

Literal: Valor constante o etiqueta.

Lógica: Que se relaciona con el álgebra de Boole o elementosdigitales. Sólo toma dos valores: “0” ó “1”.

LSB: Bit menos significativo o de menor peso.(Least Significant bit).

INICIO

Page 399: Curso PIC

399

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 funcionesespecíficas de acuerdo a su programación y conexión.

INICIO

Page 400: Curso PIC

400

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.

MIPS: Millones de instrucciones por segundo, esto da una idea de la velocidad de procesamiento de un microprocesador o microcontrolador.

MODBUS: Protocolo industrial utilizado para el control de procesos.

MODEM: Se refiere al término “Modulador Demodulador”, y es un dispositivo que se emplea para transmitir y recibir señales por medio de la modulación y demodulación de la misma.

Motorola: Fabricante estadounidense de semiconductores y equipos de comunicación.

MOVE: Instrucción que transfiere un dato de un lugar a otro.

MPLAB: Software de ambiente de desarrollo para los PIC.

MSb: Bit más significativo o de mayor peso. (More Significant bit).

mseg o ms: Unidad de tiempo que representa una milésima de segundo.

Mux: Multi-seleccionador o multiplexer, elemento que conmuta varias señales.

INICIO

Page 401: Curso PIC

401

NationalSemiconductor: Fabricante estadounidense de semiconductores.

NEC: Fabricante japonés de semiconductores.

Nibbles: Agrupación de 4 bits.

NMOS: Tecnología digital basada en transistores MOSFET canal N.

NOP: Instrucción que no ejecuta ninguna operación.

nSeg: Unidad de tiempo que representa una milmillonésima parte de segundo.

INICIO

Page 402: Curso PIC

402

OPTION: Registro que configura el escalamiento del TMRO o el WDT.

OR: Función lógica cuyo resultado es “1”, cuando cualquiera de sus

entradas es “1”.

Oscilador: Circuito capaz de producir una señal cíclica a una frecuencia estable.

OSC1/CLKIN: Es una de las conexiones para un cristal resonador, que fije la frecuencia de oscilación. En el caso de no utilizar un cristal resonador, ese terminal se podrá conectar a la

entrada de un oscilador externo.

OSC2/CLKOUT: Es la otra conexión para un cristal resonador. En modo RC, ésta es la salida de oscilación que tiene un valor de ¼

de la frecuencia de OSC1, y determina el tiempo de duración de un ciclo de instrucción.

OTP: Dispositivo programable una sola vez.

INICIO

Page 403: Curso PIC

403

PA: Puerto A (PORTA).

Paralelo: Se aplica a un conjunto de datos que se envían o reciben en forma simultánea por un medio de transmisión que utiliza un grupo de líneas.

PB: Puerto B. (PORTB).

PC: Contador de programa. Puerto C (PORTC).

PD: PD Bit 5 del registro STATUS que indica que el dispositivo está en el modo “SLEEP” o Reposo. Puerto D (PORTD).

Perro Guardián:“Watchdog”, término con el que se le designa al temporizador que hace la inicialización del microcontrolador, cuando detecta una condición anormal.

Philips: Fabricante de semiconductores. Entre otras cosas es una empresa considerada un gigante en productos electrónicos. INICIO

Page 404: Curso PIC

404

PIC: “Peripheral Interface Controller” Sigla que identifica a los microcontroladores de Microchip.

PICSTART PLUS:Programador para cualquier microcontrolador PIC.

Pila: “Stack”, registros donde se guardan las direcciones de retorno de rutinas.

POR: “Power on reset”, circuito de inicialización por encendido.

PORT: Nombre con el que se designa a cada puerto, el cual es una interfaz o registro de conexión externa del microcontrolador.

Programa: Secuencia y efecto de escribir instrucciones que realizan una función específica.

Programador: Dispositivo que graba un programa en el microcontrolador. Persona que desarrolla un programa.

INICIO

Page 405: Curso PIC

405

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.

INICIO

Page 406: Curso PIC

406

RA0 – RA4: Terminal de conexión del puerto A, el sufijo indica el bit

que corresponde a ese puerto.

RAM: “Random Access Memory” Memoria para escritura y

lectura.

RB0 – RB7: Terminal de conexión del puerto B, el sufijo indica el bit

que corresponde a ese puerto.

RC: Resistencia - Condensador. Terminal de conexión del

puerto C, el sufijo indica el bit que corresponde a ese

puerto.

Registro: Elemento electrónico que almacena un dato.

Reloj: Señal producida por un oscilador que se utiliza como

referencia del tiempo.

Reset: Inicialización. Efecto de dar condiciones iniciales a algoINICIO

Page 407: Curso PIC

407

Resistencia: Elemento eléctrico que se opone parcialmente al paso de la

corriente eléctrica.

Resonante: Que tiene una frecuencia natural de oscilación.

RET, RETURN: Instrucción de retorno. Se aplica cuando una rutina finaliza.

REXT: Resistencia externa.

RISC: Conjunto reducido de instrucciones (Reduced Instruction Set).

Se utiliza en microprocesadores de alta velocidad.

Rodar: Desplazar los bits de un registro.

ROM: “Read Only Memory” Memoria sólo para lectura.

Rotación: Acción y efecto de desplazar los bits de un registro.

Rutina: Subprograma que se ejecuta en forma separada al programa principal.

INICIO

Page 408: Curso PIC

408

Salida: Terminal de conexión cuya señal es generada por un dispositivo.

Salto: Cambio de dirección de la memoria de programa en forma no secuencial.

Sensor: Elemento que detecta una variable física y la convierte en señal eléctrica.

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.

SGS-THOMSON: Fabricante europeo de semiconductores.

Siemens: Fabricante europeo de semiconductores.

INICIO

Page 409: Curso PIC

409

Sincrónico: Que ocurre a la par de otra señal guía.

Sleep: Dormir. Se emplea para decir que un dispositivo está en reposo, y por tanto disminuye el consumo de potencia.

Stack: Pila de registros donde se almacenan las direcciones de retorno de las rutinas.

STATUS: Registro donde se guarda los bits de control de un microprocesador.

SUB: Instrucción que ejecuta la resta de dos valores.

Subrutina: Subprograma de una rutina.

SWAP: Instrucción que intercambia la posición de los nibles

(agrupación de 4 bits) de un registro.

INICIO

Page 410: Curso PIC

410 INICIO

Tecnología Se refiere al tipo de semiconductor utilizado en los dispositivosDgital: lógicos. Destacan: TTL, CMOS, NMOS, ECL, PMOS, etc.

Temporizador: “Timer”, elemento que contabiliza el tiempo.

Terminal: Conexión física de un elemento.

Texas Fabricante estadounidense de semiconductores. Son muyInstruments: conocidos los DSPs que fabrica esta compañía.

Tiempo Tiempo por el cual no se ejecutará una acción alguna, hasta quede espera: éste se acabe.

Timer: Temporizador, elemento que contabiliza el tiempo.

TMRO: Temporizador 0. Contiene una longitud de 8 bits.

TO: Tiempo de espera (time out). TO corresponde al bit 4 del

registro STATUS, e indica si la ejecución del programade un microcontrolador, ha sido interrumpido por el

WDT.

Page 411: Curso PIC

411

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.

TOCS: Bit 5 del registro OPTION, que se utiliza como selección de la fuente del temporizador 0.

TOSE: Bit 4 del registro OPTION, que se utiliza como selección de la transición de la fuente del temporizador 0.

Toshiba: Fabricante japonés de semiconductores.

Transferencia: Mover un dato de un registro, memoria o puerto a otra posición.

Tres estados: Son salidas de dispositivos lógicos que tienen, además de los estados “0” y “1”, un tercer estado que es el de alta impedancia o desconexión. Esto es útil para la transferencia de datos de forma bidireccional.

TRIS: Registro de programación de los puertos del microcontrolador.

INICIO

Page 412: Curso PIC

412

y

USART: Transmisor y receptor universal sincrónico o asincrónico.

VDD: Terminal que se conecta al voltaje de alimentación positiva en circuitos MOS. En el caso de los microcontroladores PIC, la tensión a aplicar en este terminal deberá estar comprendida entre 3V y 6V.

Verify Specification: Verificación de especificación.

VSS: Terminal que se conecta al voltaje de referencia o nulo (0V) en circuitos electrónicos MOS.

Vpp: Tensión de programación

INICIO

Page 413: Curso PIC

413

aW: Registro de trabajo de los microcontroladores PIC.

Watchdog: “Perro guardián”, término con el que se le designa al temporizador que hace la inicialización del

microcontrolador, cuando detecta una condición anormal.

WDT: Temporizador “perro guardián” o “Watchdog timer”.

XOR: Instrucción que ejecuta la función lógica “o exclusivo”, la cual consiste en obtener un “0” si las dos entradas son iguales, y un “1” si éstas son diferentes.

Z: Bit 2 del registro STATUS que se activa cuando un resultado es igual a cero.

Zero: Cero o valor nulo.

INICIO

Page 414: Curso PIC

414INICIO

Page 415: Curso PIC

415

Conjunto de instrucciones de los PIC16C5X, PIC16F5X y 12C5X (Gama

Básica):

Código En- Operadoressamblador

Descripción NotasBits STATUSafectados

Código de OperaciónMsb Lsb

Ciclos

ADDWF f,d Suma W con f 1 0001 11df ffff C, DC, Z 1,2,4ANDWF f,d AND de W con f 1 0001 01df ffff Z 2,4CLRF f Borra f 1 0000 011f ffff Z 4CLRW - Borra W 1 0000 0100 0000 Z COMF f,d Complementa f 1 0010 01df ffff Z DECF f,d Decremento f 1 0000 11df ffff Z 2,4 DECFSZ f,d Decrementa f, salta si es 0 1(2) 0010 11df ffff 2,4 INCF f,d Incremento f 1 0010 10df ffff Z 2,4 INCFSZ f,d Incremento f, salta si es 0 1(2) 0011 11df ffff 2,4 IORWF f,d OR inclusivo de W con f 1 0001 00df ffff Z 2,4 MOVF f,d Mueve f 1 0010 00df ffff Z 2,4 MOVWF f Mueve W a f 1 0000 001f ffff 1,4 NOP - No operación 1 0000 0000 0000 RLF f,d Rotación izqu. a través del Carry 1 0011 01df ffff C 2,4 RRF f,d Rotación der. a través del Carry 1 0011 00df ffff C 2,4 SUBWF f,d Resta W de f 1 0000 10df ffff C,DC,Z 1,2,4

SWAPF f,d Intercambia nibles de f 1 0011 10df ffff 2,4

XORWF f,d OR exclusivo de W con f 1 0001 10df ffff Z 2,4

OPERACIONES ORIENTADAS A BYTES

INICIO

Page 416: Curso PIC

416

OPERACIONES ORIENTADAS A BITS DE REGISTROS

Código EnsambladorOperadores Descripción Notas

Bits de STATUS

afectados

Código de Operación

Msb LsbCiclos

BCF f,b Borra bit de f 1 0100 bbbf ffff 2,4BSF f,b Pone un “1” a bit de f 1 0101 bbbf ffff 2,4BTFSC f,b Salta si bit de f es “0” 1(2) 0110 bbbf ffff BTFSS f,b Salta si bit de f es “1” 1(2) 0111 bbbf ffff

OPERACIONES CON LITERAL Y CONTROLANDLW K AND de K con W 1 1110 kkkk kkkk Z

CALL K Llamar a subrutina 2 1001 kkkk kkkk 1CLRWDT K Borra temporizador WDT 1 0000 0000 0100 TOPD

GOTO K Salto incondicional 2 101k kkkk kkkk

IORLW K OR inclusivo de k con W 1 1101 kkkk kkkk Z

MOVLW K Mover valor k hacia W 1 1100 kkkk kkkk

OPTION K Mover valor k a OPTION 1 0000 0000 0010

RETLW K Retornar, asignar valor k a W 2 1000 kkkk kkkk

SLEEP - Habilita modo de bajo consum. 1 0000 0000 0011 TO, PD TRIS f Mover valor de W a TRIS 1 0000 0000 0fff 3 XORLW k EXOR DE k con W 1 1111 kkkk kkkk Z

INICIO

Page 417: Curso PIC

417

Conjunto de instrucciones de los PIC16CXXX, 16FXXX, 12C6XX,

12F6XX Y 14CXXX (Gama media).

Código EnsambladorOperadores Descripción Notas

Bits de STATUS

afectados

Código de Operación

Msb LsbCiclos

ADDWF f,d Suma W con f 1 00 0001 11df ffff C, DC, Z 1,2,4ANDWF f,d AND de W con f 1 00 0001 01df ffff Z 2,4CLRF f Borra f 1 00 0000 011f ffff Z 4CLRW - Borra W 1 00 0000 0100 0000 Z COMF f,d Complementa f 1 00 0010 01df ffff Z DECF f,d Decremento f 1 00 0000 11df ffff Z 2,4 DECFSZ f,d Decrementa f, salta si es 0 1(2) 00 0010 11df ffff 2,4 INCF f,d Incremento f 1 00 0010 10df ffff Z 2,4 INCFSZ f,d Incremento f, salta si es 0 1(2) 00 0011 11df ffff 2,4 IORWF f,d OR inclusivo de W con f 1 00 0001 00df ffff Z 2,4 MOVF f,d Mueve f 1 00 0010 00df ffff Z 2,4 MOVWF f Mueve W a f 1 00 0000 001f ffff 1,4 NOP - No operación 1 00 0000 0000 0000 RLF f,d Rotación izq. a través del Carry 1 00 0011 01df ffff C 2,4 RRF f,d Rotación der. a través del Carry 1 00 0011 00df ffff C 2,4 SUBWF f,d Resta W de f 1 00 0000 10df ffff C,DC,Z 1,2,4

SWAPF f,d Intercambia nibles de f 1 00 0011 10df ffff 2,4

XORWF f,d OR exclusivo de W con f 1 00 0001 10df ffff Z 2,4

OPERAECIONES ORIENTADAS A BYTES

INICIO

Page 418: Curso PIC

418

OPERACIONES ORIENTADAS A BITS DE REGISTROS

Código EnsambladorOperadores Descripción Notas

Bits de STATUS

afectados

Código de Operación

Msb LsbCiclos

BCF f,b Borra bit de f 1 01 00bb bfff ffff 1,2BSF f,b Pone un “1” a bit de f 1 01 01bb bfff ffff 1,2BTFSC f,b Salta si bit de f es “0” 1(2) 01 10bb bfff ffff 3BTFSS f,b Salta si bit de f es “1” 1(2) 01 11bb bfff ffff 3

OPERACIONES CON LITERAL Y CONTROLADDLW K Suma K con W 1 11 111x kkkk kkkk C,DC,Z

ANDLW K AND de K con W 1 11 1001 kkkk kkkk Z CALL K Llamar a subrutina 2 10 0kkk kkkk kkkk

GOTO K Salto incondicional 2 10 1kkk kkkk kkkk

IORLW K OR inclusivo de k con W 1 11 1000 kkkk kkkk Z

MOVLW K Mover valor k hacia W 1 11 00xx kkkk kkkk

RETRE - Retorno de interrupción 2 00 0000 0000 1001

RETLW K Retornar, asignar valor k a W 2 11 01xx kkkk kkkk

SLEEP - Habilita modo de bajo consum. 1 00 0000 0110 0011 TO, PD SUBLW K Restar W del valor K 1 11 110k kkkk kkkk C,DC,Z

XORLW k EXOR de k con W 1 11 1010 kkkk kkkk Z

INICIO

Page 419: Curso PIC

419

ADDLWSuma valor literal con W

Nota: Esta instrucción no está incluida en los PIC de la gama básica

Código Ensamblador: (Etiqueta) ADDLWK

Operadores: 0 ≤ K ≤ 255

Operación: (W) + (K) (W)

Bits de estado que se afectan: C, DC, Z

Descripción: Se suma el contenido del

registro W con el valor “K”

El resultado se coloca en W.

Ejemplo: ADDLW 0 x 15

Antes de la Instrucción

W = 0x10

Después de la Instrucción

W = 0x25

INICIO

Page 420: Curso PIC

420

ADDWF Suma W y “f”

Código Ensamblador: (Etiqueta) ADDWF f,dOperadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)d (0,1)

Operación: (W) + (f) (dest)Bits de estado que se afectan: C, DC, ZDescripción: Suma los contenidos de los

registros W y “f”Si “d” es 0, el resultado se coloca

en W, si “d” es 1, se coloca en “f”

Ejemplo: ADDWF FSR, 0Antes de la Instrucción

W = 0x17FSR = 0xC2

Después de la InstrucciónW = 0xD9FSR = 0xC2

INICIO

Page 421: Curso PIC

421

Código Ensamblador: (Etiqueta) ANDLW k

Operadores: 0 ≤ K ≤ 255

Operación: (W). AND.(K) (W)

Bits de estado que se afectan: Z

Descripción: Se realiza la función lógica AND entre

los bits del registro W y el valor “K”.

El resultado se coloca en W.

Ejemplo: ANDLW 0x5F

Antes de la Instrucción

W = 0xA3

Después de la Instrucción

W = 0x03

And del valor literal con WANDLW

INICIO

Page 422: Curso PIC

422

ANDWF AND W con “f”

Código Ensamblador: (Etiqueta) ANDWF f,dOperadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)d (0,1)

Operación: (W).AND. (f) (dest)Bits de estado que se afectan: ZDescripción: Se ejecuta la función lógica AND 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, se coloca en “f”

Ejemplo: ANDWF FSR, 1Antes de la Instrucción

W = 0x17FSR = 0xC2

Después de la InstrucciónW = 0x17FSR = 0x02

INICIO

Page 423: Curso PIC

423

BCF Borra bit en “f”

Código Ensamblador: (Etiqueta) BCF f,b

Operadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)

0 ≤ b ≤ 7

Operación: 0 (f<b>)

Bits de estado que se afectan: Ninguno

Descripción: Se coloca en 0 bit “b” en registro “f”

Ejemplo: BCF FLAG_REG, 7

Antes de la Instrucción

FLAG_REG = =0xC7

Después de la Instrucción

FLAG_REG = 0x47

INICIO

Page 424: Curso PIC

424

BSF Establece en 1 bit en “f”

Código Ensamblador: (Etiqueta) BSF f,b

Operadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)

0 ≤ b ≤ 7

Operación: 1 (f<b>)

Bits de estado que se afectan: Ninguno

Descripción: Se coloca en 1 bit “b” del registro “f”

Ejemplo: BSF FLAG_REG, 7

Antes de la Instrucción

FLAG_REG = =0x0A

Después de la Instrucción

FLAG_REG = 0x8A

INICIO

Page 425: Curso PIC

425

Código Ensamblador: (Etiqueta) BTFSC f,dOperadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)0 ≤ b ≤ 7

Operación: Salta si (f<b>) = 0Bits de estado que se afectan: NingunoDescripción: Si bit “b” en el registro “f” es 0, entonces

se salta la siguiente instrucción, la cualse había preparado para ejecutar, pero sedescarta y se ejecuta un NOP, lo cual haceque la instrucción dure dos ciclos. Si bit “b”en “f” es 1, entonces la instrucción actualse ejecuta en un ciclo, luego se ejecuta lasiguiente instrucción

Prueba bit en f, salta si es cero

BTFSC

Ejemplo: AQUÍ BTFSC FLAG, 1FALSO GOTO COD_PROCESOCIERTO

Antes de la InstrucciónPC = dirección (AQUÍ)

Después de la InstrucciónSi FLAG<1> = 0,PC = dirección (CIERTO); Ejecución en dos ciclosSi FLAG<1> = 1,PC = dirección (FALSO); Ejecución en un ciclo

INICIO

Page 426: Curso PIC

426

Código Ensamblador: (Etiqueta) BTFSS f,dOperadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)0 ≤ b ≤ 7

Operación: Salta si (f<b>) = 1Bits de estado que se afectan: NingunoDescripción: Si bit “b” en el registro “f” es 1, entonces

se salta la siguiente instrucción, la cualse había preparado para ejecutar, pero sedescarta y se ejecuta un NOP, lo cual haceque la instrucción dure dos ciclos. Si bit “b”en “f” es 0, entonces la instrucción actualse ejecuta en un ciclo, luego se ejecuta lasiguiente instrucción

BTFSS Prueba bit en f, salta si es 1

Ejemplo: AQUÍ BTFSS FLAG, 1FALSO GOTO COD_PROCESOCIERTO

Antes de la InstrucciónPC = dirección (AQUÍ)

Después de la InstrucciónSi FLAG<1> = 0,PC = dirección (FALSO); Ejecución en un cicloSi FLAG<1> = 1,PC = dirección (CIERTO); Ejecución en dos ciclos

INICIO

Page 427: Curso PIC

427

CALL Llamar a subrutina

Código Ensamblador: (Etiqueta) CALL KOperadores: 0 ≤ K ≤ 255Operación: (PC) +1 Tope de la pila (Stack);

K PC<7:0>;(STATUS <6:5>) PC <10:9>;0 PC <8>

Bits de estado que se afectan: NingunoDescripción: Llama a subrutina. Primero la dirección de

retorno (PC+1) se coloca en la pila (Stack).Los bits 8 de “K” se colocan en los bits<7:0> del PC. Los bits <10:9> del PC tomanlos valores de los bits <6:5> del STATUS. El bit 8 del PC es colocado en 0. Esta instrucción dura dos ciclos.

Ejemplo: AQUÍ CALL ALLA

Antes de la InstrucciónPC = dirección (AQUÍ)

Después de la InstrucciónPC = dirección (ALLA)

TOS = dirección (AQUÍ + 1)

INICIO

Page 428: Curso PIC

428

CLRFBorra “f”

Código Ensamblador: (Etiqueta) CLRF f

Operadores: 0 ≤ f ≤ 31 (Gama básica)

0 ≤ f ≤ 127 (Gama media)

Operación: 00h (f);

1 Z

Bits de estado que se afectan: Z

Descripción: El contenido del registro “f” es borrado

y el bit Z es puesto en 1

Ejemplo: CLRF FLAG_REG

Antes de la Instrucción

FLAG_REG = =0x5A

Después de la Instrucción

FLAG_REG = 0x00

z = 1

INICIO

Page 429: Curso PIC

429

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

INICIO

Page 430: Curso PIC

430

Código Ensamblador: (Etiqueta) CLRWDTOperadores: NingunoOperación: 00h WDT;

0 Escalamiento WDT (si es asignadoa éste);1 TO;1 PD

Bits de estado que se afectan: TO, PDDescripción: Borra el registro WDT y también al

escalamiento, si éste es asignado alWDT y no al temporizador Timer0.Los bits de estado TO y PD se ponen

en 1

Ejemplo: CLRWDTAntes de la Instrucción

Contador WDT = ?Después de la Instrucción

Contador WDT = 0x00Escalamiento de WDT = 0TO = 1PD = 1

CLRWDTBorra temporizador

perro guardián (WDT)

INICIO

Page 431: Curso PIC

431

Código Ensamblador: (Etiqueta) COMF f,dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d 0,1

Operación: (f) - 1 (dest)Bits de estado que se afectan: ZDescripción: Se complementa el contenido del registro

“f”. Si “d” es 0, el resultado se coloca en

W, si “d” es 1, el resultado se coloca en

“f”.

Ejemplo: COMF REG1, 0Antes de la Instrucción

REG1 = 0x13Después de la Instrucción

REG1 = 0x13 W = 0xEC

Complementa “f”Complementa “f”

INICIO

Page 432: Curso PIC

432

Código Ensamblador: (Etiqueta) DECF f,dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d 0,1

Operación: (f) - 1 (dest)Bits de estado que se afectan: ZDescripción: Decrementa el contenido del registro “f”.

Si “d” es 0, el resultado se coloca en W,

si “d” es 1, el resultado se coloca en “f”.

Ejemplo: DECF CNT, 1Antes de la Instrucción

CNT = 0x01Z = 0

Después de la InstrucciónCNT = 0x00Z = 1

Decremento de “f”Decremento de “f”

INICIO

Page 433: Curso PIC

433

Código Ensamblador: (Etiqueta) DECFSZ f,dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d 0,1

Operación: (f) - 1 d; salta si el resultado = 0Bits de estado que se afectan: NingunoDescripción: Decrementa el contenido del registro “f”.

Si “d” es 0, el resultado se coloca en W, si “d” es 1, el resultado se coloca en “f”.Si el resultado es 0, entones se salta la siguiente instrucción, la cual se había preparado para ejecutar,pero se descartta y se ejecuta un NOP, lo cualhace que la instrucción dure dos ciclos.Si el resultado es diferente de cero, en un ciclo, y luegoentonces la instrucción actual se ejecutase ejecuta la siguiente instrucción.

Decremento de “f”, salta si es 0

Ejemplo: AQUI DECFSZ CNT, 1GOTO LAZO

CONTI

Antes de la InstrucciónPC = dirección (AQUÍ)

Después de la InstrucciónCNT = CNT - 1;Si CNT = 0,PC = dirección (CONTI); Ejecución en dos ciclosSi CNT ‡ 0,PC = dirección (AQUÍ+1); Ejecución en un ciclo

INICIO

Page 434: Curso PIC

434

Código Ensamblador: (Etiqueta) GOTO kOperadores gama básica: 0 k 512Operadores gama media: 0 k 2047 Operación gama básica: k PC <8:0>

(STATUS <6:5> PC <10:9>Operación gama media: k PC <10:0>

(PCLATCH <4:3>) PC <12:11>Bits de estado que se afectan: NingunoDescripción: Salto incondicional. Los 9 bits de “k” se

colocan en los bits <8:0> del PC. Los bits <10:9> del PC toman los valores

delos bits <6:5> del registro STATUS.Esta instrucción dura dos ciclos

Ejemplo: GOTO ALLA

Después de la InstrucciónPC = dirección (ALLA)

Salto IncondicionalSalto Incondicional

INICIO

Page 435: Curso PIC

435

Código Ensamblador: (Etiqueta) INCF f,dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d 0,1

Operación: (f) + 1 (dest) Bits de estado que se afectan: ZDescripción: Se incrementa el contenido de “f”

Si “d” es 0, el resultado se colocaen W, si “d” es 1, el resultado se

coloca en “f”

Ejemplo: INCF CNT, 1

Antes de la InstrucciónCNT = 0xFFZ = 0

Después de la InstrucciónCNT = 0x00Z = 1

Incremento de “f”Incremento de “f”

INICIO

Page 436: Curso PIC

436

Código Ensamblador: (Etiqueta) INCFSZ f,dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d 0,1

Operación: (f) + 1 (dest), salta si el resultado = 0 Bits de estado afectados: NingunoDescripción: Incrementa el contenido del registro “f”.

Si “d” es 0, el resultado se coloca en W, si “d” es 1, el resultado se coloca en “f”.Si el resultado es 0, entones se salta la

siguiente instrucción, la cual se había preparado para ejecutar, pero se descarta y se ejecuta un NOP, lo cual hace que la instrucción dure dos ciclos. Si el resultado es diferente de cero, entonces la instrucción actual se ejecuta en un ciclo, y luego se ejecuta la siguiente instrucción.

Ejemplo: AQUI INCFSZ CNT, 1GOTO LAZO

CONTI

Antes de la InstrucciónPC = dirección (AQUÍ)

Después de la InstrucciónCNT = CNT - 1;Si CNT = 0,PC = dirección (CONTI); Ejecución en dos ciclosSi CNT ‡ 0,PC = dirección (AQUÍ+1); Ejecución en un ciclo

Incremento de “f”salta si es 0

INICIO

Page 437: Curso PIC

437

Código Ensamblador: (Etiqueta) IORLW k

Operadores: 0 ≤ K ≤ 255

Operación: (W).OR.(K) (W);

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 valor literal “k”. El

resultado se coloca en W.

Ejemplo: IORLWF 0x35

Antes de la Instrucción

W = 0x9A

Después de la Instrucción

W = 0xBF

Z = 0

OR Inclusivo devalor literal con WOR Inclusivo de

valor literal con W

INICIO

Page 438: Curso PIC

438

Código Ensamblador: (Etiqueta) IORWF f,dOperadores: 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: ZDescripció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 = 0x13W = 0x91

Después de la InstrucciónRESULT = 0x13W = 0xBFZ = 0

OR Inclusivo de W con “f”

IORWF

INICIO

Page 439: Curso PIC

439

MOVF Mueve “f”

Código Ensamblador: (Etiqueta) MOVF f,d

Operadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)

d 0,1Operació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.

Ejemplo: MOVF FSR, 0

Después de la Instrucción

W = Valor en el registro FSRINICIO

Page 440: Curso PIC

440

Código Ensamblador: (Etiqueta) MOVLW k

Operadores: 0 ≤ K ≤ 255

Operación: K (W);

Bits de estado que se afectan: Ninguno

Descripción: Se carga el valor de “k” en el

registro W.

Ejemplo: MOVLW 0x5A

Después de la Instrucción

W = 0x5A

MOVLW Mueve valor literal a W

INICIO

Page 441: Curso PIC

441

Código Ensamblador: (Etiqueta) MOVWF f

Operadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)

Operación: (W) (f)

Bits de estado que se afectan: Ninguno

Descripción: Mueve el dato desde W a “f”

Ejemplo: MOVWF TEMP_REG

Antes de la Instrucción

TEMP_REG = 0xFF

W = 0x4F

Después de la Instrucción

TEMP_REG = 0x4F

W = 0x4F

MOVWF Mueve W a “f”

INICIO

Page 442: Curso PIC

442

Código Ensamblador: (Etiqueta) NOP

Operadores: Ninguno

Operación: No operación

Bits de estado que se afectan: Ninguno

Descripción: No hay operación.

Simplemente se ejecuta un ciclo,

sin afectar nada.

Ejemplo: NOP

NOP No operación

NO

INICIO

Page 443: Curso PIC

443

Nota: Esta instrucción no se recomienda utilizar en los PIC de la gama media.

Código Ensamblador: (Etiqueta) OPTION

Operadores: Ninguno)

Operación: (W) OPTION

Bits de estado que se afectan: Ninguno

Descripción: El contenido de W es cargado al Registro

OPTION.

Ejemplo: OPTION

Antes de la Instrucción

W = 0x07

Después de la Instrucción

OPTION = 0x07

OPTION Carga el registro OPTION

INICIO

Page 444: Curso PIC

444

RETFIE Retorno de Interrupción

Nota: Esta instrucción no está incluida en los PIC de la Gama BásicaCódigo Ensamblador: (Etiqueta) RETFIEOperadores: Ninguno)Operación: TOS PC Bits de estado que se afectan: 1 GIEDescripción: Retorno de una Interrupción. El valor del

tope de la pila (TOS) es cargado en el contador de programa (PC).Las interrupciones se habilitan al

poneren “1” el bit de habilitación global deinterrupciones (GIE). Este bit se

encuentra ubicado en el registro INTCON (bit 7).Esta instrucción dura dos ciclos.

Ejemplo: RETFIE

Después de la InstrucciónPIC = TOSGIE = 1

INICIO

Page 445: Curso PIC

445

Nota: Esta instrucción no está incluida en los PIC de la Gama Básica

Código Ensamblador: (Etiqueta) RETURN

Operadores: Ninguno)

Operación: TOS PC

Bits de estado que se afectan: Ninguno

Descripción: Retorno de una subrutina. El valor del

tope de la pila (TOS) es cargado en el

contador de programa (PC).

Esta instrucción dura dos ciclos.

Ejemplo: RETURN

Después de la Instrucción

PC = TOS

RETURN Retorno de Interrupción

INICIO

Page 446: Curso PIC

446

RETLWRETLW Retorno con valor literal en W

Retorno con valor literal en W

Código Ensamblador: (Etiqueta) RETLW KOperadores: 0 K 255Operación: K (W)

TOS PCBits de estado afectados: NingunoDescripción: El registro W se carga con el valor del literal “k”. El contador de programa PC se carga con el tope de la pila (STACK, dirección de retorno). Esta instrucción es útil para convertir valores por medio de una tabla de equivalencia, véase ejemplo. Esta instrucción dura dos ciclos.

Ejemplo: CALL TABLA ;W contiene tabla de valores de la

;conversión. Después de ejecutar la ;rutina, W tendrá el valor convertido

TABLA ADDWF PCL ;W = desplazamientoRETLW k0 ;Comienza tablaRETLW k1 RETLW kn ;Final de la tabla

Antes de la InstrucciónW = 0x07

Después de la InstrucciónW = valor de k7

INICIO

Page 447: Curso PIC

447

Código Ensamblador: (Etiqueta) RLF f, dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d [0,1]

Operación: Ver descripción abajoBits de estado que se afectan: CDescripción: Los bits de “f” son rodeados (desplazados)

en un bit hacia la izquierda, pasando por el

bit Carry. El bit 0 de “f”, forma el valor

anterior del bit 7 de “f”.Si “d” es 0, el resultado se coloca en

W,si “d” es 1, el resultado se coloca en

“f”.

Ejemplo: RLF REG1, 0

Antes de la InstrucciónREG1 = 1110 0110C = 0

Después de la InstrucciónREG1 = 1110 0110W = 1100 1100C = 1

RLFRLFRodar “f” a la Izquierda

a través del CarryRodar “f” a la Izquierda

a través del Carry

INICIO

Page 448: Curso PIC

448

Código Ensamblador: (Etiqueta) RRF f, dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d [0,1]

Operación: Ver descripción abajoBits de estado que se afectan: CDescripción: Los bits de “f” son rodeados (desplazados)

en un bit hacia la derecha, pasando por el

bit Carry. El bit 7 de “f”, toma el valor

anterior del bit Carry, y el bit Carrytoma el valor anterior del bit 0 de “f”Si “d” es 0, el resultado se coloca en

W,si “d” es 1, el resultado se coloca en

“f”.

Ejemplo: RRF REG1, 0Antes de la Instrucción

REG1 = 1110 0110C = 0

Después de la InstrucciónREG1 = 1110 0110W = 0111 0011C = 0

RRFRRF Rodar “f” a la Derecha a través del Carry

INICIO

Page 449: Curso PIC

449

Código Ensamblador: (Etiqueta) SLEEP

Operadores: Ninguno

Operación: 00h WDT

0 Escalamiento del WDT;

1 TO

0 PD

Bits de estado que se afectan: TO, PD

Descripción: Se coloca en 1 el bit TO del registro de

estado. Los bits de estado de: potencia

baja. El WDT y el escalamiento se colocan

en 0.

El procesador se coloca en estado

de reposo (SLEEP), el oscilador se

detiene y el consumo es mínimo.

Ejemplo: SLEEP

SLEEP Entra en el modo de reposo

INICIO

Page 450: Curso PIC

450

Nota: Esta instrucción no está incluida en los PIC de la Gama Básica

Código Ensamblador: (Etiqueta) SUBLW KOperadores: 0 ≤ K ≤ 255Operación: K - (W) (W)Bits de estado que se afectan: C, DC, ZDescripción: Se resta el contenido de W con el de

los 8 bits de k (en complemento a 2).El resultado se coloca en W

Ejemplo 1: SUBLW 0x02Antes de la Instrucción

W = 1C = ?

Después de la InstrucciónW = 1C = 1; el resultado es positivo

Ejemplo 2: Antes de la InstrucciónW = 2C = ?

Después de la InstrucciónW = 0C = 1; el resultado es 0

Ejemplo 3: Antes de la InstrucciónW = 3C = ?

Después de la InstrucciónW = FFC = 0; el resultado es negativo

Resta W de Valor Literal

INICIO

Page 451: Curso PIC

451

Código Ensamblador: (Etiqueta) SUBWF f, dOperadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)d [0,1]

Operación: (f) - (W) (dest)Bits de estado que se afectan: C, DC, ZDescripción: Se resta el contenido de W con el del

registro “f” (en complemento a 2).Si “d” es 0, el resultado se coloca en

WSi “d” es 1, el resultado se coloca en

“f”

Ejemplo 1: SUBWF REG, 1Antes de la Instrucción

REG1 = 3, W = 2, C = ?Después de la Instrucción

REG1 = 1, W = 2, C = 1; el resultado es positivo

Ejemplo 2: Antes de la InstrucciónREG1 = 2, W = 2, C = ?

Después de la InstrucciónREG1 = 0, W = 2, C = 1; el resultado es 0

Ejemplo 3: Antes de la InstrucciónREG1 = 1, W = 2, C = ?

Después de la InstrucciónREG1 = FF, W = 2, C = 1; el resultado es negativo

Resta W de f

INICIO

Page 452: Curso PIC

452

Código Ensamblador: (Etiqueta) SWAPF f, d

Operadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)

d [0,1]

Operación: (f<3:0>) (dest<7:4>)

(f<7:4>) (dest<3:0>)

Bits de estado que se afectan: Ninguno

Descripción: Los nibles (grupo de 4 bits) superiores e

inferiores de “f” son intercambiados

Si “d” es 0, el resultado se coloca en W

Si “d” es 1, el resultado se coloca en f.

Ejemplo: SWAPF REG1, 0

Antes de la InstrucciónREG1 = 0xA5

Después de la InstrucciónREG1 = 0xA5W = 0x5A

Intercambio de Nibles in “f”

INICIO

Page 453: Curso PIC

453

Nota: Esta instrucción no se recomienda utilizar en los PIC de la gama media.

Código Ensamblador: (Etiqueta) TRIS f

Operadores: f = 5, 6 ó 7

Operación: (W) TRIS registro f

Bits de estado que se afectan: Ninguno

Descripción: El registro TRIS “f” (f = 5, 6, ó 7) toma

el valor del contenido de W. El registro

TRIS es el de programación de los

puertos como entrada o salida

Ejemplo: TRIS PORTA

Antes de la InstrucciónW = 0xA5

Después de la InstrucciónTRISA = 0xA5

Carga valor al registro TRIS con W

INICIO

Page 454: Curso PIC

454

Código Ensamblador: (Etiqueta) XORLW K

Operadores: 0 ≤ K ≤ 255

Operación: (W).XOR.K (W)

Bits de estado que se afectan: Z

Descripción: Se ejecuta la operación lógica OR

Exclusivo entre el contenido W y el

valor literal “k”. El resultado se

guarda en W.

Ejemplo: XORLW 0xAF

Antes de la Instrucción

W = 0xB5

Después de la Instrucción

W = 0x1a

OR Exclusivo valor literal con W

INICIO

Page 455: Curso PIC

455

Código Ensamblador: (Etiqueta) XORWF f, d

Operadores: 0 f 31 (Gama básica)

0 f 127 (Gama media)

d [0,1]

Operación: (W).XOR.(f) (dest)

Bits de estado que se afectan: Z

Descripción: Se ejecuta la operación lógica OR

Exclusivo del contenido con el contenido

del registro “f”.

Si “d” es 0, el resultado se coloca en W

Si “d” es 1, el resultado se coloca en “f”.

Ejemplo: XORWF REG1, 0

Antes de la InstrucciónREG = 0xAF (B’10101111)W = 0xB5 (B’10110101)

Después de la InstrucciónREG = 0x1A (B’00011010)W = 0xB5 (B’10110101)

OR Exclusivo de W con “f”

INICIO

Page 456: Curso PIC

456INICIO

Page 457: Curso PIC

457

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.

INICIO

Page 458: Curso PIC

458

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.

INICIO

Page 459: Curso PIC

459

Opción

Por defecto

Descripción

/a INHX8M Establece el formato del archivo .hex

/c On Habilita/deshabilita la sensitividad del caso

/d Ninguno Define símbolo: /dDebug /dMax=5 /dString=“abc”

/e On Habilita/Deshabilita la generación del archivo de error

/l On Habilita/Deshabilita la generación del archivo de listado

/m On Habilita/Deshabilita la expansión macro

/o On Habilita/Deshabilita la generación del archivo .obj

/p Ninguno Selecciona el tipo de microcontrolador

/q Off Habilita/Deshabilita el modo de salida de pantalla

/r Hexadecimal

Selecciona el tipo de formato numérico

/t 8 Coloca el número de espacios por Tabulación

/w 0 Selecciona los mensajes: 0 = todos, 1 = errores y advertencias2 = solamente errores

/x Off Habilita/Deshabilita la generación de la tabla de referencia

Descripción de las opciones

INICIO

Page 460: Curso PIC

460

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.

Las directivas del ensamblador se clasifican en:

• Directivas de Control, que colocan secciones condicionales en el código

ensamblado.

• Directivas de Datos, que asignan nombres a posiciones de memoria.

• Directivas de Listado, que controlan el archivo de listado (.lst).

• Directivas de macro, que controlan un grupo de comandos.

A continuación te mostraremos una tabla de las directivas que puedes

utilizar en el lenguaje ensamblador.INICIO

Page 461: Curso PIC

461

Directiva

Descripción Sintaxis Ejemplo

_ _BADRAM Especifica localidades inválidas en la RAM

_ _badram <exp> _ _badram 87-89,91

CBLOCK

ENDC

Define un bloque de constantes, la directiva ENDC debe colocarse al final

cblock[<exp>] <etiq> <,etiq>endc

cblock 0x20 nomb1, nomb2...endc

_ _CONFIG Especifica bits de configuración. Ver p 4-3

_ _config<exp> _ _config H’FFFF’

CONSTANT Declara constante de símbolo constant <etiq> constant long=125

DATA Crea Datos numéricos y de texto <etiq> data <exp> data 1, 2, externa

DB Declara datos de un Byte <etiq> db <exp> db ‘t’, 0xd, ‘e’, 3

DE Define datos en EEPROM <etiq> de <exp> de “miprog”, 0

#DEFINE Define etiqueta de sustitución de texto #define<nomb> [<tex>]

#define long 20

DT Define tabla <etiq> dt <exp> dt val1, val2

DW Declara datos de una palabra <etiq> dw <exp> dw 27, W27, W29

ELSE Comienza alternativa después de un IFIF es un si condicional, ELSE = sino

else else dw frio

END Finaliza bloque de programa end end

INICIO

Page 462: Curso PIC

462

Directiva Descripción Sintaxis Ejemplo

ENDC Finaliza un bloque de constantes endc endc ;ver CBLOCK

ENDIF Finaliza un bloque condicional IF endif endif ;ver IF

ENDM Finaliza la definición de una macro

endm endm ;ver MACRO

ENDW Finaliza un lazo condicional While Loop

endw endw ;ver WHILE

EQU Define una constante <etiq> equ <exp> portb equ 0x5

ERROR Crea un mensaje de error error “<texto>” error “fuera escala”

ERRORLEVEL Especifica los tipos de mensajes de error en los archivos .lst y .err

errorlevel 0|1|2<+|-><num>

errorlevel 1, -212

EXITM Sale de una macro exitm exitm ;ver MACRO

EXPAND Escribe las macros en el archivo .lst

expand expand

FILL Llena memoria <etiq> fill <exp> fill 0x100, 5

_ _IDLOCS Especifica localizaciones ID _ _idlocs <exp> idlocs 1234

INICIO

Page 463: Curso PIC

463

Directiva

Descripción Sintaxis Ejemplo

IF

ELSE

ENDIF

Comienza un bloque condicional. Se pregunta por una condición, si ésta es cierta se ejecuta la acción, sino se ejecuta la línea siguiente. Si en esa línea aparece ELSE entonces se asigna la acción que le sigue. El bloque IF se cierra con ENDIF

if <exp> <instruc><else <exp>> <instruc>endif

if temper > 100 dw calienteelse dw frioendif

IFDEF

IFNDEF

Se ejecuta si los símbolos se han definido

Se ejecuta si los símbolos no se han definido

ifdef <etiq> <instruc>endif

ifndef cierto dw no_ciertoendif

#INCLUDE Incluye un archivo fuente adicional. Ver p2-15

include <arch> include p16f84.inc

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

ENDM

Declara definición de macro. Una macro son un conjunto de instrucciones que pueden ser insertadas como código fuente.

<etiq> macro <instruc> endm

leer macro d1, d2 movlw d1... 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”

NOEXPAND Elimina macros del archivo .lst noexpand noexpand

INICIO

Page 464: Curso PIC

464

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

PAGE Inserta salto de página en la lista page page

PROCESSOR Especifica el tipo de microcontrolador

processor<tipo> processor 16f84

RADIX Especifica la base numérica a utilizar

radix<base num> radix dec ;(hex, oct)

RES Reserva memoria <etiq>res <num> menres res 64

SET Define una variable en el ensamblador

<label> set<exp> long set 0x12;

SPACE Inserta líneas vacías en el archivo .list

space <exp> space 3

SUBTITLE Especifica subtítulo del programa subtitle <texto> subtitle “lazo”

TITLE Especifica título del programa title <texto> title “comienzo”

#UNDEFINE Borra una etiqueta de sustitución #undefine <etiq> #undefine long

VARIABLE Declara variable de símbolo variable <etiq>=>exp>

variable grablong=64constant parclong=512

WHILE

ENDW

Hace un lazo si una condición es cierta

while <exp> while i<contador i+=1endw INICIO

Page 465: Curso PIC

465INICIO

Page 466: Curso PIC

466

PIC16C54 y 56

INDF(1)

TMROPCL

STATUS

FSRPORTA

PORTB

00h01h

02h

03h

04h

05h

06h

07h

0Fh10h

1Fh

REGISTROS DE

PROPÓSITOSGENERALES

MEMORIA DE DATOS DE LOS PIC16C54 Y 56

INICIO

Page 467: Curso PIC

467

PIC16C55

MEMORIA DE DATOS DEL PIC16C55

INDF(1)

TMROPCL

STATUS

FSRPORTA

PORTB

00h01h

02h

03h

04h

05h

06h

07h

0Fh10h

1Fh

REGISTROS DE

PROPÓSITOSGENERALES

PORTC

INICIO

Page 468: Curso PIC

468

PIC16C57

INDF(1)

TMROPCL

STATUSFSR

PORTAPORTB

00h01h02h03h04h05h06h07h

08h

0Fh

REGISTROS DE

PROPÓSITOSGENERALES

PORTC

00 01 10 11

REGISTROS DE

PROPÓSITOSGENERALES

10h

1Fh

FSR<6:5>Dirección

de registro

REGISTROS DE

PROPÓSITOSGENERALES

30h

3Fh

REGISTROS DE

PROPÓSITOSGENERALES

50h

5Fh

REGISTROS DE

PROPÓSITOSGENERALES

70h

7Fh

20h 40h 60h

Este Mapa de Direccionesretoma a las direccionesdel Banco 0

2Fh 4Fh 6Fh

Banco 0 Banco 1 Banco 2 Banco 3

INICIO

Page 469: Curso PIC

469

PIC16C58

INDF(1)

TMROPCL

STATUSFSR

PORTAPORTB

00h01h02h03h04h05h06h07h

0Fh

REGISTROS DE

PROPÓSITOSGENERALES

00 01 10 11

REGISTROS DE

PROPÓSITOSGENERALES

10h

1Fh

FSR<6:5>Dirección de registro

REGISTROS DE

PROPÓSITOSGENERALES

30h

3Fh

REGISTROS DE

PROPÓSITOSGENERALES

50h

5Fh

REGISTROS DE

PROPÓSITOSGENERALES

70h

7Fh

20h 40h 60h

Este Mapa de Direccionesretoma a las direccionesdel Banco 0

2Fh 4Fh 6Fh

Banco 0 Banco 1 Banco 2 Banco 3

INICIO

Page 470: Curso PIC

470

Registros de funciones especiales y bits de los PIC16C5X

Valor después Valor después

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

03h STATUS PA2 PA1 PA0 TO PD Z DC C 0001 1xxx

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 uuuuINICIO

Page 471: Curso PIC

471

PIC16F84

Banco 0 Banco 1

INICIO

Page 472: Curso PIC

472 INICIO

Page 473: Curso PIC

473

BANCO 0 PIC16F87X

INICIO

Page 474: Curso PIC

474

BANCO 1 PIC16F87X

INICIO

Page 475: Curso PIC

475

BANCOS 2 y 3 PIC16F87X

INICIO

Page 476: Curso PIC

476INICIO

Page 477: Curso PIC

477

Algunas Interfaces

INICIO

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.

Page 478: Curso PIC

478

Encendido de un diodo emisor de luz (LED)

INICIO

Encendido con un “1” lógico Encendido con un “0” lógico

Terminal

del Puerto

Terminal

del Puerto

Page 479: Curso PIC

479

Lectura de interruptores o pulsadores

PIC16C54

18 17 16 15 14 13 12 11 10

5V

1 2 3 4 5 6 7 8 9

5V

4 Resistencias de 4,7K

VssPIC

16F84A

INICIO

Page 480: Curso PIC

480

Control de la Línea de Corriente Alterna

INICIO

Relé

NC

C

NA

0 a 5V

Page 481: Curso PIC

481

Control de la Línea de Corriente Alterna 1

INICIO

0 a 5V 0 a 5V

Page 482: Curso PIC

482

Control de la Línea de Corriente Alterna 2

INICIO

0 a 5V

Page 483: Curso PIC

483

Control de la Línea de Corriente Alterna 3

INICIO

0 a 5V

Page 484: Curso PIC

484

Detector de Cruces por Cero

0 a 5V 0 a 5V

INICIO

Page 485: Curso PIC

485

Encendido de un Indicador de 7 Segmentos Ánodo Común (Display)

INICIO

Salida de los terminales de un Puerto. Los segmentos encenderán con un “0” lógico. El ánodo se conectará a una tensión positiva Vdd.

Segmento a

Segmento b

Segmento c

Segmento d

Segmento e

Segmento f

Segmento g

0 a 5V

Page 486: Curso PIC

486

Encendido de un Indicador 7 Segmentos de varios dígitos

INICIO

Dígito 0

Dígito 1

Dígito 2

Dígito 3

Segmento a

Segmento b

Segmento c

Segmento d

Segmento e

Segmento f

Segmento g

0 a 5V

0 a 5V

Page 487: Curso PIC

487

MATRIZ DE LEDS

INICIO

Valores de cada Columna

Selección de columna

0 a 5V

0 a 5V

Page 488: Curso PIC

488

Lectura de un teclado matricial

INICIO

0 a 5V

Entradas

0 a 5V

Salidas

Rb3

Rb2

Rb1

Rb0

Ra0

Ra1Ra2Ra1

S1 S2

S5 S6

S9 S10

S13 S14

S3 S4

S7 S8

S11 S12

S15 S16

R110k

R210k

R310k

R410k

Page 489: Curso PIC

489

Aplicación de un reloj con bajo consumo en el modo “Reposo”

INICIO

Page 490: Curso PIC

490

Interruptor Analógico

INICIO

0 a 5V

Page 491: Curso PIC

491

Notas de AplicaciónPIC16C5X y PIC16F84

AN712 Detector Autobaudio RS-232 para dispositivos PIC16C5X.AN619 Interfaces para un PIC16C5X con las memorias 93XX76 y 93XX86. AN657 Decodificador de un control remoto Infrarrojo con un PIC16C5X. AN526 Rutinas de utilidad matemática para los PIC16C5x/PIC16Cxx. AN541 Utilización de un PIC16C5x como un periférico inteligente IIC. AN530 Interfaz para un PIC16C5X con la EEPROM serial 93CX6. AN563 Utilización de los microcontroladores PIC16C5x como manejadores de LCD. AN592 Contador de frecuencia con un PIC16C5x. AN515 Comunicación con un bus IIC por medio de un PIC16C5X. TB050 Lectura de varios puntos de temperatura con sensores TC74 y un PIC16C5x. AN558 Uso de los dispositivos 24XX65 y 24XX32 con los códigos del PIC16C54. AN567 Interfaz para un PIC16C54 con una EEPROM serial 24LCXXB.AN590 Diseño de un reloj con pantalla de leds e interruptores con el PIC16C54. AN648 Interfaz del microcontrolador PIC16C54 con una EEPROM serial SPI.AN577 Resultados EMI del PIC16C54A.AN661 Decodificador Hopping para un codificador KeeLoq por medio de un PIC16C56AN715 Medida de sincronización usando un PIC16F84A y un ADXL202.AN689 Asistente de ingeniero por medio de un PIC16F84A.

INICIO

Page 492: Curso PIC

492

Notas de AplicaciónPIC16F87X

AN686 Circuitos Supervisores.AN246 Manejo de las entradas analógicas de un Convertidor SAR A/D.AN236 Automatización del hogar X-10 usando el PIC16F877A.AN826 Conceptos para el oscilador de cristal en un rfPIC™ y un PICmicro®.TB052 Monitorización de temperatura multizona.TB051 Medición de temperatura.AN670 Conversión coma flotante a ASCII.AN777 Multitarea para el PIC16F877 con el Salvo RTOS.AN732 Implementación de un cargador boot para el PIC16F87X.AN693 Entendiendo las especificaciones de un convertidor A/D.AN656 Programador para calibración de parámetros.AN582 Reloj de tiempo real de baja potencia.TB028 Técnica para calcular el día de la semana.TB033 Uso del PIC16F877 para desarrollar códigos del PIC16CXXX.AN709 Consideraciones de diseño a nivel de sistema.TB026 Cálculo de chequeo de la memoria de programa con el PIC16F87X.TB025 Carga de archivos HEX al PIC16F87X.TB029 Manejador complementario de LEDs.AN690 Autodetección de memoria de I²C™.

INICIO

Page 493: Curso PIC

493

Notas de AplicaciónPIC16F87X

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.

INICIO

Page 494: Curso PIC

494

Notas de AplicaciónOtros 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.

INICIO

Page 495: Curso PIC

495

Notas de AplicaciónOtros PIC

AN734 Utilizacion 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 PIC18C442AN719 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.

INICIO

Page 496: Curso PIC

496

Notas de AplicaciónOtros 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.

INICIO

Page 497: Curso PIC

497

Notas de AplicaciónOtros 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).

INICIO

Page 498: Curso PIC

498

Notas de AplicaciónOtros 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.

INICIO

Page 499: Curso PIC

499

• 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

Lista de algunos sitios web relacionados con PIC

INICIO

Page 500: Curso PIC

500 INICIO

Page 501: Curso PIC

501

Equipo requerido para la actualización del PICSTART PLUS

A medida que van fabricando nuevos modelos de microcontroladores, será necesario que tú actualices el MPLAB IDE y el programador PICSTART PLUS, para que puedas utilizarlos en los nuevos componentes ofrecidos. La versión nueva del MPLAB IDE, la puedes bajar en www.microchip.com. El equipo requerido para actualizar al PICSTART PLUS, es el siguiente:

• Programador PICSTART PLUS, el cual debe estar encendido y conectado al computador con el puerto serial.

• Última versión del Software MPLAB IDE.• Microcontrolador PIC17C44 (de 25MHz o más veloz) borrado.• Archivo actualizado psf######.hex (donde ###### es el número de la

última versión). Éste se encuentra en el software de instalación del MPLAB IDE.

• Un destornillador de estrías.

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.

Otro detalle, si tu PICSTART PLUS ya contiene el módulo UK003010, ya sea porque es nuevo (versión R20 o superior), o porque ya instalaste dicho módulo, no necesitarás seguir los pasos de actualización que se presentan en las siguientes páginas, simplemente descargarás la actualización desde tu computador.

INICIO

Page 502: Curso PIC

502

Procedimiento para la actualización del PICSTART PLUS

• Seleccionar en el MPLAB al microcontrolador PIC17C44.• Habilitar al programador PICSTART PLUS.• Seleccionar en los bits de configuración lo siguiente:

– Oscillator: XT.– Processor Mode: Microcontroller.– Watchdog timer: TMR.

• Seleccione en el menú: File, Import y luego escoja el archivo de actualización ######.hex.

• Inserte al PIC17C44 borrado en el sócalo del programador.

• Verifique que el dispositivo está borrado.• Seleccione el botón “Program” para transferir el archivo

al PIC17C44.• Al terminar la transferencia, extraiga al PIC17C44.• Salga del MPLAB, desconecte la fuente y la conexión

serial del computador al programador... (Continúa en la página siguiente).

INICIO

Page 503: Curso PIC

503

Procedimiento para la actualización del PICSTART PLUS (continuación)

• Extraiga la tapa posterior del programador.• Saque con cuidado al microcontrolador que está en el

programador y guárdelo, servirá para otras actualizaciones.

• Inserte cuidadosamente al PIC17C44 recién programado. El terminal 1 del PIC debe estar hacia el conector serial.

• Coloque la tapa posterior del programador y atorníllela con cuidado, sin aplicar un torque excesivo.

• Vuelva a conectar el programador PICSTART PLUS a la fuente y al puerto serial del computador.

• Arranque al MPLAB IDE y habilite al programador.• Podrás verificar que se ha actualizado la versión del

programador al habilitarlo. Igualmente podrás verificar la versión del MPLAB IDE en “Help, About MPLAB IDE”.

• Tu programador PICSTART PLUS está actualizado.

INICIO

Page 504: Curso PIC

504INICIO

Page 505: Curso PIC

505

Grabación de un programa en un PIC16F87X

La grabación de un microcontrolador PIC16F87X se realiza en forma serial, y para ello se puede hacer aplicando una tensión baja al terminal MCLR#/Vpp (5V) o con una tensión alta aplicada a ese terminal (13V ±5%). Para programar en ambos casos se utilizan la línea RB6/PGC para colocar los pulsos de sincronización o señal de reloj, y la línea RB7/PGD para colocar los bits datos en serie. En el caso de optarse por la programación de tensión baja, entonces se deberá colocar el terminal RB3/PGM en nivel alto.

A continuación te presentamos los planos y las instrucciones para que hagas un programador de los PIC16F84 y los de la serie PIC16F87X. Los programas para este programador los podrás bajar en Internet en la dirección:

http://www.todorobot.com.ar.

INICIO

Page 506: Curso PIC

506

Diagrama del circuitoprogramador

INICIO

Page 507: Curso PIC

507

El PicProg

Descripción:

PicProg Programador para PIC 16F8xx(Versión 2.0) (c) TodoRobot - 2002

El PicProg está preparado para programar los siguientes modelos de la familia de Microchip:

16F84, 16F870, 16F871, 16F872, 16F873, 16F874, 16F876, 16F877.

El PicProg le permite Programar, Verificar y Borrar todos los modelos anteriormente detallados.El archivo Hexadecimal (.hex) a grabar debe ser formato Intel INHX8M. Éste es el formato estándar generado por la herramienta de desarrollo MPLAB que puede descargarse gratis en el sitio de Microchip.

Para ir al sitio web donde está el software de instalación del PicProg haz clic aquí.

INICIO

Page 508: Curso PIC

508

Instrucciones para el PicProg

ProgramarEl 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.

VerificarComo 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. BorrarEsta 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. Poner el PIC en Modo RUNEsta función haced qued la línea MCLR/VPP pase a 5v y por lo tanto el PIC salgo del modo Reset para pasar al modo de ejecución normal.Está funcionalidad solo es útil cuando se está usando la modalidad In-Circuit o bien se esté trabajando en un diseño usando el PIC instalado en el Programador.

INICIO

Page 509: Curso PIC

509

Programación Paso por paso

1°) Seleccionar el puerto LPT a usar mediante el menú desplegable correspondiente. Si por algún motivo no se pudiese detectar el Hardware del programador, aparecerá un mensaje en rojo indicando el error y se bloquearán todos los controles hasta tanto no se resuelva el problema. Generalmente la dirección 0x378 corresponde al LPT1 y 0x278 al LPT2. Pero en contados casos, puede darse que el LPT1 tenga la dirección 0x3BC, en cuyo caso el LPT2 asume la dirección 0x378.2°) Seleccionar el modelo de Microcontrolador que se desea programar. Esta función puede dejarse también en Autodetectar para permitir que el PicProg lo detecte automáticamente.3°) Ingresar el archivo Hexadecimal (.hex) que contiene el programa a descargar al PIC. Puede usarse el botón BUSCAR para encontrar el archivo a grabar o bien escribirlo directamente en la ventana.4°) Pulsar el botón CONFIGURAR para establecer la configuración deseada para el PIC (Watchdog, Power Up Timer, etc). Todas las configuraciones están por defecto seteadas para detectar estos parámetros directamente desde el archivo hexadecimal (.hex), para que esto funcione se debieron haber colocado previamente en el código fuente a fin de que el compilador genere el código necesario en el archivo hexadecimal. En ese caso este punto puede ser salteado y pasar directamente al punto siguiente.5°) Pulsar el botón PROGRAMAR para iniciar la descarga hacia el PIC. Aparecerá una ventana pidiendo confirmación de los parámetros que se usarán en la programación y, una vez aceptado, si todo ha funcionado correctamente, aparecerá una ventana indicando la finalización del proceso.INICIO

Page 510: Curso PIC

510

Algunas sugerencias

IMPORTANTE: Antes de insertar o extraer un micro del zócalo de programación, se debe tener la precaución de retirar la alimentación del programador, debido a que no se ha previsto ningún circuito de aislamiento y podría resultar dañado el chip o el puerto paralelo de la PC. Asimismo es aconsejable no alimentar el programador hasta tanto el programa PicProg no haya sido ejecutado y se encuentre activo en pantalla. Reporte de errores a [email protected] http://www.todorobot.com.ar

INICIO