Você está na página 1de 438

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA

FACULTAD DE INGENIERÍA, ARQUITECTURA


Y DISEÑO

11686 MICROCONTROLADORES

PRESENTA: DR. EVERARDO INZUNZA GONZÁLEZ


Profesor – Investigador
Email:einzunza@uabc.edu.mx
Tel. 175 0744 Ext. 64321

Ensenada Baja California; a 02 de Febrero del 2016.

Elaboró: Dr. Everardo Inzunza


González 1
COMPETENCIA DEL CURSO

Programar un microcontrolador mediante el


estudio de sus características y técnicas de
programación para desarrollar tareas de monitoreo
y control en forma eficiente y organizada.

Elaboró: Dr. Everardo Inzunza


González 2
CONTENIDO DEL CURSO

I.  Arquitectura del microcontrolador

II.  Programación en bajo nivel para el microcontrolador.

III.  Programación en alto nivel para el microcontrolador

IV.  Aplicaciones de los periféricos del microcontrolador

para realizar tareas de adquisición de datos, monitoreo

y control.

Elaboró: Dr. Everardo Inzunza


González 3
Evidencia del Desempeño (Proyecto Final)
q  Diseño y Construcción de un prototipo y pruebas operativas del mismo;

q  Elaborar un reporte técnico donde se muestre la metodología del diseño


de un programa que emplee los recursos de un microcontrolador para la
resolución de un problema de monitoreo, adquisición de datos o control. El
reporte debe incluir resultados, comentarios y conclusiones en forma
estructurada.

Ejemplos de Proyecto final a desarrollar:


-  Diseño y construcción de un Instrumento basado en microcontrolador
para medición de variables físicas que utilice un LCD y comunicación con PC.

-  Diseño y construcción de un sistema de producción (automático) basado


en el control de una banda transportadora.

-  Robot móvil o brazo robótico.


Elaboró: Dr. Everardo Inzunza
González 4
Conocimientos previos

Ø  Circuitos lógicos
Ø  Flip-Flops
Ø  Diseño digital
Ø  Manejo de memorias de estado sólido
Ø  Microprocesadores (Teoría de operación y
programación)

Ø  Habilidad para programación (C, C++, Ensamblador)

Elaboró: Dr. Everardo Inzunza


González 5
BIBLIOGRAFÍA
The Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium,
and Pentium Pro Processor Architecture, Programming, and Inter-facing
Barry B. Brey
Prentice Hall 6ta Edición
ISBN: 0130607142

Microcontrolador PIC 16F84, Desarrollo de proyectos.


Enrique Palacios, Fernando Remiro, Lucas J. López
Alfaomega * Ra-Ma, 2da Edicion.

Microcontroladores PIC. Diseño práctico de aplicaciones. Primera parte: PIC 16F84.


José Ma Angulo Usategui, Susana Romero Yesa, Ignacio Angulo Martínez.
Mc-GrawHill, 3ra edición
ISBN: 84-481-3788-4

Microcontroladores PIC. Diseño práctico de aplicaciones. Segunda parte: PIC 16F87X.


José Ma Angulo Usategui, Susana Romero Yesa, Ignacio Angulo Martínez.
Mc-GrawHill
ISBN: 84-481-2858-3

Elaboró: Dr. Everardo Inzunza


González 6
BIBLIOGRAFÍA
Microcontroladores. Fundamentos y aplicaciones con PIC.
Fernando E. Valdés Pérez, Ramón Pallás Areny
Alfaomega-Marcombo
ISBN: 978-970-15-1149-7

Compilador C CCS y Simulador PROTEUS para microcontroladores PIC


Eduardo García Breijo
Alfaomega-Marcombo
ISBN: 978-970-15-1397-2

Microprocesadores RISC, Evolución y tendencias


Clemente Rodríguez, Gonzalo Álvarez, Olatz Arregui, Jesús M. Pérez
Alfaomega * Ra-Ma

PIC Microcontroller Project Book


John Iovine
Mc-GrawHill
ASIN: 0071354794
Elaboró: Dr. Everardo Inzunza
González 7
BIBLIOGRAFÍA

dsPIC, Diseño práctico de Microcontroladores Motorola-


aplicaciones. Freescale, Programación, familias y
José María Angulo Usategui sus distintas aplicaciones en la
Aritza Etxebarría Ruiz industria.
Ignacio Angulo Martínez Juan Carlos Vesga Ferreira, et. Al.
Iván Trueba Parra Alfaomega-Freescale, 1ra Edición
Mc-GrawHill ISBN: 978-970-15-1329-3

PIC in practice Fundamentos de los


D.W. Smith Microprocesadores
Mc-GrawHill Roger L. Tokheim
Mc-GrawHil
ISBN: 0750648120
(Serie Schaum)l

Risc Architectures
J. C. Heudin, C. Panetto
Editorial Chapman & Hall
ISBN: 0412453401
Elaboró: Dr. Everardo Inzunza
González 8
BIBLIOGRAFÍA
Getting Started with Arduino. Building Internet of Things with the
Massimo Banzi Arduino.
O’Reilly: Make:Books Charalampos Doukas

Programming Arduino Getting Arduino Robotics


Started with Sketches John-David Warren, Josh Adams and Harald
Molle
Simon Monk Technology in Action
Mc-GrawHill

30 Arduino Projects for the Evil Beginning Android ADK with Arduino
Genius Mario Böhmer
Simon Monk Technology in Action
Mc-GrawHill

Arduino + Android Projects for the The definitive guide to ARM Cortex
Evil Genius M3
Simon Monk 2nd edition, Joseph Yiu 2007,2010
Mc-GrawHill Elsevier Inc.

Elaboró: Dr. Everardo Inzunza


González 9
FORMA DE EVALUAR MICROCONTROLADORES
•  Exámenes teóricos y prácticos (4 parciales) 50%. (Promedio min. 60 para
exentar ordinario).
•  Laboratorio 20% Participación 5%
• Proyecto 15%
• Tareas 10%

Ø  REQUISITOS PARA ACREDITAR EL CURSO

1.  Haber acreditado el laboratorio.

2.  Cumplir con las asistencias establecidas en el reglamento.

3.  Haber entregado el proyecto Final. (Equipos de 3 personas máx.)


Nota: El alumno que no cumpla con alguno de los requisitos anteriores
no tendrá derecho a calificación Ordinaria.
Dr. Everardo Inzunza G.
Nombre y firma del representante de grupo Firma del profesor
10
FORMA DE EVALUAR LABORATORIO DE
MICROCONTROLADORES

Ø  REQUISITOS PARA ACREDITAR EL LABORATORIO

1.  Cumplir con el 80% de asistencia.

2.  Entregar el 90% de las prácticas (Experimento y reporte).

3.  Entregar proyecto final.

4.  Aprobar examen práctico

Dr. Everardo Inzunza G.


Nombre y firma del representante de grupo Firma del profesor
11
ÍNDICE DE PRESENTACIÓN

Ø  INTRODUCCIÓN A LOS SISTEMAS DIGITALES


Ø  INTRODUCCION A LOS MICROCONTROLADORES (µC)
Ø  COMPONENTES DE UN µC
Ø  CARACTERÍSTICAS DE LOS µC
Ø  RECURSOS DE LOS µC
Ø  HERRAMIENTAS DE DESARROLLO
Ø  APLICACIONES

Elaboró: Dr. Everardo Inzunza


González 12
Click en la liga…

INTRODUCCIÓN A LOS
SISTEMAS DIGITALES

Elaboró: Dr. Everardo Inzunza


González 13
q  INTRODUCCIÓN A LOS µC
Ø  Controlador y Microcontrolador

n  Recibe el nombre de controlador el dispositivo que se emplea para el


gobierno de uno o varios procesos.

n  Por ejemplo, el controlador que regula el funcionamiento de un horno


dispone de un sensor que mide constantemente su temperatura interna,
cuando sobrepasa los límites prefijados, genera las señales adecuadas para
intentar llevar a la temperatura al rango estipulado.

n  Hace cuatro décadas, los controladores se construían con componentes de


lógica discreta; posteriormente se emplearon los microprocesadores, que se
rodeaban con chips de memoria y E/S sobre una tarjeta de circuito impreso.
Elaboró: Dr. Everardo Inzunza
González 14
Ø  Controlador y Microcontrolador…

§  En la actualidad, todos los elementos del controlador se han podido incluir


en un solo chip, el cual recibe el nombre de microcontrolador.

§  Realmente consiste en una sencilla pero completa computadora contenida


en el corazón de un circuito integrado.

§  El microcontrolador es un circuito integrado de alta escala de integración


que incorpora la mayor parte de los elementos que configuran un
controlador.

§  Se dice que es “la solución en un chip” porque su reducido tamaño minimiza


el número de componentes y el costo.
Elaboró: Dr. Everardo Inzunza
González 15
ASPECTO FISICO DE UN µC

DIP, Dual In Line Package PLCC, Plastic Leaded Chip Carrier

Ejemplos de tarjetas de desarrollo con microcontroladores.


Elaboró: Dr. Everardo Inzunza
González 16
Ejemplos de tarjetas de desarrollo con microcontroladores PIC

DIY PIC MCU Development Board Kit Update PIC16F877A PIC Development Board
PIC16F877 877A PIC16F Minimum System Board NEW

Elaboró: Dr. Everardo Inzunza


González 17
Ejemplos de tarjetas de desarrollo con microcontroladores PIC

PIC MCU Microcontroller Development Board


PIC 16F877A
usbStick (Microchip PIC18F2550 IO
Development Board)

Elaboró: Dr. Everardo Inzunza


González 18
Ejemplos de tarjetas de desarrollo con microcontroladores PIC

QL200 PIC Microchip LCD USB MCU ICD Development Board

Elaboró: Dr. Everardo Inzunza


González 19
Ejemplos de tarjetas de desarrollo con microcontroladores PIC

PIC Microcontrolle Development Board + 16 X 2 LCD 16F877A

Elaboró: Dr. Everardo Inzunza


González 20
Ø COMPONENTES DE UN µC

§  Microprocesador o CPU.

§  Memoria RAM para guardar los datos temporalmente.

§  Memoria de solo lectura (ROM, EPROM, EEPROM o FLASH) para guardar el programa de

la aplicación, o ciertos datos.

§  Líneas de entrada y salida (Puertos) para comunicarse con el exterior

§  Diversos módulos para el control de periféricos (Temporizadores, convertidores

analógicos a digitales, D/A, etc.)

§  Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.

Elaboró: Dr. Everardo Inzunza


González 21
Ø COMPONENTES DE UN µC…

Todos estos componentes se encuentran dentro del chip microcontrolador


Elaboró: Dr. Everardo Inzunza
González 22
Ø Gamma de microcontroladores
u  Existen muchos fabricantes y modelos de microcontroladores los
cuales se diferencian por:

n  Su cantidad de entradas/salidas (puertos paralelo)

n  Si tienen o no convertidores analógicos/digitales,

n  Puertos de comunicación serie

n  Temporizadores,

n  Tamaño de la memoria de datos

n  Tamaño de la memoria de programa (código).

n  Lenguaje de programación (ensamblador, C)


Elaboró: Dr. Everardo Inzunza
González 23
Fabricantes de Microcontroladores y µP:

Tabla 1. Fabricantes más comunes de microcontroladores.

Fabricante Modelos

INTEL 8048, 8051, 80C196, 80186

FREESCALE 6805, 68HC11, 68HCXX, 68705XX,


683XX
MICROCHIP PIC 16F84, PIC 16F87X, PIC18FXXX

ATMEL ARDUINO, AVRs, ATMEGA168,


ATMEGA328
TEXAS INSTRUMENTS MSP430

HITACHI HD64180

PHILIPS Clones del 8051

S6S THOMSON ST-62XX

NATIONAL COP400, COP800

ZILOG Z8, Z86XX

TOSHIBA 68HC11

ANALOG DEVICES ADuC7xxx


Elaboró: Dr. Everardo ARM7TDMI
Inzunza
González 24
TAREA Evolución de los microprocesadores INTEL

1. Historia de los microprocesadores 7. Procesadores de silicio

8. Otros materiales
2. La evolución del microprocesador

9. Empaquetado
3. Funcionamiento

10. Disipación de calor


4. Rendimiento
11. Conexión con el exterior
5. Arquitectura
12. Buses del procesador
6. Fabricación

Elaboró: Dr. Everardo Inzunza


González 25
Ø  CARACTERISTICAS DE LOS MICROCONTROLADORES

•  Prestaciones:
Su reducido tamaño y bajo costo permiten que se pueda incorporar

en sistemas que antes no tenían controladores. Por ejemplo en

automotores, televisores, hornos, estereos, etc.

•  Confiabilidad:
Al tener menos componentes, se disminuye el riesgo de fallas y
precisa menos calibraciones.

Elaboró: Dr. Everardo Inzunza


González 26
Ø  CARACTERISTICAS DE LOS MICROCONTROLADORES (2)

•  Flexibilidad:

Como el control se hace mediante un programa, su

modificación solo precisa cambios de programación.

•  Aplicaciones:

“La única limitación que tienen las aplicaciones de los


microcontroladores actuales está en la imaginación

del diseñador...”

Elaboró: Dr. Everardo Inzunza


González 27
Ø  Recursos especiales de los µC

•  Timers o temporizadores.
•  Watchdog o perro guardián.
•  Brownout o protección ante fallo de alimentación.
•  Sleep o estado de reposo o bajo consumo.
•  Convertidor analógico a digital.
•  Convertidor digital a analógico.
•  Comparador analógico.
•  PWM o Modulador de anchura de pulso.
•  Puertos de E/S digitales.
•  Puertos de comunicación serial (UART, USART, USB, I2C, CAN).
•  Protección de código.
Elaboró: Dr. Everardo Inzunza
González 28
Proyectos con microcontroladores

En este proceso se deben seguir los siguientes pasos:

1- Planear el comportamiento del circuito, pensando en los


elementos que es necesario controlar.

2- Diseñar el circuito. Tener en cuenta las características eléctricas


(capacidades, corrientes por puerto, velocidades, etc.)

3- Hacer el prototipo en protoboard o circuito impreso universal.

4- Elaborar un diagrama de flujo del programa.

5- Escribir el programa (tener siempre presente el circuito eléctrico).

Elaboró: Dr. Everardo Inzunza


González 29
Proyectos con microcontroladores…

6- Compilar el programa.

7- Usar un simulador para verificar su buen funcionamiento.

8- Enviar el programa al microcontrolador.

9- Montar el microcontrolador y probar todo el proyecto.

10- Si fuera necesario, repetir los últimos pasos, hasta obtener el


funcionamiento buscado (5-9).

11- Superando todas las etapas anteriores, armar el impreso final y, si


desea hacer varios en serie, usar microcontroladores tipo OTP (One
Time Programming) o habilitar la protección del código.

Elaboró: Dr. Everardo Inzunza


González 30
HERRAMIENTAS DE DESARROLLO

SOFTWARE
Ø  Editor
ü  MPLAB
ü  PROTEUS
Ø  Ensamblador ü  ICPROG
ü  Compilador C CCS

Ø  Simulador HARDWARE

ü  PIC START PLUS


ü  Programador genérico
Ø  Emulador

Ø  Grabador programador (Hardware)

Elaboró: Dr. Everardo Inzunza


González 31
PROGRAMADORES DE PICS (HARDWARE)

PIC K150 USB Automatic Microcontroller Programmer


+ICSP Download cable

Elaboró: Dr. Everardo Inzunza


González 32
PROGRAMADORES DE PICS (HARDWARE)

Programador Pic Usb Microprog

PIC – 600 Steren


Elaboró: Dr. Everardo Inzunza
González 33
TIPOS DE ARQUITECTURA
DE MICROCONTROLADORES

Elaboró: Dr. Everardo Inzunza


González 34
µC’s con arquitectura CISC (Complex Instruction
Set Computer) – Von Neumann

Bus de direcciones
s
MEMORIA
Bus de datos
PROCESADOR RAM / ROM

R/W

Diagrama a bloques de interconexión.

Elaboró: Dr. Everardo Inzunza


González 35
µC’s con arquitectura RISC (Reduced Instruction
Set Computer) - Harvard

Bus de Bus de
direcciones direcciones

MEMORIA 13 9 MEMORIA
PROCESADOR
DE CÓDIGO DE DATOS (SRAM)
(FLASH) 14 8
Bus de
Bus de DATOS
INSTRUCCIONES

Diagrama a bloques de interconexión.

Elaboró: Dr. Everardo Inzunza


González 36
APLICACIONES DE LOS MICROCONTROLADORES
q  ELECTRODOMÉSTICOS

Horno microondas Lavadoras

Secadoras
T.V.

Elaboró: Dr. Everardo Inzunza


González 37
APLICACIONES (2)
q  APARATOS PORTÁTILES

RELOJ GPS
T.V. PORTÁTIL

Elaboró: Dr. Everardo Inzunza


González 38
APLICACIONES (3)
q  MÁQUINAS EXPENDEDORAS

Elaboró: Dr. Everardo Inzunza


González 39
APLICACIONES (4)
q  INSTRUMENTACIÓN

Osciloscopio digital Termométro digital Velocímetro digital

pHmetro Gaussmetro Multímetro


Elaboró: Dr. Everardo Inzunza
González 40
APLICACIONES (5)
q  CONTROL INDUSTRIAL Y ROBOTICA

Control de procesos Robótica móvil

Elaboró: Dr. Everardo Inzunza


González
Robótica móvil 41
APLICACIONES (6)
q  SISTEMAS DE NAVEGACIÓN ESPACIAL

Brújulas digitales
Tablero de avión

Elaboró: Dr. Everardo Inzunza


González 42
APLICACIONES (7)
q  SEGURIDAD Y ALARMAS

Alarmas domésticas, comerciales,


industriales y automotrices

Elaboró: Dr. Everardo Inzunza


González 43
APLICACIONES (9)
q  INDUSTRIA AUTOMOTRÍZ

Elaboró: Dr. Everardo Inzunza


González 44
APLICACIONES (10)
q  PERIFÉRICOS DE COMPUTADORA Y OFIMÁTICA

Mouse Scanner Monitor Teclado

Impresora
Copiadora FAX
Elaboró: Dr. Everardo Inzunza
González 45
MUCHAS GRACIAS!!!
ATTE.
DR. EVERARDO INZUNZA GONZÁLEZ
Email: einzunza@uabc.edu.mx

Elaboró: Dr. Everardo Inzunza


González 46
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA

INGENIERIA EN ELECTRÓNICA

MICROCONTROLADORES

INTRODUCCIÓN A LOS
SISTEMAS DIGITALES

DR. EVERARDO INZUNZA GONZÁLEZ


• Introducción
Sistemas analógicos Vs digitales

" El mundo real es completamente analógico.


" Las señales analógicas son contínuas en el
tiempo.
Amplitud

0
t

Ejemplo de una señal analógica

Elaboró: Dr. Everardo Inzunza


González 2
Ejemplo de señales o variables analógicas

" Velocidad " Tiempo


" Fuerza " Audio (Voz, sonido)
" Presión " Video
" Temperatura " Vibración
" Aceleración " Etc.

Elaboró: Dr. Everardo Inzunza


González 3
Sistema analógico
•  Contiene dispositivos que manipulan
cantidades físicas representadas en forma
analógica (contínua), por ejemplo en un
receptor de radio la amplitud de la señal de
salida a la bocina puede tener cualquier valor
entre cero y su límite máximo.

Elaboró: Dr. Everardo Inzunza


González 4
Señales Digitales
" Estas señales se caracterizan por ser discretas en el tiempo
y cuantizadas en amplitud.

t
Ejemplo de una señal Digital

" Reloj de pulso o cronómetro (digitos)


" Un oscilador binario
" Cantidad de personas en una reunión
" Cantidad de carros en un estacionamiento
Elaboró: Dr. Everardo Inzunza
González 5
Sistema Digital
•  Es aquel en donde la información se representa y
procesa en forma discreta en vez de contínua.

•  La información en los cassetes de audio/video


tradicionales se graba en forma analógica,
mientras que los discos compactos (CD/DVD)
guardan la información en forma digital. Una
forma más moderna de cinta de audio almacena la
información en forma digital.
Elaboró: Dr. Everardo Inzunza
González 6
Cinta magnética con información Analógica
y Digital

a)  Forma analógica


b)  Forma analógica muestreada
c)  Forma Digital

Elaboró: Dr. Everardo Inzunza


González 7
VENTAJAS DE LOS SISTEMAS DIGITALES

1.  Los sistemas digitales son más fáciles de Diseñar. Esto se debe a
que los circuitos utilizados son circuitos de conmutación, donde no son
importantes los valores exactos de corrientes y voltajes, sino únicamente el
rango en que éstos se encuentran (ALTO o BAJO).

2.  Facilidad para almacenar la información. Esto se logra por medio de


circuitos de conmutación especiales (RAM, ROM, PROM, EPROM, EEPROM,
Discos magnéticos, discos ópticos) que pueden capturar información y retenerla
el tiempo que sea necesario.

3.  Programación de operaciones. Es bastante sencillo diseñar sistemas


digitales cuya operación esté controlada por un grupo de instrucciones
denominado programa.

Elaboró: Dr. Everardo Inzunza


González 8
VENTAJAS DE LOS SISTEMAS DIGITALES (2)

4.  Mayor Exactitud y precisión. Los sistemas digitales pueden


manejar el número de digitos de precisión que usted necesite
añadiendo simplemente más circuitos de conmutación.

5.  El ruido afecta en forma mínima.

6.  Se pueden fabricar más circuitería digital sobre pastillas de


circuitos integrados. (Miniaturización)

7.  Capacidad de procesamiento superiores en términos de


velocidad.

8.  Mecanismos integrados de deteccción y corrección de


errores.
Elaboró: Dr. Everardo Inzunza
González 9
Sistema de adquisición de datos
Memoria

Circ. para Puerto Interfaz Carga


Sensor acond. de
señales
A/D CPU de
sal.
de
salida (ca o cd)
Convierte Motores,
un Interfaz de Microcontrolador Sirve como calderas
Parámetro Entrada en la
O Aislamiento entre Bombas,
Físico en que el Unidades de
Computadora
una señal Se usan Op- microcontrolador Aire
eléctrica Amp y las cargas de acondiciona
Y otros alto voltaje. Ej. do
circuitos Triacs, SCR, Etc.
integrados Transistores de
potencia,
Optoacopladores.

Elaboró: Dr. Everardo Inzunza


González 10
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA

FACULTAD DE INGENIERÍA, ARQUITECTURA Y DISEÑO

INTRODUCCION A LOS MICROCONTROLADORES PIC’s


Parte II
MAESTRO: DR. EVERARDO INZUNZA GONZÁLEZ
CONTENIDO DE PRESENTACIÓN

•  RECURSOS ESPECIALES DE LOS µC PIC’s 16F8xxx

•  ARQUITECTURA DEL µC PIC’s 16F8xxx

•  DIAGRAMA DE CONEXIONES

•  CONJUNTO DE INSTRUCCIONES DEL µC PIC’s 16F8xxx

2
Ø  Recursos Especiales de los Microcontroladores

•  Timers o temporizadores

•  Watchdog o perro guardián

•  Brownout o protección ante fallo de alimentación

•  Sleep o estado de reposo o bajo consumo

•  Convertidor analógico a digital

•  Convertidor de digital a analógico

•  Comparador analógico
•  PWM o Modulador de anchura de pulso

•  Puertos de E/S digitales

•  Puertos de comunicación serial

•  Protección de código

3
Ø  RECURSOS ESPECIALES…

Ø  Timers:

•  Controlan períodos de tiempo (temporizadores).

•  Llevan la cuenta de acontecimientos que suceden en el exterior


(contadores).

Ø  Watchdog:

•  Los programas frecuentemente pueden fallar, tanto por problemas de


diseño o por ruidos externos al sistema. Por lo general, el procesador
queda en un lazo infinito dejando de atender al resto del programa.

•  La única alternativa que nos queda en estos casos es resetear el sistema.

•  El perro guardián o watchdog se encarga de resetar al sistema


automáticamente, en el momento que el sistema quede “colgado” o
“congelado”.

4
Ø  RECURSOS ESPECIALES…

Ø  Brownout:
•  Es un circuito de protección que resetea al microcontrolador cuando la tensión de
alimentación es inferior a un mínimo.

•  Si el microcontrolador no posee este recurso, se puede construir uno externo.

•  El siguiente circuito cumple esta función:

5
Ø  RECURSOS ESPECIALES…

Ø  Sleep o Bajo consumo:

•  Son abundantes las situaciones reales de trabajo en que el


microcontrolador debe esperar sin hacer nada, hasta que se produzca
algún acontecimiento externo que lo ponga de nuevo en funcionamiento.
Para ahorrar energía, los microcontroladores disponen de una instrucción
especial que los pasa a este modo de reposo.

•  En dicho estado se detiene el reloj principal y se congelan los circuitos


asociados. Sale de este estado al interrumpirse por el acontecimiento
esperado.

•  En los PIC se ingresa a este modo ejecutando la instrucción SLEEP.

6
Ø  RECURSOS ESPECIALES…

•  Para despertar al microcontrolador y sacarlo de este estado deberá ocurrir


uno de estos eventos:

1- Un RESET externo en el pin MCLR.

2- Un RESET interno producido por el watchdog.

Ambos eventos causan un reset del dispositivo microcontrolador.

7
Ø  RECURSOS ESPECIALES…
u  Convertidor A/D y D/A:

•  Los microcontroladores que poseen convertidores, pueden manejar estas


señales analógicas. Suelen disponer de un multiplexor para manejar varias
entradas analógicas.

Ø  Comparador analógico:

•  Algunos microcontroladores poseen un amplificador operacional que actúa


como comparador entre una señal fija de referencia y otra variable. La
salida del comparador proporciona un 0 o un 1 según la señal sea mayor o
menor que la de referencia.

8
Ø  RECURSOS ESPECIALES…

Ø  PWM:

•  Son circuitos que proporcionan en su salida impulsos de ancho variable,


que se ofrecen al exterior a través de las patitas del encapsulado

Ø  Puertos digitales de E/S:

•  Todos los microcontroladores disponen de algunas patitas de E/S


digitales. Por lo general se agrupan de 8 bits.

•  Pueden configurarse como entrada o salida cada patita


independientemente de las otras.

9
Ø  Puertos de comunicación:

•  Con el objeto de dotar a los microcontroladores de la posibilidad de


comunicarse con otros dispositivos externos, otros buses de
microprocesadores, buses de sistemas, redes, etc., algunos modelos
disponen de estos recursos entre los que se destacan:

•  UART: Adaptador de Comunicación Serie Asincrónica.

•  USART: Adaptador de Comunicación Serie Sincrónica y Asincrónica.

•  USB (Universal Serial Bus): Moderno bus serie para los PC.

•  Bus I2C: Interfaz serie a dos hilos (Philips).

•  CAN (Controller Area Network): Interfaz utilizada por automóviles.

10
HERRAMIENTAS DE DESARROLLO

Ø  Herramientas de desarrollo

•  Además del lenguaje de programación y su compilador o intérprete, se precisan otras


herramientas para depurar y poner a punto los diseños basados en C.

Ø  Grabadores o programadores

•  Editado el programa y convertido a código de máquina, hay que grabarlo en la memoria de


instrucciones del microcontrolador. Cuando hay que grabar enormes cantidades de chips es
preferible encargarle la operación al fabricante y utilizar sistemas con memoria ROM con máscara.
Cuando es el usuario quien desea grabar los programas ha de adquirir microcontroladores con
memoria no volátil tipo OTP, EPROM o EEPROM.

Ø  Simuladores

•  Son programas soportados generalmente desde una PC, capaces de simular la ejecución de
programas confeccionados para un modelo de microcontrolador. Visualizan en el monitor de la PC
el estado actual de todos los recursos y admiten la ejecución paso a paso, los puntos de parada,
la modificación de los contenidos de los registros, sin necesidad de montar el físico.

•  Los simuladores no soportan interrupciones externas en modo real y funcionan mas lentamente
que los microcontroladores físicos.

11
Ø  Emuladores en circuito

•  Se trata de un instrumento que se coloca entre una PC y el zócalo


de la tarjeta de circuito impreso donde se alojará el microcontrolador
definitivo. El programa es ejecutado desde la PC, pero para la
tarjeta de aplicación es como si lo hiciera el propio microcontrolador
que luego irá en el zócalo. Presenta en pantalla toda la información
al igual que los simuladores por software.

12
Algunos Fabricantes de Microcontroladores:

q  Se considera a Intel como el padre de los microcontroladores. Este fabricante siempre ha ido delante de los
demás presentando sus nuevos productos. El primer microcontrolador de 8 bits se considera al 8048 y lo fabricó
Intel en la década de los 70. La siguiente generación, más evolucionada, fue la 8051 a la que ha seguido la de 16
bits: 80C196, 80188, 80186 y 80386EX que es la versión basada en 80386, la cual permite trabajar con
herramientas clásicas desarrolladas para el entorno del PC.
q  Otra de las principales empresas del mundo de los dispositivos programables es Motorola (FreeScale), que
dispone del potente microcontrolador 68HC11 de 8 bits para datos y 16 para direcciones. Este se caracteriza por
poder trabajar como arquitectura abierta o cerrada. Trabajando como arquitectura abierta, hereda todas las
posibilidades de direccionamiento que posee su ancestro: el 6809.
q  Los microcontroladores PIC de la empresa Microchip han sido conocidos durante los últimos 20 años. Su
popularidad avanza día a día siendo incluídos en la mayoría de los proyectos debido a su bajo costo, reducido
consumo, fácil programación y abundancia de herramientas de soporte.

13
PIC 16F84

Ø  PIC (Peripheral Interface Controller) la letra F hace referencia al


tipo de memoria de programa, en este caso FLASH, si fuera
PIC16C84, la letra C hace referencia al modelo con memoria de
programa de tipo EEPROM.

Ø  El PIC16F84 esta dotado de 18 pines, 13 de los cuales son para E/


S de datos, 2 para alimentación, 2 para clock y uno para reset.
Veamos una figura con la nomenclatura de sus respectivos pines:

14
PINOUT DEL PIC 16F84

15
DIAGRAMA DE CONEXIÓN ELÉCTRICA

16
CARACTERISTICAS RELEVANTES DE LOS PICS 16F87X Y 16F84A
MODELO PIC16F84A PIC16F873 PIC16F874 PIC16F876 PIC16F877
MEM. Bytes PROG. 1792 7168 7168 14336 14336
(FLASH) Word 1024X14 4096X14 4096X14 8192X14 8192X14
MEM. EEPROM 64 Bytes 128 Bytes 128 Bytes 256 Bytes 256 Bytes
DATOS RAM 68 Bytes 192 Bytes 192 Bytes 368 Bytes 368 Bytes
Conv. A / D NO 5 (10 Bits) 8 (10 Bits) 5 (10 Bits) 8 (10 Bits)

BOD (Detección de NO SI SI SI SI
baja tensión)
LINEAS E/S 13 22 33 22 33
COMUNICACION SERIE NO USART/ MSSP USART/ MSSP USART/ MSSP USART/ MSSP
CCP (Capt., Comp, NO 2 2 2 2
Pulso)
TEMPORIZADORES 1-8 Bits 1-16 Bits, 1-16 Bits, 1-16 Bits, 1-16 Bits,
1-WDT 2-8Bits, 1-WDT 2-8Bits, 1-WDT 2-8Bits, 1-WDT 2-8Bits, 1-
WDT
FREC. MAX. (MHz) 20 20 20 20 20
ICSP(Programación Sí Sí Sí Sí Sí
serie en circuito)
Fuentes de 4 13 14 13 14
interrupción
Comunicación Paralelo No No Sí No Sí
17
CARACTERISTICAS RELEVANTES DE LOS PICS 18Cxxx
MODELO PIC18C242 PIC18C442 PIC18C252 PIC18C452
MEM. Bytes 16384 16384 32768 32768
PROG. 8192X16 8192X16 16384X16 16384X16
(FLASH) Word
MEM. RAM 512 Bytes 512 Bytes 1536 Bytes 1536 Bytes
DATOS
Conv. A / D 5 (10 Bits) 8 (10 Bits) 5 (10 Bits) 8 (10 Bits)

BOD (Detección de SI SI SI SI
baja tensión)
LINEAS E/S 23 34 23 34
COMUNICACION SERIE USART/ USART/ MSSP USART/ MSSP USART/ MSSP
MSSP
CCP (Capt., Comp, 2 2 2 2
Pulso)
TEMPORIZADORES 3-16 Bits, 1-8 3-16 Bits, 1-8 3-16 Bits, 1-8 3-16 Bits, 1-8
Bits, 1-WDT Bits, 1-WDT Bits, 1-WDT Bits, 1-WDT

FREC. MAX. (MHz) 40 40 40 40


ICSP(Programación Sí Sí Sí Sí
serie en circuito)

18
o  RECURSOS FUNDAMENTALES
Ø  Procesador de Arquitectura RISC (Reduced Instruction Set Computer).
Ø  Juego de 35 instrucciones con 14 de bits de longitud.

Ø  Frecuencia de operación de hasta 20 MHz

Ø  Hasta 8 Kpalabras de 14 bits para la memoria de código (FLASH).

Ø  368 Bytes de memoria de datos RAM.

Ø  256 bytes de memoria de datos EEPROM.

Ø  14 fuentes de interrupción.

Ø  Pila con 8 niveles.

Ø  Modos de direccionamiento directo, indirecto y relativo.

Ø  Perro guardián (WDT).

Ø  Código de protección programable.

Ø  Voltaje de aliementación comprendido entre 2 y 5.5 V.


Ø  Bajo consumo de energía (menos de 2mA, a 5V y 4 MHz.)
19
PIC16C84
8-Bit CMOS EEPROM Microcontroller

High Performance RISC CPU Features • 15 special function hardware registers.


• Only 35 single word instructions to learn • Eight-level deep hardware stack.
• All instructions single cycle (400 ns @ • Direct, indirect and relative addressing
10MHz) except for program branches which modes.
are two-cycle. • Four interrupt sources:
• Operating speed: DC - 10MHz clock input - External RB0/INT pin.
DC - 400 ns instruction cycle. - TMR0 timer overflow.
• 14-bit wide instructions. - Data EEPROM write complete.
• 8-bit wide data path. • 1,000,000 data memory EEPROM
• 1K x 14 EEPROM program memory. ERASE/WRITE cycles.
• 36 x 8 general purpose registers (SRAM). • EEPROM Data Retention > 40 years
• 64 x 8 on-chip EEPROM data memory.

20
ARQUITECTURA INTERNA DE LOS
MICROCONTROLADORES PIC

•  Esta arquitectura se caracteriza por la independencia entre la


memoria de código y la de datos. Permitiendo el trabajo en
paralelo de estas dos memorias.

•  La arquitectura RISC se caracteriza por el reducido número de


instrucciones, que se ejecutan en un ciclo de instrucción,
equivalente a 4 períodos de reloj, excepto las de salto que
necesitan dos ciclos.

21
INTERCONEXIÓN DEL PROCESADOR Y LAS MEMORIAS

Bus de Bus de
direcciones direcciones

MEMORIA 13 9 MEMORIA
PROCESADOR
DE CÓDIGO DE DATOS (SRAM)
(FLASH) 14 8
Bus de
Bus de DATOS
INSTRUCCIONES

22
ARQUITECTURA INTERNA

23
o  Existe un grupo de bloques dedicados a mejorar el funcionamiento
pero sin influir directamente en el flujo de señales.

o  Vemos un temporizador de encendido, un temporizador de


arranque del oscilador de CLOCK, un circuito de reset y un circuito
llamado de vigilancia o WATCHDOG. Los dos primeros bloques
procuran un arranque ordenado para no producir una carga al
mismo tiempo sobre la fuente.

o  El circuito interno de reset se encarga de volver a “cero” el


funcionamiento del circuito cuando sea requerido.

24
25
26
Mapa de la
Memoria RAM

27
DESCRIPCION DE LOS REGISTROS

Ø  1. REGISTRO INDF (Dirección 00) O registro de indirección

•  No tiene existencia física, por lo que no se podrá acceder a él. En realidad


este registro sirve únicamente para especificar la utilización del
direccionamiento indirecto, por ejemplo de la forma siguiente:

•  ADDWF INDF.W Significa que se va a añadir, al contenido del registro W,


el contenido del registro apuntado por el registro FSR de dirección 04. Se
realiza entonces el Direccionamiento indirecto con respecto al contenido de
FSR. Sirviéndose de INDF únicamente como modo de notación.

28
Ø  REGISTRO PCL (Dirección 02)

•  Es el PC o contador de programa, o mejor dicho los 8 bits de menor


peso del PC, puesto que el PC debe tener un tamaño de 13 bits, sus
bits de mayor peso se llevan al registro PCLATCH, situado en las
posiciones 0A y 8A.

Ø  REGISTRO STATUS ( Dirección 03 ) o Registro de Estado


•  Este registro contiene un cierto número de bits de estado de la unidad
central, pero también los bits de selección de páginas, que ahora se
denominan RP1 y RP0. Se pueden leer o escribir como cualquier otro
registro, dando por supuesto que determinados bits de estado no se
modificarán después de un intento de escritura. Cada bit de este registro
tiene un significado particular que es el que sigue.

29
Ø  REGISTRO STATUS ( Dirección 03 )…

BIT 0 o bit de carry ( C ). Bit de acarreo para las operaciones de suma y


resta. Se pone a uno mediante las instrucciones ADDWF y SUBWF, si se
genera un acarreo en el bit de mayor peso.
Este bit también lo utilizan las instrucciones de rotación.
BIT 1 o bit DC ( Digit Carry ). Este es un bit de acarreo de dígito, por
ejemplo en aritmética en BCD. Se pone a uno con las instrucciones
ADDWF y SUBWF, si se genera un acarreo del bit 3 al bit 4.
BIT 2 o bit Z ( zero ). Este bit se pone a uno si el resultado de la operación
aritmética o lógica ejecutada es cero.

30
•  BIT 3 o bit PD ( Power Down ). Este bit se pone a uno durante la conexión a la
alimentación del circuito, o durante la ejecución de una instrucción CLRWDT relativa
al temporizador watchdog. Se pone a cero mediante una instrucción SLEEP.

•  BIT 4 o bit TO ( Time Out ). Este bit se pone a uno durante una conexión a la
alimentación o durante la ejecución de una instrucción CLRWDT o SLEEP. Se pone
a cero cuando el temporizador Watchdog se desborda.

•  BIT 5 Y 6 o bits RP0 y RP1. Estos bits sirven para seleccionar las páginas de
memoria de programa. Cada página contiene 128 bytes.

•  BIT 7 o bit IRP. Este bit está previsto para un futuro direccionamiento de paginado
indirecto, pero no se utiliza en el 16C84. Tan solo se usa para compatibilidad con las
futuras versiones, por lo que se debe poner a cero.

31
Ø  Programación de los bits de selección de página del STATUS

RP1 RP0 PAGINA DIRECCION


0 0 0 00 a 7F
0 1 1 80 a FF
1 0 2 100 a 17F
1 1 3 180 a 1FF

32
Ø  REGISTRO FSR (Dirección 04) o registro de selección de registro.

•  El contenido del FSR se utiliza para el direccionamiento indirecto. Este


registro contiene 8 bits, tamaño suficiente para las versiones actuales
del PIC 16CXX;

Ø  REGISTRO INTCON ( Dirección 0B y 8B )


Este registro sirve para el control global de las interrupciones y para
indicar la procedencia de algunas de ellas, gracias a los bits de
estado. Se dispone de cuatro potenciales recursos de interrupción.
1.  Una fuente externa a través del pin RB0/INT.
2.  El desbordamiento del temporizador 0.
3.  Un cambio de estado en los pines RB4 a RB7.
4.  Programación de la EEPROM de datos.

33
•  Cada bit del registro INTCON tiene un significado concreto que es el que
sigue:

BIT 0 o bit RBIF ( RB Interrupt Flag ). Si se pone a 1, este bit indica un


cambio de estado en una de las líneas de RB4 a RB7 del puerto B.
BIT 1 o bit INTF ( Interrupt Flag ). Si se pone a 1, este bit indica una
interrupción provocada por la línea RB0/INT del puerto B.
BIT 2 o bit T0IF ( Timer 0 Interrupt Flag ). Si se pone a 1, este bit indica un
desbordamiento del temporizador 0.
BIT 3 o bit RBIE ( RB Interrupt Enable ). Si se pone a uno este bit, autoriza
las interrupciones provocadas por un cambio de estado de las líneas RB4 a
RB7 del puerto B.
34
•  BIT 4 o bit INTE ( Interrupt Enable ). Si se pone a 1, este bit autoriza
las interrupciones provocadas por la línea RB0/INT del puerto B.

•  BIT 5 o bit T0IE (Timer 0 Interrupt Enable ). Si está a uno, este bit
autoriza las interrupciones debidas al desbordamiento del temporizador
0.

•  BIT 6 o bit EEIE (EEPROM Interrupt Enable ). Si está a uno, este bit
autoriza las interrupciones que proceden de la memoria EEPROM de
datos.

•  BIT 7 o bit GIE ( Global Interrupt Enable ). Si se pone a uno, este bit
autoriza todas las interrupciones que estén enmascaradas mediante
sus bits individuales de activación, a cero las inhibe.

Cada activador individual debe ponerse a cero por software.

35
Ø  PUERTOS PARALELO
Se dispone de dos puertos paralelo A y B. Las líneas de estos puertos se
pueden programar individualmente como entradas o como salidas, y se
utilizan casi de la misma forma.
Teniendo en cuenta que el encapsulado se propone con 18 pines,
determinadas líneas de estos puertos se comparten con otros recursos
internos.

Ø  PUERTO A
Dispone de un ancho de 5 bits. Las líneas RA0 a RA3 respetan el
esquema de la figura. A la salida está provista de un buffer CMOS,
entrada y salida pasan por un latch. La línea RA4 adopta una estructura
diferente, su salida es de tipo drenador abierto, y la entrada está provista
de un Trigger Schmitt. Es común con la entrada externa del temporizador
0.
36
•  El sentido de trabajo de todas las líneas de este puerto se controla
mediante el registro TRISA, en el que un bit a cero activa la línea
correspondiente como salida, y un bit a 1 como entrada, Evidentemente,
después de un reset, todos los bits del registro TRISA quedan a uno.

Esquema de la línea RA4 del puerto A


37
Ø  Esquema de las líneas RA0 a RA3 del puerto A

38
Ø  PUERTO B

•  Es un puerto bidireccional de 8 bits completo, en el que sólo una línea se


comparte con otro recurso interno. Las líneas RB0 a RB3 adoptan la
estructura interna indicada en la figura 10, mientras que las líneas RB4 a
RB7 la de la figura 11. La razón de ser de esta diferencia radica en el hecho
de que es posible programar la generación de una interrupción durante un
cambio de estado de una cualquiera de las líneas RB4 a RB7.

•  Todas las líneas del puerto B disponen de una resistencia de pull-up de alto
valor, conectada a la alimentación. Esta resistencia se puede activar o no
gracias al bit RBPU del registro OPTION. Dicha activación afecta a todas las
líneas del puerto B y se desactiva tras un reset al igual que las líneas
configuradas como salida.

39
•  El sentido de trabajo de cada una de las líneas de este puerto es
controlado por el registro TRISB, en el que un bit a cero hace que la
línea correspondiente se active como salida, y un bit a 1 como entrada,
tras un reset todos los bits se ponen a 1.

Ø  Esquema de las líneas RB0 a RB3 del puerto B


40
Ø  Esquema de las líneas RB4 a RB7 del puerto B

41
Ø  TEMPORIZADOR
•  El PIC 16F84 solamente contiene un temporizador. Genera una interrupción
cada vez que el temporizador se desborda de FF a 00.

•  El modo de funcionamiento y programación se realiza a través del registro


OPTION.

•  Puede recibir su señal directamente, o a través de un predivisor, siendo hecha


la selección mediante el bit PSA. Si se selecciona el predivisor, su tasa de
división se programa a través de tres bits: PS0, PS1, PS2 .
•  En todos los casos, la señal utilizada puede proceder de una de las dos
fuentes posibles, dependiendo del estado del bit de selección RTS. O procede
del oscilador de reloj después de la división por cuatro, por lo que está a la
frecuencia del reloj de instrucción, o del pin ToCKI. La puerta OR EXCLUSIVO,
controlada por el bit RTE, permite seleccionar si el incremento del registro
TMR0 se producirá sobre el flanco de subida o bajada.

42
Ø  Esquema del temporizador TMR0

Los bits RTE, RTS, PSA y PS0 a PS2 que se emplean para configurar
este temporizador están contenidos en el registro OPTION. Cada bit de
este registro tiene un significado especial que es el que sigue:

43
BITs 0, 1, 2. Bits PS0, PS1, PS2. Estos bits sirven para definir la tasa de
división del predivisor, como muestra la tabla, esta tasa difiere dependiendo
de que el predivisor este asignado al temporizador 0 o al watchdog.

Tabla 1.3 Programación de los bits de


selección de tasa del predivisor en el registro OPTION
44
•  BIT 3 o bit PSA ( Prescaler Assignment ). Si este bit está a cero, el
predivisor está asignado al temporizador 0. Si está a uno estará
asignado al watchdog.

•  BIT 4 o bit RTE ( Timer 0 signal Edge ). Si este bit está a cero, el
contenido del registro TMR0 se incrementará en un flanco de subida de
la señal aplicada al pin RA4/ToCK1; si está a uno, se incrementará con
el flanco de bajada.

•  BIT 5 o bit RTS ( Timer 0 signal source ). Si este bit está a cero, el
temporizador utilizará el reloj interno. Si está a uno, utilizará la señal
aplicada al pin RA4/T0CK1.

•  BIT 6 o bit INTEDG ( Interrupt edge ). Este bit define el sentido del
flanco que provocará la interrupción a través del pin externo INT. Un
uno activa el flanco de subida y un cero un flanco de bajada.

45
•  BIT 7 o bit RBPU ( RB Pull Up enable ). Si está a cero, este bit activa las
resistencias de pull up a nivel alto, previstas en la entrada del puerto B.

o  ( Estos últimos dos bits no se usan en el temporizador 0 )

q  El registro TMR0 se incrementa en una unidad con cada impulso de reloj
seleccionado mediante el registro OPTION. Cada vez que llega al valor FF,
vuelve a 00 generando una interrupción, si se ha autorizado, y continua su ciclo
indefinidamente.
q  El registro TMR0 se puede leer o escribir directamente con cualquier
instrucción, con el fin de conocer su posición actual, o para inicializarlo en un
estado determinado. Es importante saber que después de cualquier escritura
en este registro, es necesario un retardo de dos ciclos de instrucción para que
se retome la incrementación. Este retraso es independiente de la fuente de reloj
usada.

46
Ø  TEMPORIZADOR WATCHDOG

•  Está provisto de su propio oscilador interno autónomo con circuito RC interno,


por lo que no necesita ningún componente externo y continua funcionando
incluso cuando el reloj del PIC se para durante, por ejemplo, la instrucción
SLEEP.

•  Este temporizador cuenta de forma permanente, y cuando se desborda, es


decir cuando llega a FF, hace que se genere un reset del microcontrolador. Si
el PIC está en modo sleep cuando se produce este desbordamiento, tiene por
efecto que se salga de este modo.

•  El tiempo típico de desbordamiento de este temporizador es de 18 ms,


pero puede variar algo con la tensión de alimentación y la temperatura. Si no
es muy largo, el predivisor del que hemos hablado puede asignarse al
watchdog gracias al bit PSA del registro OPTION.

47
Ø  MEMORIA EEPROM DE DATOS

•  El PIC 16C84 contiene una EEPROM de datos de 16 bytes. Esta


memoria no forma parte del espacio direccionable y solo es accesible
para lectura y escritura a través de dos registros: EEDATA en la
dirección 08 para los datos, y un registro EEADR en la dirección 09
para las direcciones. Dos registros de control, EECON1 en la dirección
88 y EECON2 en la dirección 89, permiten definir el modo de
funcionamiento de esta memoria.

•  Esta memoria no emplea ningún recurso de alimentación externo, y


funciona en todo el rango de alimentación autorizado. Su duración
típica de programación es de 10 ms. Se controla mediante un
temporizador interno, el cual le descarga a usted de realizar cualquier
medida de tiempo por software.

48
•  Si se desea escribir en una posición de memoria ya ocupada,
automáticamente se borra el contenido que había y se introduce el
nuevo dato, por lo que no hay comando de borrado.

•  El principio de utilización de esta EEPROM en modo lectura es muy


simple, y sigue los siguientes pasos:

1.  Escritura de la dirección que hay que leer en el registro EEADR

2.  Puesta a uno del bit RD del registro EECON1

3.  Lectura del dato así direccionado en el registro EEDATA

q  Teniendo en cuenta la velocidad de funcionamiento de esta memoria,


el dato está disponible en EEDATA después de que el bit RD se pone a
uno, por lo que es posible leerlo mediante la instrucción que sigue
inmediatamente a la que pone a este bit a uno.

49
•  La escritura en esta memoria, que consiste en realidad en una
programación, ya que estamos trabajando con una EEPROM, es algo mas
complicada por evidentes razones de seguridad. Este proceso se debe
desarrollar de la forma siguiente:

1.  Escritura de la dirección en la que desea escribir en el registro EEADR.

2.  Escritura del dato en el registro EEDATA.

Ejecución de un programa tipo: Esta última instrucción inicia el


MOVLW 55 proceso de escritura. Cuando
termina, el bit EEIF está a uno y si
MOVWF EECON2
la última instrucción EEPROM ha
MOVLW AA sido activada por medio del bit
MOVWF EECON2 EEIE del registro INTCON, se
BSF EECON1,WREN genera dicha interrupción. El bit
EEIF debe ponerse a cero por
BSF EECON1,WR
software. 50
•  El programa consiste en escribir 55 seguido de AA en el registro
EECON2 como medida de seguridad , con el fin de evitar que un
programa que tenga un despiste pueda programar la EEPROM por
accidente, manipulando simplemente los bits del EECON1.

Ø  El registro de control EECON1 contiene un determinado número de


bits de control, cuyo significado es el que sigue:

Registro EECON1

- - - EEIF WRERR WREN WR RD

Nota: Después de un reset todos son cero.

51
BIT 0 o bit RD ( Read Data ). Este bit debe ponerse a uno para leer un dato. El
circuito lo pone automáticamente a cero.
BIT 1 o bit WR ( Write data ). Este bit debe ponerse a uno para escribir un
dato. El circuito lo pone automáticamente a cero.
BIT 2 o bit WREN ( Write Enable ). Si este bit está a cero, impide cualquier
escritura en la EEPROM. Debe ponerse a uno para autorizar la escritura.
BIT 3 o bit WRERR ( Write Error ). Este bit se pone a uno si se produce un
error de escritura después de una parada prematura ( reset o watchdog ). En
estas condiciones, los contenidos de EEDATA y EEADR no varían, para permitir
una repetición correcta de la operación.
BIT 4 o bit EEIF ( EEPROM Interupt flag ). Este bit se pone a uno al terminar
una escritura y debe ponerse a cero por software.
El registro EECON2 no tiene existencia física, por lo que no se puede leer, tan
solo sirve para el proceso de protección en escritura detallado anteriormente.
52
Ø  RESET

§  FUENTES DE RESET

ü  Un reset puede ser provocado por diversas fuentes:


q  Una conexión a la alimentación del circuito.

q  Una acción sobre el pin MLCR mientras que el circuito está en modo normal.

q  Una acción sobre el pin MLCR mientras que el circuito está en modo SLEEP.

q  Un desbordamiento del watchdog, mientras el circuito está en modo normal.

q  Un desbordamiento del watchdog, mientras el circuito está en modo SLEEP.

El comportamiento del circuito y el estado de los registros afectados por un reset


son diferentes dependiendo de la situación que se produzca. Es posible
distinguir por software el origen del reset. Para ello, basta con leer los bits TO
y PD del registro de Status.

53
Ø  DIRECCIONAMIENTOS

q  INMEDIATO
•  El dato manipulado por la instrucción se codifica con la propia
instrucción. En este caso, el dato en cuestión se denomina literal, nombre
que mantendremos a lo largo de todo el capítulo, con el fin de ser
coherentes con las denominaciones adoptadas por Microchip en todos
sus documentos.

MOVLW k ; Coloca el literal k, que es un valor cualquiera codificado con


8 bits, en el registro de trabajo w.

q  DIRECTO
Es el modo más usado, ya que como hemos visto en temas anteriores, la
memoria RAM está dividida en registros específicos y en un conjunto de
registros de propósito general. Este modo consiste en codificar el nombre
del o de los registros en cuestión directamente en la instrucción.
54
MOVWF f ;Desplaza el contenido del registro w al
registro f
q  BIT A BIT
Manipulación de un bit individual en cualquier registro. Este modo de
direccionamiento no se utiliza nunca solo, sino que siempre va emparejado con
el modo de direccionamiento directo.

BCF f , b ; Pone a cero el bit número b del registro f

q  INDIRECTO
Es el modo más potente y de el ya hemos hablado anteriormente en los
registros INDF y FSR.
Recordemos rápidamente que el registro FSR es el de selección de registro, en
el que se introduce el número del registro direccionado. Lo único extraño del
PIC es el modo de notación correspondiente que utiliza el registro INDF, como
por ejemplo en:
55
MOVWF fo ; Desplaza el contenido de w al registro apuntado por
el registro FSR.

La notación fo únicamente sirve para indicar el direccionamiento


indirecto y por tanto, la utilización del registro FSR como puntero.

56
CONJUNTO DE INSTRUCCIONES DEL PIC 16C84

La notación adoptada para los datos y direcciones manipuladas por las


instrucciones es muy sencilla, y es como sigue:
f representa un número de registro, codificado con siete bits.
b representa en número de bit, codificado con tres bits. El bit 0 es
siempre el bit de menor peso.
k representa un dato (constante), el literal mencionado antes. EL
número de bits que se emplea para su codificación es variable,
dependiendo de la instrucción.

57
ADDWF f,d
f es el número del registro, como ya sabemos, y d puede tomar el valor
0 o 1, y cambia el comportamiento de la instrucción. Si d está a cero, el
resultado se introduce en el registro W, mientras que si d está a uno, el
resultado se introduce en el registro f.

BTFSC f,b
Esta instrucción comprueba el bit b del registro f. El significado de
esta instrucción es Bit Test Skip if Clear, por lo que hace un salto
( skip ) si el bit está a cero ( clear ). Veamos como ocurre
esto:

58
Si el bit está a uno, es decir, si la condición que se comprueba no se
cumple, el programa continua su desarrollo normal de forma secuencial
Si el bit está a cero, es decir, si la condición que se comprueba se
cumple, el programa salta a la instrucción que sigue a BTFSC en el
programa.
Si desea, como generalmente es el caso, saltar a alguna otra parte del
programa dependiendo del resultado de la prueba, generalmente adoptará
la siguiente sintaxis:
GOTO k o CALL k

59
CONJUNTO DE INSTRUCCIONES DEL PIC 16C84

60
61
62
Ø  Descripción de cada una de las instrucciones

63
64
65
66
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA

INGENIERÍA EN ELECTRÓNICA

 II  Programación  en  bajo  nivel  para  el  microcontrolador.


(Lenguaje Ensamblador)

MAESTRO: DR. EVERARDO INZUNZA GONZÁLEZ

1  
3  
4  
 
 
 

5  
6  
7  
8  
Mapa de la
Memoria RAM

9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
CONJUNTO  DE  INSTRUCCIONES  DEL  PIC  16F84A  

El  repertorio  está  compuesto  de  35  instrucciones,  que  pueden  ser  agrupadas  de  la    
Siguiente  manera:  
 
q  Instrucciones  de  carga  
q  Instrucciones  aritméCcas  
q  Instrucciones  lógicas  
q  Instrucciones  de  bit  
q  Instrucciones  de  salto  
q  Instrucciones  para  manejo  de  subruCnas  
q  Instrucciones  especiales  

CaracterísIcas  

q  Es  un  juego  de  35  instrucciones  simples  y  rápidas  


q  La  mayoría  de  las  instrucciones  se  ejectutan  en  4  ciclos  de  reloj,  excepto  las  de  
           Salto  que  requieren  8  ciclos  de  reloj.  
q  Las  instrucciones  son  ortogonales,  es  decir  casi  todas  las  instrucciones  pueden    
         uClizar  cualquier  operando.  
q  Todas  las  instrucciones  Cenen  la  misma  longitud  (14  bits)  y  todos  los  datos  son  
           de  8  bits.    
22  
23  
24  
25  
Programa  #1  
prog1.asm  

26  
Programa  #2  

27  
Programa  #3  

28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
TAREA  #2   Referencia:  Pag.  117,  Libro  Enrique  Palaciones,  et.  Al.  

Diseñar,  programar  y  simular  en  MPLAB  y  PROTEUS  los  siguientes  programas  para  el    
esquema  del  circuito  de  la  prácCca  #1.  

38  
TAREA  #2  (ConInuación)   Referencia:  Pag.  118,  Libro  Enrique  Palaciones,  et.  Al.  

39  
Referencias  

•  Microcontrolador  PIC  16F84,  Desarrollo  de  proyectos.  Enrique Palacios, Fernando


Remiro, Lucas J. López  ,  Alfaomega  *  Ra-­‐Ma,  2da  Edicion.  

h^p://perso.wanadoo.es/pictob/instrucciones.htm#repertorio_35_instrucciones  

40  
LIST P=16F84 ; Se indica tipo de procesador
RADIX HEX
INCLUDE P16F84.INC ; incluye tabla de equivalencias
ORG 0x00
goto INICIO ; inicio del codigo en la localidad 05h
ORG 0x05

INICIO bsf STATUS,RP0 ; selecciona el banco #1


clrf TRISB ; configura el puerto B como salida
movlw 0ffh ; mueve el literal ff al reg. w
movwf TRISA ; mueve el contenido de w al reg. TRISA
bcf STATUS,RP0 ; Resete el bit RP0 para seleccionar el banco 1
clrf PORTB ; resete el puerto B
clrf PORTA ; resetea el puerto A

BUCLE movf PORTA,W ; lee el contenido del puerto A y lo deposita en W


movwf PORTB ; ENVIA el contenido de PA al PB
goto BUCLE

END
LIST P=16F84 ; Se indica tipo de procesador
RADIX HEX
INCLUDE P16F84.INC
ORG 0x00
goto INICIO
ORG 0x05

INICIO bsf STATUS,RP0


clrf TRISB
movlw b'00011111' ; configura puerto A de entrada
movwf TRISA ; se configura el puerto A
bcf STATUS,RP0
clrf PORTB
clrf PORTA

; movf PORTA,W
; addlw b'00000001'

movlw b'01110111' ; configura puerto A de entrada


movwf PORTB
goto BUCLE

END
; Desarrolle un programa que lea un dato de 5 bits por el puerto A, y le sume 5, el resultado
; lo envie por el puerto B
LIST P=16F84 ; Se indica tipo de procesador
RADIX HEX
INCLUDE P16F84.INC ; incluye tabla de equivalencias
dato1 EQU 0x0C
ORG 0x00
goto INICIO ; inicio del codigo en la localidad 05h
ORG 0x05

INICIO bsf STATUS,RP0 ; selecciona el banco #1


clrf TRISB ; configura el puerto B como salida
movlw 0ffh ; mueve el literal ff al reg. w
movwf TRISA ; mueve el contenido de w al reg. TRISA
bcf STATUS,RP0 ; Resetea el bit RP0 para seleccionar el banco 1
clrf PORTB ; resetea el puerto B
clrf PORTA ; resetea el puerto A

BUCLE movf PORTA,W ; lee el contenido del puerto A y lo deposita en W


movwf dato1 ; lo guarda en dato1
comf dato1,0 ; complementa dato1, debido a que cuando se presiona RAx es cero
logico
addlw 05 ; Le suma 5 al registro W
movwf PORTB ; ENVIA el contenido de PA al PB
goto BUCLE
END
; Desarrolle un programa que contenga un dato (5) en la localidad 0Ch y otro (4) en la
;localidad 0Dh ; realice la suma de esos dos datos y la guarde en la localidad 0Eh, ademas que
envie el
; resultado por el puerto B.
LIST P=16F84 ; Se indica el tipo de procesador
RADIX HEX ; Sistema de numeracion hexadecimal
INCLUDE P16F84.INC ; Se incluye la definicion de los registros
dato1 EQU 0X0C ; declara dato1 en la localidad 0x0C
dato2 EQU 0x0D ;
resultado EQU 0x0E

ORG 0x00 ; Inicio del vector de reset


goto inicio
ORG 0x05 ; inicio del codigo del programa en la localidad 05h
inicio
bsf STATUS,RP0 ; activa el bit RP0 para seleccionar el banco 1
clrf TRISB ; resetea el registro TRISB para configurar al puerto B como salida
bcf STATUS,RP0 ; resetea al bit RP0 para seleccionar el banco cero
clrf PORTB ; limpia el puerto B

ciclo
movlw 05 ; carga el 05 en el registro w
movwf dato1 ; Carga el contenido de W en la variable dato1
movlw 04 ; carga el 04 en el registro W
movwf dato2 ; copia el contenido de W a la variable dato2
addwf dato1,0 ; realiza la suma, y el resultado lo guarda en W
movwf PORTB ; copia el resultado al puerto B
movwf resultado ; copia la respuesta a la variable resultado
goto ciclo ; salta al inicio del ciclo
end
LIST P=16F84 ; Se indica tipo de procesador
RADIX HEX
INCLUDE P16F84.INC
ORG 0x00
goto INICIO
ORG 0x05

INICIO bsf STATUS,RP0


clrf TRISB
movlw b'00000110'
movwf TRISA
bcf STATUS,RP0
clrf PORTB
clrf PORTA

BUCLE movf PORTA,W


btfss STATUS,Z
goto APAGAR
goto ENCENDER

APAGAR clrf PORTB


goto BUCLE

ENCENDER movlw 0x55


movwf PORTB
goto BUCLE

END
;Archivo: PRENDE.ASM
;
; Objetivo:
; ========= 1) Hace parpadear un LED colocado a PORTB, 4 (es el pin nro. 10 del micro)
; 2) Aprender a:
; a) Preparar cuales pines seran salidas y cuales entradas.
; b) mover un literal (una constante) a W (MOWLW)
; c) llamar a una subrutina (CALL)
; d) copiar el contenido de W a un registro (MOVWF)
; e) implementar bucles de retardo.
; f) usar la instruccion "decrementar en uno y saltar si es cero": DECFSZ

; El LED esta colocado con el anodo al pin 10 y luego una R de 1k a masa desde su catodo.
; Si se escribe un "1" (con "bsf PORTB, 4 " ) el led enciende.

; Al compilar, recordar usar el formato INXH8M .

;===============================================================================================
; Encabezado
;================================================================================================

LIST P=16F84 ; Uso el viejo y querido PIC16F84

INCLUDE "P16F84.INC" ; Archivo estandar de Microchip con la definicion


; de los registros y los bits con el mismo nombre
; de las hojas de datos, p. ej.: Z es el bit ZERO del registro
; STATUS, etc.
; Atenti!!: Fijarse si esta en el mismo directorio que el MPASM.
; Si no estuviera en el mismo dir, se puede incluir la ruta entera
; dentro de las comillas.

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ; Palabra de configuracion= 0x11, o sea,
; Proteccion de codigo = OFF, Watchdog = No usado, Power On Timer= Usado,
; Tipo de oscilador= Cristal XT
; Cristal del micro: 4 MHz

;------ RAM de usuario ----------

CONTA_H equ 0x0C ; Esta es la posicion del primer byte de RAM.


CONTA_L equ 0x0D ; Contadores del bucle de retardo.

;--------------------------------
;================================================================================================
; Fin del encabezado.
;================================================================================================

;======= Primera linea de codigo ===========


ORG 0x00 ; Al prender el micro viene aca primero.
goto ENCENDIDO ; Primera linea del programa.

ORG 0x04 ; Ubicacion del unico vector de interrupcion. No usado.


nop

ENCENDIDO

;--------- Configuracion de puertos y de la respuesta a interrupciones. ---------

; Microchip recomienda no usar TRIS, pero la verdad es que mantienen esta


; instruccion en toda la linea 16XX. Funciona ok. El ensamblador da un
; warning: "use of this instruction is not recommended" . Ignorarlo.
; Los "warnings" son errores leves que si permiten generar el .HEX
; En cambio, los "error" abortan la compilacion.

movlw b'00000000' ; cargo W con el valor CERO.


movwf INTCON ; Deshabilito todas las interrupciones.

movlw b'00000000' ; Habilito los pull-ups en PORTB


OPTION ; Option es usada para configurar aspectos de hard,
; como ser, "asignacion del prescaler", "pull-ups", etc.

movlw b'00000000' ; PORTA: Todos salidas. ( "0" = "Output", "1" = "Input" )


TRIS PORTA
movlw b'00000000' ; Port B: Todas salidas.
TRIS PORTB

clrf PORTA ; Arranco poniendo todas las lineas a cero.


CLRF PORTB ; CLRF sirve para poner a 0 un registro.

;----------- Fin de la configuracion del micro. ------------------------------------

BUCLE_PRINCIPAL
bsf PORTB, 4 ; Prendo el led. BSF pone a "1" un cierto bit de un registro.
bsf PORTB, 6 ; Prendo el led. BSF pone a "1" un cierto bit de un registro.
call DEMORA_MEDIO_SEG ; Llamo a la subrutina de retardo.

bcf PORTB, 4 ; Apago el Led... (BCF pone un bit a "0")


bcf PORTB, 6

call DEMORA_MEDIO_SEG
call DEMORA_MEDIO_SEG

goto BUCLE_PRINCIPAL ; Da vueltas eternamente.

;---------------------------------------------------------------------------
DEMORA_MEDIO_SEG
; Hace una demora de aprox medio segundo. Se puede conseguir
; una demora exacta ajustando con cuidado los valores a cargar
; en CONTA_H y CONTA_L

; Valores para simulacion:


; ========================
; Valores para el mundo real: CONTA_H = d'240' y CONTA_L = d'250'
; (adecuados para armar el circuito y verlo parpadear!!!)

; Pero, para verlo correr en el simulador MPLAB sin morirse de viejo,


; le damos diez veces menos a cada uno: 24 y 25 . Esto produce
; un retardo de 5 milisegundos aprox.

movlw d'240' ; cargo el decimal veinticuatro en el acumulador (W)


movwf CONTA_H ; Le copio el contenido de W al registro llamado CONTA_H

Loop_externo
movlw d'250' ; Recarga el contador del loop interno.
movwf CONTA_L

Loop_interno ; Cada ejecucion completa del loop_interno demora


nop ; aprox. = 8 * 25 = 200 microsegundos.
nop ; Haciendo bien los calculos se puede conseguir una temporizacion
nop ; exacta (cada instruccion demora 1 microsegundo. Si hay salto, 2 micros.)
nop
nop
decfsz CONTA_L, F ; La "F" indica que el resultado de decrementar se guarda en CONTA_L
goto Loop_interno

decfsz CONTA_H, F
goto Loop_externo

RETURN ; Sale de esta subrutina de demora de 200 * 25 = 5000 microsegundos


; aprox.
;----------------------------------------------------------------------------

END ; Es el fin de este archivo. °°No olvidar incluir el "END"!! :).

; Comentarios? Dudas? alejol@adinet.com.uy


; Suerte!
; Alejandro.
; ALARMA DIGITAL
; Desarrolle una alarma digital utilizando el PIC 16F84. El sistema tendra como entrada 4
; sensores del tipo on/off y una entrada para activar/desactivar la alarma. Estas 5 entradas
; seran a atravez del puerto A y son activas en alto. Cuando la alarma este activada y cualquiera
; de los sensores se active, la alarma debera encender los bits 0, 1 y 2 del puertp B.
; Cuando la alarma este desactivada el sistema debera ignorar las entradas de los sensores.
; Utilice el bit RA4 para activar y desactivar la alarma. Los bits RA0-RA3 se utilizaran
; como entradas para los sensores de la alarma.
LIST P=16F84 ; Se indica tipo de procesador
RADIX HEX
INCLUDE P16F84.INC ; incluye tabla de equivalencias
ORG 0x00
goto INICIO ; inicio del codigo en la localidad 05h
ORG 0x05

INICIO bsf STATUS,RP0 ; selecciona el banco #1


clrf TRISB ; configura el puerto B como salida
movlw 0ffh ; mueve el literal ff al reg. w
movwf TRISA ; mueve el contenido de w al reg. TRISA
bcf STATUS,RP0 ; Resetea el bit RP0 para seleccionar el banco 1
clrf PORTB ; resetea el puerto B
clrf PORTA ; resetea el puerto A
ciclo
btfss PORTA,4 ; verifica si esta activada la alarma
goto ciclo

v1
btfss PORTA,0
goto v2
goto alarma
v2
btfss PORTA,1
goto p1
goto alarma
p1
btfss PORTA,2
goto p2
goto alarma
p2 btfss PORTA,3
goto inicio

alarma
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
goto fin
fin
end
; programa que lee un pulso por el pin RA0, lo contabiliza y el resultado lo
; envia por el puerto B.

LIST P=16F84 ; Se indica el tipo de procesador


RADIX HEX ; Sistema de numeracion hexadecimal
INCLUDE P16F84.INC ; Se incluye la definicion de los registros
contador EQU 0x0C
ORG 0x00
goto inicio
ORG 0x05 ; Inicia el codigo del programa en la localidad 05h

inicio
bsf STATUS,RP0 ; selecc. banco 1
clrf TRISB ; resetea registro para conf. PB como salida
movlw b'00000001' ; configura el RA0 como entrada
movwf TRISA ; hace la conf.
bcf STATUS,RP0 ; selecciona banco cero
clrf PORTB ; resetea puerto B
clrf PORTA ; resetea puerto A
clrf contador ; resetea contador
movf contador,w ; envia contador a reg. w
movwf PORTB ; envia reg. w a puerto B

ciclo
movf PORTA,W ; lee puerto A
btfss STATUS,Z ; verifica si es un cero la lectura del PA, si es cero sala una instruccion
goto ciclo ; Sino lo es, salta a ciclo
goto contar ; fue cero, salta a contar
contar
incf contador ; incrementa contador
movf contador,w ; copia el contenido de contador a registro w
movwf PORTB ; envia reg w a puerto B
goto ciclo ; salta a verificar otra vez la entrada
end
;*****************************************************************************
;
; ESTA PRACTICA CONSISTE EN ENCENDER Y APAGAR UN LED DESPUES DE PRESIONAR
; Y SOLTAR EL PULSADOR.
;
;=============================================================================
; FUSIBLES DE PROGRAMACION:
; OSC: XT
; WDT: OFF
; PWRTE: ON
; CP0 :OFF
; CP1 :OFF
;=============================================================================
LIST P=PIC16F84
#INCLUDE <P16F84.INC>
status equ 0x03 ;Registro del estado AritmÈtico de la ALU
Porta equ 0x05 ;Puerto A
Portb equ 0x06 ;Puerto B
trisa equ 0x85 ;Registro de configuraciÛn del Puerto A
trisb equ 0x86 ;Registro de configuraciÛn del Puerto B
CONTA equ 0x0C
#define BANK1 bsf status,5 ;Macro para abreviar el BANCO 1
#define BANK0 bcf status,5 ;Macro para abreviar el BANCO 0
Org 0 ;PosiciÛn 0 de la Memoria de Programa (apuntador)
INICIO BANK1 ;Seleccion del Banco 1
bsf trisb,0 ;Bit 0 de trisb en "1" RB0 = IN
bcf trisa,0 ;El bit 0 del registro trisa es puesto a 0 (0 = Salida) RA0 = Out
BANK0 ;seleccion del Banco 0
bsf Porta,0 ;Bit 0 del Puerto A en "1" (LÛgico), Led = OFF
ESPERA btfsc Portb,0 ;Lee el interruptor y espera a que sea "0". (Presionaron el Interruptor?)
goto ESPERA ;no, va a la etiqueta "ESPERA"
call RETARDO ;si, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor)
SOLTAR btfss Portb,0 ;Espera a que se suelte el pulsador. Soltaron el Pulsador?
goto SOLTAR ;no, va a la Etiqueta "SOLTAR"
bcf Porta,0 ;Bit 0 de Puerto A en "0" (LÛgico). Enciende el LED
call RETARDO ;SI, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor)
;*****************************************************************************
;En esta parte del Programa ya el Led est· encendido y adem·s el Switch pulsador
;esta normalmente abierto (PosiciÛn Inicial).
;*****************************************************************************
ESPERA1 btfsc Portb,0 ;Lee el interruptor y espera a que presionen (esperar que sea "0", para apagar el LED)
goto ESPERA1 ;No lo han presionado, va a la Etiqueta "ESPERA1".
call RETARDO ;Si lo presionaron, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor)
bsf Porta,0 ;Carga a Porta con "1", apaga el LED
SOLTAR1 btfss Portb,0 ;Espera a que se suelte el pulsador.
goto SOLTAR1 ;No lo han soltado, va a la Etiqueta "SOLTAR1"
call RETARDO ;SI, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor)
goto ESPERA ;Finalmente encendieron y apagaron el Led, ahora va a
;la Etiqueta "ESPERA" para iniciar nuevamente el proceso.
;*****************************************************************************
;ESTA RUTINA GENERA UN TIEMPO PRUDENTE PARA EVITAR QUE LOS REBOTES QUE GENERA
;EL SWICHT AL SER PRESIONADO CONFUNDAN AL MICROCONTROLADOR.
;Total tiempo de Retardo 772 uS ( Micro Segundos)
;*****************************************************************************
RETARDO clrf CONTA ;CONTA = 0
INCREM incfsz CONTA,1 ;Incrementa a CONTA y salta si = 0? (255 -> 0)
goto INCREM ;Va a la Etiqueta INCREM
return ;Retorna del llamado
end ;Fin del Programa.
;*****************************************************************************
;
;ESTE PROGRAMA CONSISTE EN VISUALIZAR EN UN DISPLAY DE ANODO COMUN LOS NUMEROS
;HEXADECIMALES DEPENDIENDO DE LA CANTIDAD DE PULSACIONES DEL SWICH PERO ESTA
;VEZ USANDO USO DE LA INTERRUPCION POR EL PUERTO RBO Y ADEMAS SIN EL USO DEL
;DECODIFICADOR A SIETE SEGMENTOS. (7447)
;SI EL USUARIO QUIERE HACER EL MONTAJE DE ESTE PROGRAMA CON UN DISPLAY DE
;CATODO COMUN, SOLO TIENE QUE HACER EL CAMBIO DE LA RUTINA DE TABLA QUE SE
;SUMINISTRA AL FINAL DEL PROGRAMA (DESPUES DEL "end"), Y DEL PIN COMUN DEL
;DISPLAY, (ANODO COMUN O CATODO COMUN)!!.
;
;=============================================================================
; FUSIBLES DE PROGRAMACION:
; OSC: XT
; WDT: OFF
; PWRTE: ON
; CP0: OFF
;=============================================================================
LIST P=PIC16F84
#INCLUDE <P16F84.INC>
pcl equ 0x02 ;Contador de programa
status equ 0x03 ;Registro del estado AritmÈtico de la ALU
Porta equ 0x05 ;Puerto A
Portb equ 0x06 ;Puerto B
Optionr equ 0x81 ;Registro de ConfiguraciÛn multiple
trisa equ 0x85 ;Registro de configuraciÛn del Puerto A
trisb equ 0x86 ;Registro de configuraciÛn del Puerto B
Intcon equ 0x0B ;Registro para el control de Interrupciones
CONTA equ 0x0C ;Registro auxiliar para el RETARDO
DIGITO equ 0x0D ;Registro auxiliar que lleva el conteo del digito a visualizar
#define BANK1 bsf status,5 ;Macro para abreviar el BANCO 1
#define BANK0 bcf status,5 ;Macro para abreviar el BANCO 0
Org 0 ;PosiciÛn 0 de la Memoria de Programa (apuntador)
goto INICIO ;Va a la etiqueta INICIO
;*****************************************************************************
; EN ESTA PARTE DEL PROGRAMA SE ATIENDE
;LA INTERRUPCION QUE EN NUESTRO CASO ES POR FLANCO DE BAJADA EN EL PIN RB0/INT
;*****************************************************************************
Org 4 ;Vector de InterrupciÛn, cuando sucede la interrupciÛn
;el programa se direcciona a Org 4
btfss Intcon,1 ;FuÈ InterrupciÛn?
retfie ;no, retorne y habilite interrupciones globales (Gie = 1)
movlw .15 ;si, carga a w = 15
xorwf DIGITO,0 ;exor entre w y DIGITO (Para determinar que el Conteo sÛlo va hasta F)
btfss status,2 ;DIGITO es 15?
goto UP ;NO, va a UP
clrf DIGITO ;SI, DIGITO = 0
goto VISUAL ;va a VISUAL
UP incf DIGITO,1 ;Incrementa al registro DIGITO
VISUAL call TABLA ;Llama la TABLA
movwf Portb ;el contenido de w lo pasa al Puerto B para visualizar el digito correspondiente
;*******************************************************************************
;ESTA PARTE ES OPCIONAL, SE DEJA A VOLUNTAD DEL USUARIO Y SE COLOCA POR SEGURIDAD
SOLTAR call RETARDO ;llama la rutina de retardo para evitar rebotes
btfss Portb,0 ;Soltaron el interruptor?
goto SOLTAR ;NO, va a SOLTAR
;*******************************************************************************
bcf Intcon,1 ;SI, borra la bandera de InterrupciÛn por cambio en el RB0/INT
retfie ;Retorna y habilita las interrupciones globales (GIE = 1)

;-------------------------------------------------------------------------------|
;Si el usuario no desea utilizar la instrucciÛn "RETFIE", tambiÈn se puede |
;reemplazar por las dos siguientes lineas que equivalen a lo mismo: |
; bsf Intcon,7 ;Habilita Interrupciones globales (Gie =1) |
; return ;retorna del llamado |
;-------------------------------------------------------------------------------|

;*****************************************************************************
; INICIO DEL PROGRAMA
; CONFIGURACION DE PUERTOS E INICIO DE VARIABLES
;*****************************************************************************
INICIO BANK1 ;Seleccion del Banco 1
movlw 0x01 ;w = 0x01
movwf trisb ;Bit 0 de trisb en "1" RB0 = IN; RB1-RB7 = 0
clrf trisa ;trisa = 0, Todo el Puerto RA = Salida (Aunque no lo Utilizamos)
BANK0 ;seleccion del Banco 0
clrf DIGITO ;DIGITO = 0
call TABLA
movwf Portb ;Porta= w, Visualizar el digito 0
;*****************************************************************************
; PROGRAMACION DE LA INTERRUPCION
;*****************************************************************************
BANK1 ;Seleccion del Banco 1
movlw 0x80 ;w = 0x80
movwf Optionr ;Optionr = w
BANK0 ;Seleccion del Banco 0
movlw 0x90 ;w = 0x90
movwf Intcon ;Intcon = w
WAIT sleep ;Dormir (Esta instrucciÛn permite que el microcontrolador
;entre en un estado pasivo donde consume muy poca potencia.
goto WAIT ;Va a Wait
;*****************************************************************************
; TABLA PARA DISPLAY DE ANODO COMUN
;*****************************************************************************
TABLA movf DIGITO,0 ;Mueve el contenido de DIGITO a w
addwf pcl,1 ;suma a pcl el contenido de w
retlw 0x80 ;Cuando el digito es 0 (Retorno Literal con el valor en w)
retlw 0xF2 ;Cuando el digito es 1 (Retorno Literal con el valor en w)
retlw 0x48 ;Cuando el digito es 2 (Retorno Literal con el valor en w)
retlw 0x60 ;Cuando el digito es 3 (Retorno Literal con el valor en w)
retlw 0x32 ;Cuando el digito es 4 (Retorno Literal con el valor en w)
retlw 0x24 ;Cuando el digito es 5 (Retorno Literal con el valor en w)
retlw 0x04 ;Cuando el digito es 6 (Retorno Literal con el valor en w)
retlw 0xF0 ;Cuando el digito es 7 (Retorno Literal con el valor en w)
retlw 0x00 ;Cuando el digito es 8 (Retorno Literal con el valor en w)
retlw 0x20 ;Cuando el digito es 9 (Retorno Literal con el valor en w)
retlw 0x10 ;Cuando el digito es A (Retorno Literal con el valor en w)
retlw 0x06 ;Cuando el digito es B (Retorno Literal con el valor en w)
retlw 0x8C ;Cuando el digito es C (Retorno Literal con el valor en w)
retlw 0x42 ;Cuando el digito es D (Retorno Literal con el valor en w)
retlw 0x0C ;Cuando el digito es E (Retorno Literal con el valor en w)
retlw 0x1C ;Cuando el digito es F (Retorno Literal con el valor en w)
;*****************************************************************************
;ESTA RUTINA GENERA UN TIEMPO PRUDENTE PARA EVITAR QUE LOS REBOTES QUE GENERA
;EL SWICHT AL SER PRESIONADO CONFUNDAN AL MICROCONTROLADOR.
;Total tiempo de Retardo 772 uS ( Micro Segundos)
;*****************************************************************************
RETARDO clrf CONTA ;CONTA = 0
INCREM incfsz CONTA,1 ;Incrementa a CONTA y salta si = 0? (255 -> 0)
goto INCREM ;Va a la Etiqueta INCREM
return ;Retorna del llamado
end ;Fin del Programa.
;*****************************************************************************
; TABLA PARA DISPLAY DE CATODO COMUN
;*****************************************************************************
TABLA movf DIGITO,0 ;Mueve el contenido de DIGITO a w
addwf pcl,1 ;suma a pcl el contenido de w
retlw 0x7E ;Cuando el digito es 0 (Retorno Literal con el valor en w)
retlw 0x0C ;Cuando el digito es 1 (Retorno Literal con el valor en w)
retlw 0xB6 ;Cuando el digito es 2 (Retorno Literal con el valor en w)
retlw 0x9E ;Cuando el digito es 3 (Retorno Literal con el valor en w)
retlw 0xCC ;Cuando el digito es 4 (Retorno Literal con el valor en w)
retlw 0xDA ;Cuando el digito es 5 (Retorno Literal con el valor en w)
retlw 0xFA ;Cuando el digito es 6 (Retorno Literal con el valor en w)
retlw 0x0E ;Cuando el digito es 7 (Retorno Literal con el valor en w)
retlw 0xFE ;Cuando el digito es 8 (Retorno Literal con el valor en w)
retlw 0xDE ;Cuando el digito es 9 (Retorno Literal con el valor en w)
retlw 0xEE ;Cuando el digito es A (Retorno Literal con el valor en w)
retlw 0xF8 ;Cuando el digito es B (Retorno Literal con el valor en w)
retlw 0x72 ;Cuando el digito es C (Retorno Literal con el valor en w)
retlw 0xBC ;Cuando el digito es D (Retorno Literal con el valor en w)
retlw 0xF2 ;Cuando el digito es E (Retorno Literal con el valor en w)
retlw 0xE2 ;Cuando el digito es F (Retorno Literal con el valor en w)
;************************************** LCD_01.asm **************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; El mÛdulo LCD visualiza el mensaje "Hola".
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
movlw 'H'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
movlw 'l'
call LCD_Caracter
movlw 'a'
call LCD_Caracter
sleep ; Entra en modo de bajo consumo.

INCLUDE <LCD_8BIT.INC> ; Subrutinas de control del mÛdulo LCD.


INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
END ; Fin del programa.

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_01.asm **************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; El mÛdulo LCD visualiza el mensaje "Hola".
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
movlw 'H'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
movlw 'l'
call LCD_Caracter
movlw 'a'
call LCD_Caracter
sleep ; Entra en modo de bajo consumo.

INCLUDE <LCD_4BIT.INC> ; Subrutinas de control del mÛdulo LCD.


INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
END ; Fin del programa.

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_02.asm **************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; El mÛdulo LCD visualiza el mensaje "Hola". La escritura de cada letra se realiza cada
; 500 ms. DespuÈs se borra y comienza de nuevo.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
Principal
movlw 'H'
call LCD_Caracter
call Retardo_500ms
movlw 'o'
call LCD_Caracter
call Retardo_500ms
movlw 'l'
call LCD_Caracter
call Retardo_500ms
movlw 'a'
call LCD_Caracter
call Retardo_500ms
call LCD_Borra ; Borra la pantalla.
call Retardo_500ms
goto Principal

INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_03.asm *************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Programa ejemplo para comprender la utilizaciÛn de las subrutinas "LCD_ByteCompleto",
; "LCD_Byte", "LCD_Nibble" y "LCD_DosEspaciosBlancos"
;
; Para ello se van a utilizar sucesivamente y en este orden las subrutinas:
; "LCD_ByteCompleto", "LCD_DosEspaciosBlancos", "LCD_Byte",
; "LCD_DosEspaciosBlancos" y "LCD_Nibble" para dos n˙meros que ser·n:
;
; - En la primera lÌnea del LCD un n˙mero con el nibble alto no cero. Por ejemplo: 1Dh.
; - En la segunda lÌnea del LCD un n˙mero con el nibble alto igual a cero. Ejemplo: 0Dh.
;
; AsÌ por ejemplo, para los n˙meros "1D" y "0D" se visualizarÌa (donde "#" viene a
; significar espacio en blanco):
; "1D##1D##D" (Primera lÌnea).
; "0D###D##D" (Segunda lÌnea).
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

NUM_NoCeroAlto EQU 0x1D ; N˙mero ejemplo nibble alto no cero.


NUM_CeroAlto EQU 0x0D ; N˙mero ejemplo nibble alto cero.

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
Principal
movlw NUM_NoCeroAlto
call LCD_ByteCompleto
call LCD_DosEspaciosBlancos
movlw NUM_NoCeroAlto
call LCD_Byte
call LCD_DosEspaciosBlancos
movlw NUM_NoCeroAlto
call LCD_Nibble
call LCD_Linea2 ; Se sit˙a en la segunda lÌnea.
movlw NUM_CeroAlto
call LCD_ByteCompleto
call LCD_DosEspaciosBlancos
movlw NUM_CeroAlto
call LCD_Byte
call LCD_DosEspaciosBlancos
movlw NUM_CeroAlto
call LCD_Nibble
sleep

INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_04.asm *************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; El mÛdulo LCD visualiza un contador descendente que cuenta desde 59 hasta 0 y vuelve a
; repetir la cuenta ininterrumpidamente. En cada valor estar· unos 500 ms en pantalla.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC

NUM_CARGA EQU .59

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
Principal
movlw NUM_CARGA ; Realiza carga inicial.
movwf Contador
Visualiza
call VisualizaContador ; Visualiza el valor del Contador.
decfsz Contador,F ; Decrementa el contador hasta llegar a
cero.
goto Visualiza ; Si no ha llegado a cero visualiza el
siguiente.
call VisualizaContador ; Ahora tambiÈn debe visualizar el cero.
call LCD_Borra ; Borra la pantalla
call Retardo_1s ; durante un segundo.
goto Principal ; Repite el proceso.
;
; Subrutina "VisualizaContador" ---------------------------------------------------------
;
VisualizaContador
call LCD_Linea1 ; Se sit˙a en la primera posiciÛn de la
lÌnea 1.
movf Contador,W ; Lo pasa a BCD.
call BIN_a_BCD
call LCD_Byte ; Visualiza el dato n˙merico.
call Retardo_500ms ; Durante este tiempo.
return

INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
INCLUDE <LCD_4BIT.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_05.asm *************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Cada vez que presiona el pulsador conectado al pin RA4 incrementa un contador
; visualizado en el centro de la primera lÌnea de la pantalla.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC

#DEFINE Pulsador PORTA,4 ; LÌnea donde se conecta el pulsador.

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
bsf STATUS,RP0
bsf Pulsador ; LÌnea del pulsador se
configura como entrada.
bcf STATUS,RP0
clrf Contador ; Inicializa contador y los visualiza
por 1™ vez,
call Visualiza
Principal
btfss Pulsador ; Lee el pulsador.
call IncrementaVisualiza ; Si pulsa salta a incrementar y visualizar el
goto Principal ; contador

; Subrutina "IncrementaVisualiza" -------------------------------------------------------


;
IncrementaVisualiza
call Retardo_20ms ; Espera a que se estabilicen los niveles de
tensiÛn.
btfsc Pulsador ; Vuelve a leer el pulsador.
goto Fin_Incrementa
incf Contador,F ; Incrementa el contador y despuÈs lo
visualiza.
Visualiza
movlw .7 ; Se sit˙a en el centro de la
lÌnea 1.
call LCD_PosicionLinea1
movf Contador,W
call BIN_a_BCD ; Se debe visualizar en decimal.
call LCD_Byte
EsperaDejePulsar
btfss Pulsador
goto EsperaDejePulsar
Fin_Incrementa
return

INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
INCLUDE <LCD_4BIT.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_06.asm *************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Cada vez que presiona el pulsador conectado al pin RA4, incrementa un contador que se
; visualiza en la pantalla. Cuando llegue a su valor m·ximo (por ejemplo 6) se resetea y
; comienza de nuevo la cuenta.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC

#DEFINE Pulsador PORTA,4 ; LÌnea donde se conecta el pulsador.

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
bsf STATUS,RP0
bsf Pulsador ; LÌnea del pulsador
configurada como entrada.
bcf STATUS,RP0
clrf Contador
call Visualiza ; Inicializa contador y los visualiza
por 1™ vez,
Principal
btfss Pulsador ; Lee el pulsador.
call IncrementaVisualiza ; Si pulsa salta a incrementar y visualizar el
goto Principal ; contador

; Subrutina "IncrementaVisualiza" -------------------------------------------------------


;
IncrementaVisualiza
call Retardo_20ms ; Espera a que se estabilice el nivel de
tensiÛn.
btfsc Pulsador ; Vuelve a leer el pulsador.
goto Fin_Incrementa
call IncrementaContador ; Incrementa el contador y despuÈs lo
visualiza.
Visualiza
movlw .7 ; Se sit˙a en el centro de la
lÌnea 1.
call LCD_PosicionLinea1
movf Contador,W
call BIN_a_BCD ; Debe visualizar en decimal.
call LCD_Byte
EsperaDejePulsar
btfss Pulsador
goto EsperaDejePulsar
Fin_Incrementa
return

; Subrutina "IncrementaContador" ---------------------------------------------------------


;
; Incrementa el valor de la variable Contador. Si llega al valor m·ximo lo resetea.

VALOR_MAX EQU .6 ; Valor m·ximo de la cuenta.


IncrementaContador
incf Contador,F ; Incrementa el contador
movf Contador,W ; øHa superado su valor m·ximo?
sublw VALOR_MAX ; (W)=VALOR_MAX-(Contador).
btfss STATUS,C ; øC=1?, ø(W) positivo?,
ø(VALOR_MAX>=(Contador)?
clrf Contador ; Lo inicializa si ha superado su valor
m·ximo.
return

INCLUDE <LCD_4BIT.INC> ; Subrutinas de control del LCD.


INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
INCLUDE <BIN_BCD.INC> ; Subrutina BIN_a_BCD.
END ; Fin del programa.

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_07.asm *************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Mientras se mantenga presionado el pulsador conectado al pin RA4, incrementa un contador
; que se visualiza en la pantalla. Cuando llegue a su valor m·ximo (por ejemplo 59) se resetea
; y comienza de nuevo la cuenta. Se mantiene 200 ms en cada cuenta.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC

#DEFINE Pulsador PORTA,4 ; LÌnea donde se conecta el pulsador.

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
bsf STATUS,RP0
bsf Pulsador ; LÌnea del pulsador
configurada como entrada.
bcf STATUS,RP0
clrf Contador
call Visualiza ; Inicializa contador y los visualiza
por 1™ vez.
Principal
btfss Pulsador ; Lee el pulsador.
call IncrementaVisualiza ; Si pulsa salta a incrementar y visualizar el
goto Principal ; contador

; Subrutina "IncrementaVisualiza" -------------------------------------------------------


;
IncrementaVisualiza
call Retardo_20ms ; Espera a que se estabilice el nivel de
tensiÛn.
btfsc Pulsador ; Vuelve a leer el pulsador.
goto Fin_Incrementa
call IncrementaContador ; Incrementa el contador y despuÈs lo
visualiza.
Visualiza
movlw .7 ; Se sit˙a en el centro de la
lÌnea 1.
call LCD_PosicionLinea1
movf Contador,W
call BIN_a_BCD
call LCD_Byte
call Retardo_200ms ; Se mantiene durante este tiempo.
Fin_Incrementa
return

; Subrutina "IncrementaContador" ---------------------------------------------------------


;
; Incrementa el valor de la variable Contador. Si llega al valor m·ximo lo resetea.

VALOR_MAX EQU .59 ; Valor m·ximo de la cuenta.

IncrementaContador
incf Contador,F ; Incrementa el contador
movf Contador,W ; øHa superado su valor m·ximo?
sublw VALOR_MAX ; (W)=VALOR_MAX-(Contador).
btfss STATUS,C ; øC=1?, ø(W) positivo?,
ø(VALOR_MAX>=(Contador)?
clrf Contador ; Lo inicializa si ha superado su valor
m·ximo.
return

INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** LCD_08.asm ************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Mientras se mantenga presionado el pulsador conectado al pin RA4, se incrementa un contador
; visualizado en la pantalla en tres formatos: decimal, hexadecimal y binario. Un ejemplo:
; Primera LÌnea: "CE 206"
; Segunda LÌnea: "11001110"
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
Contador ; El contador a visualizar.
Auxiliar
Desplaza
ENDC

#DEFINE Pulsador PORTA,4 ; LÌnea donde se conecta el pulsador.

; ZONA DE C”DIGOS ********************************************************************

ORG 0 ; El programa comienza


en la direcciÛn 0.
Inicio
call LCD_Inicializa
bsf STATUS,RP0
bsf Pulsador ; LÌnea del pulsador
configurada como entrada.
bcf STATUS,RP0
clrf Contador ; Inicializa el contador y
call VisualizaContador ; lo visualiza.
Principal
btfsc Pulsador ; Lee el pulsador.
goto Fin ; Si no pulsa salta a final.
call Retardo_20ms ; Espera a que se estabilicen los niveles de
tensiÛn.
btfsc Pulsador ; Vuelve a leer el pulsador.
goto Fin
incf Contador,F ; Incrementa el contador.
call VisualizaContador
call Retardo_200ms ; Se incrementar· de nuevo cuando pase este
Fin
goto Principal ; tiempo.

; Subrutina "VisualizaContador" --------------------------------------------------------

VisualizaContador
call LCD_Borra ; Borra la pantalla.
movf Contador,W ; A continuaciÛn visualiza el contador.
call LCD_ByteCompleto ; Visualiza en hexadecimal.
call LCD_TresEspaciosBlancos ; Como separador.
movf Contador,W ; Ahora se visualiza en decimal.
call BIN_a_BCD ; Primero se convierte a BCD.
movwf Auxiliar ; Guarda las decenas y unidades.
movf BCD_Centenas,W ; Visualiza centenas.
call LCD_Nibble
movf Auxiliar,W ; Visualiza las decenas y unidades.
call LCD_ByteCompleto
;
call LCD_Linea2 ; En la segunda lÌnea para visualizar
en binario.
movlw .8 ; Utiliza el registro auxiliar
como contador del
movwf Auxiliar ; n˙mero de bits que se va visualizando
por la
movf Contador,W ; pantalla.
movwf Desplaza
VisualizaBit
rlf Desplaza,F ; El bit a visualizar pasa al
Carry .
movlw '1' ; En principio supone que es un
uno.
btfss STATUS,C ; Comprueba su valor.
movlw '0' ; Ha sido cero.
call LCD_Caracter ; Lo visualiza.
decfsz Auxiliar,F ; øHa terminado de visualizar los 8
bits?
goto VisualizaBit ; No, sigue visualizando otro bit.
return

INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************ Mensaje_01.asm ***********************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; En la pantalla del mÛdulo LCD se visualiza un mensaje de menos de 16 caracteres grabado
; en la memoria ROM mediante la directiva DT.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
LCD_ApuntaCaracter ; Indica la posiciÛn del car·cter a
visualizar
; respecto del comienzo
de todos los mensajes
; (posiciÛn de la
etiqueta "Mensajes").
LCD_ValorCaracter ; Valor del cÛdigo ASCII del car·cter a
ENDC ; visualizar.

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
clrf LCD_ApuntaCaracter ; Se visualizar· la primera posiciÛn del
mensaje.
LCD_VisualizaOtroCaracter
movf LCD_ApuntaCaracter,W
call Mensajes ; Obtiene el cÛdigo ASCII del car·cter
apuntado.
movwf LCD_ValorCaracter ; Guarda el valor de car·cter.
movf LCD_ValorCaracter,F ; Lo ˙nico que hace es posicionar flag Z. En
caso
btfsc STATUS,Z ; que sea "0x00", que es cÛdigo
indicador final
goto Fin ; de mensaje, sale fuera.
LCD_NoUltimoCaracter
call LCD_Caracter ; Visualiza el car·cter ASCII leÌdo.
incf LCD_ApuntaCaracter,F ; Apunta a la posiciÛn del siguiente car·cter
goto LCD_VisualizaOtroCaracter ; dentro del mensaje.
Fin sleep ; Pasa a modo bajo consumo.

; Subrutina "Mensajes" ---------------------------------------------------------------


;
Mensajes
addwf PCL,F
Mensaje0 ; PosiciÛn inicial del mensaje.
DT "Hola!, que tal? ", 0x00

INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************ Mensaje_02.asm ************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; En la pantalla del mÛdulo LCD se visualiza un mensaje de menos de 16 caracteres grabado
; en la memoria ROM mediante la directiva DT. Utiliza la subrutina LCD_Mensaje de la
; librerÌa LCD_MENS.INC
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
movlw Mensaje0 ; Apunta dÛnde se encuentra el mensaje.
call LCD_Mensaje ; Visualiza el mensaje.
sleep ; Pasa a modo bajo consumo.

; Mensajes ------------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0
DT "Hola!, que tal? ", 0x00

INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************ Mensaje_03.asm ************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; En la pantalla se visualizan varios mensajes, uno detr·s de otro. Cada mensaje permanece
; durante 2 segundos. Entre mensaje y mensaje la pantalla se apaga durante unos 200 ms.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
Principal
movlw Mensaje0 ; Apunta al mensaje 0.
call Visualiza
movlw Mensaje1 ; Apunta al mensaje 1.
call Visualiza
movlw Mensaje2 ; Apunta al mensaje 2.
call Visualiza
call Retardo_5s ; Permanece apagada durante este tiempo.
goto Principal ; Repite la visualizaciÛn de todos los
mensajes.
;
; Subrutina "Visualiza" -----------------------------------------------------------------
;
Visualiza
call LCD_Mensaje
call Retardo_2s ; Visualiza el mensaje durante este tiempo.
call LCD_Borra ; Borra la pantalla y se mantiene asÌ durante
call Retardo_200ms ; este tiempo.
return
;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0 ; PosiciÛn inicial del mensaje 0.
DT "Estudia PIC, es", 0x00
Mensaje1 ; PosiciÛn inicial del mensaje 1.
DT "muy divertido.", 0x00
Mensaje2 ; PosiciÛn inicial del mensaje 2.
DT "IES ISAAC PERAL", 0x00

INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************ Mensaje_04.asm ************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; En las dos lÌneas de la pantalla aparecer·n dos mensajes parpadeantes.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
Principal
movlw Mensaje0 ; Apunta al mensaje de la primera lÌnea
y
call LCD_Mensaje ; lo visualiza.
call LCD_Linea2 ; Pasa a la segunda lÌnea.
movlw Mensaje1 ; Apunta al mensaje de la segunda
lÌnea.
call LCD_Mensaje ; Lo visualiza.
call Retardo_500ms ; Durante este tiempo.
call LCD_Borra ; Borra la pantalla.
call Retardo_500ms ; Durante este tiempo, produciendo un efecto de
goto Principal ; parpadeo.
;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0 ; PosiciÛn inicial del mensaje
0.
DT " Estudia un", 0x00
Mensaje1 ; PosiciÛn inicial del mensaje
1.
DT "Ciclo Formativo", 0x00

INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************ Mensaje_05.asm ************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; En la primera lÌnea de la pantalla aparece un mensaje fijo. En la segunda lÌnea aparece
; un mensaje parpadeante.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
movlw MensajeFijo ; Apunta al mensaje fijo y lo
visualiza.
call LCD_Mensaje
Principal
call LCD_Linea2 ; Pasa a la segunda lÌnea.
movlw MensajeParpadeante ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_500ms ; Durante este tiempo.
call LCD_Linea2 ; Vuelve a situarse al principio de la
lÌnea 2.
call LCD_LineaEnBlanco ; Visualiza lÌnea en blanco.
call Retardo_500ms ; Durante este tiempo, produciendo un efecto de
goto Principal ; parpadeo.
;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeFijo
DT " Estudia ", 0x00;
MensajeParpadeante
DT " ELECTRONICA ", 0x00

INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************ Mensaje_07.asm ************************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; El mÛdulo LCD visualiza un mensaje largo (m·s de 16 caracteres) que se desplaza a lo largo
; de la pantalla. Se utiliza la subrutina LCD_MensajeMovimiento de la librerÌa LCD_MENS.INC.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa ; Prepara la pantalla.
Principal
movlw Mensaje0 ; Apunta al mensaje.
call LCD_MensajeMovimiento
goto Principal ; Repite la visualizaciÛn.

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0 ; PosiciÛn inicial del mensaje.
DT " " ; Espacios en blanco al principio para mejor
DT "Estudia un Ciclo Formativo " ; visualizaciÛn.
DT "de ELECTRONICA."
DT " ", 0x0 ; Espacios en blanco al final.
;
INCLUDE <LCD_MENS.INC> ; Subrutina LCD_MensajeMovimiento.
INCLUDE <LCD_4BIT.INC> ; Subrutinas de control del LCD.
INCLUDE <RETARDOS.INC> ; Subrutinas de retardos.
END ; Fin del programa.

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** Mensaje_09.asm **********************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; En pantalla visualiza "Cerrado" o "Abierto" seg˙n si un pulsador est· presionado o no.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

#DEFINE Pulsador PORTA,4 ; LÌnea donde se conecta el pulsador.

; ZONA DE C”DIGOS ********************************************************************

ORG 0
Inicio
call LCD_Inicializa
movlw MensajePulsador
call LCD_Mensaje
bsf STATUS,RP0
bsf Pulsador ; LÌnea del pulsador que se
configura como entrada.
bcf STATUS,RP0
Principal
call LCD_Linea2
movlw MensajeCerrado ; En principio considera que est· presionado.
btfsc Pulsador ; Lee el pulsador.
movlw MensajeAbierto ; No, estaba en reposo.
call LCD_Mensaje ; Visualiza el resultado.
goto Principal

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajePulsador
DT " Pulsador", 0x00
MensajeAbierto
DT " abIERto", 0x00
MensajeCerrado
DT " CErraDO", 0x00

INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;************************************** Mensaje_10.asm **********************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Muestra la animaciÛn de la carga de una bateria desde 0% a 100%
;
; ZONA DE DATOS *************************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
Contador
ENDC

; ZONA DE C”DIGOS ***********************************************************************

ORG 0
Inicio
call LCD_Inicializa
call CGRAM_EscribeDatos
movlw MensajeCargando
call LCD_Mensaje
Principal
clrf Contador
VisualizaImagen
call LCD_Linea1
movf Contador,W
call LCD_Caracter
call Retardo_200ms
incf Contador,F
movlw .6 ; La bateria animada est·
compuesta por 6 im·genes.
subwf Contador,W
btfss STATUS,C
goto VisualizaImagen
goto Principal

; Subrutina LCD_Escribe CGRAM -----------------------------------------------------------


;
; Escribe en la CGRAM los sÌmbolos de la bateria para la animaciÛn.
;
CGRAM_NUM_IMAGENES EQU 6
;
CGRAM_EscribeDatos
movlw b'01000000' ; Comando indicando que va a escribir a
partir de
call LCD_EnviaComando ; la direcciÛn de la CGRAM.
clrf Contador
CGRAM_EscribeOtro
movf Contador,W
call CGRAM_Escribe
call LCD_Caracter
incf Contador,F
movlw CGRAM_NUM_IMAGENES * 8 ; Cada imagen ocupa 8 posiciones de CGRAM.
subwf Contador,W
btfss STATUS,C
goto CGRAM_EscribeOtro
call LCD_Borra
return

CGRAM_Escribe
addwf PCL,F
; Bateria al 0%, byte 0 de la CGRAM.
; ________
retlw b'00001110' ; | xxx |
retlw b'00001010' ; | x x |
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00011111' ; | xxxxx|
; --------
; Bateria al 20%, byte 1 de la CGRAM.
; ________
retlw b'00001110' ; | xxx |
retlw b'00001010' ; | x x |
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
; --------
; Bateria al 40%, byte 2 de la CGRAM.
; ________
retlw b'00001110' ; | xxx |
retlw b'00001010' ; | x x |
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
; --------
; Bateria al 60%, byte 3 de la CGRAM.
; ________
retlw b'00001110' ; | xxx |
retlw b'00001010' ; | x x |
retlw b'00010001' ; | x x|
retlw b'00010001' ; | x x|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
; --------
; Bateria al 80%, byte 4 de la CGRAM.
; ________
retlw b'00001110' ; | xxx |
retlw b'00001010' ; | x x |
retlw b'00010001' ; | x x|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
; --------
; Bateria al 100%, byte 5 de la CGRAM.
; ________
retlw b'00001110' ; | xxx |
retlw b'00001010' ; | x x |
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
retlw b'00011111' ; | xxxxx|
; --------
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeCargando
DT " Cargando", 0x00

INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
END

; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. LÛpez. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
INGENIERÍA EN ELECTRÓNICA

FAMILIA DE MICROCONTROLADORES
PIC 16F87X

MAESTRO: DR. EVERARDO INZUNZA GONZÁLEZ


High-Performance RISC CPU:

• Only 35 single-word instructions to learn.

• All single-cycle instructions except for program

branches, which are two-cycle.

• Operating speed: DC – 20 MHz clock input.

• Up to 8K x 14 words of Flash Program Memory.

•  Up to 368 x 8 bytes of Data Memory (RAM).

•  Up to 256 x 8 bytes of EEPROM Data Memory.

• Pinout compatible to other 28-pin or 40/44-pin.

PIC16CXXX and PIC16FXXX microcontrollers.

Elaboró: Dr. Everardo Inzunza


González 2
Analog Features:

• 10-bit, up to 8-channel Analog-to-Digital Converter (A/D)

• Brown- out Reset (BOR)

• Analog Comparator module with:

- Two analog comparators

- Programmable on-chip voltage reference (VREF) module

-Programmable input multiplexing from device

inputs and internal voltage reference

- Comparator outputs are externally accessible

Elaboró: Dr. Everardo Inzunza


González 3
Special Microcontroller Features:

• 100,000 erase/write cycle Enhanced Flash program memory typical

• 1,000,000 erase/write cycle Data EEPROM memory typical

• Data EEPROM Retention > 40 years

• In-Circuit Serial Programming™ (ICSP™) via two pins

• Single-supply 5V In-Circuit Serial Programming

• Programmable code protection

• Power saving Sleep mode

• Selectable oscillator options

• In-Circuit Debug (ICD) via two pins

Elaboró: Dr. Everardo Inzunza


González 4
CMOS Technology:

• Low-power, high-speed Flash/EEPROM technology

• Fully static design

• Wide operating voltage range (2.0V to 5.5V)

• Commercial and Industrial temperature ranges

• Low-power consumption

Elaboró: Dr. Everardo Inzunza


González 5
Tabla comparativa de diferentes PICS… (2)

Elaboró: Dr. Everardo Inzunza


González 6
Pin diagrams

Elaboró: Dr. Everardo Inzunza


González 7
8
9
10
Elaboró: Dr. Everardo Inzunza
González 11
Arquitectura interna del PIC 16F873/16F876

12
Arquitectura interna del PIC 16F874/16F877

13
ORGANIZACION DE LA MEMORIA

Elaboró: Dr. Everardo Inzunza


González 14
ORGANIZACION DE LA MEMORIA

Elaboró: Dr. Everardo Inzunza


González 15
16
17
SISTEMA MINIMO BASADO EN µC 16F877

NOTA: El potenciómetro conectado


en el pin #2 es para emular la entrada
Analógica del ADC.
18
MICROCONTROLADOR PIC

USO DEL CONVERTIDOR DE


ANALÓGICO A DIGITAL

PRESENTA: DR. EVERARDO INZUNZA GONZÁLEZ

Dr. Everardo Inzunza González


Pin out

Dr. Everardo Inzunza González


CARACTERISTICAS DEL ADC
l  RESOLUCION: 10 bits
l  MULTIPLEXOR: 5 U 8 CANALES*
l  FRECUENCIA DE MUESTREO: Configurable*
l  2Tosc, 8Tosc o 32Tosc

*cuidando que no
sea menor a 1.6 us

Dr. Everardo Inzunza González


REGISTROS DE ADC

Dr. Everardo Inzunza González


EL REGISTRO ADCON1
REGISTRO PRINCIPAL PARA JUSTIFICAR EL DATO
DIGITAL HACIA LA IZQUIERDA O HACIA LA DERECHA
POR MEDIO DE ESTE REGISTRO CONFIGURAMOS EL
PIC, PARA SUS ENTRADAS ANALOGICAS Y SI SE
UTILIZARA Vref

Dr. Everardo Inzunza González


Dr. Everardo Inzunza González
LOS BITS PCFG3:PCFG0

ADCON1

Dr. Everardo Inzunza González


LOS BITS PCFG3:PCFG0

Dr. Everardo Inzunza González


ESTRUCTURA DEL ADC

Dr. Everardo Inzunza González


EL REGISTRO ADCON0
• REGISTRO QUE CONFIGURA LA FRECUENCIA DE
MUESTREO
• CONFIGURA Y SELECCIONA EL CANAL DONDE SE
TOMARAN MUESTRAS
• CONTIENE LA BANDERA DE ESTADO DEL ADC
• ACTIVA O DESACTIVA EL ADC

Dr. Everardo Inzunza González


ADCON0

Dr. Everardo Inzunza González


FLUJO DE CONFIGURACION
l  CONFIGURAR PUERTOS/ENTRADAS ANALOGICAS/
VOLTAJES DE REFERENCIA
l  JUSTIFICAR EL RESULTADO DE LA CONVERSION (ADCON1)
Y ENTRADAS ANALOGICAS CORRESPONDIENTES DEL
PUERTO
l  CONFIGURAR LA FRECUENCIA DE MUESTREO(ADCON0) Y
SELECCIONAR EL CANAL(ADCON0).
l  DESACTIVAR LA BANDERA DE CONVERSION (PIR1)
l  CREAR UN CICLO Y HACIENDO UN TEST DE LA MISMA
BANDERA DE CONVERSION
l  AL FINALIZAR LA CONVERSION, MOVER EL DATO DESDE
ADRESSL O ADRESSH (SEGUN SE HAYA JUSTIFICADO) AL
REGISTRO W, PARA POSTERIORMENTE MOVERLO AL
PUERTO DE SALIDA O REGISTRO DE INTERES.

Dr. Everardo Inzunza González


CODIGO
RESETEAR clrf PORTA;resetea puerto a
PUERTOS clrf PORTB;resetea puerto b
clrf PORTC;resetea puerto c

CONFIGURAR
PUERTOS
movlw b'111111';
movwf TRISA;
clrf TRISB;
clrf TRISC;

Dr. Everardo Inzunza González


CODIGO
CONFIGURAR ADC

movlw b'10000010'; Just. Derecha, PA entrada


movwf ADCON1;

movlw b'10000001'; Enciende ADC y Fosc/32


movwf ADCON0;

Dr. Everardo Inzunza González


CODIGO
INICIANDO
CONVERSION

conv
bcf PIR1,ADIF; apaga Band. Int. ADC
bsf ADCON0,GO; Inicia Conversión

ADC_WAIT ; Espera fin de conversión


btfss PIR1,ADIF; Si, salta una inst.
goto ADC_WAIT; No, cont. esperando

movf ADRESL,w;
movwf dato;
movwf PORTB;
goto conv

Dr. Everardo Inzunza González


CONSIDERACIONES DE DISEÑO

l  LA SEÑAL ANALOGICA DEBERA SER REFORZADA


MEDIANTE UN SEGUIDOR DE VOLTAJE(BUFFER).

l  SE RECOMIENDA UTILIZAR VOLTAJES DE REFERENCIA DE


PRECISION, PARA DISMINUIR EL RANGO DE ERROR EN LA
LECTURA.

Dr. Everardo Inzunza González


UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA

INGENIERIA EN ELECTRÓNICA

MATERIA: MICROCONTROLADORES

TEMA: USO Y MANEJO DEL LCD

MAESTRO: DR. EVERARDO INZUNZA GONZÁLEZ


Introducción

! Antes de aparecer los módulos LCD, los diseños electrónicos utilizaban los
displays de siete segmentos para poder mostrar la información, además de su
gran limitación de poder mostrar los caracteres alfa numéricos y símbolos
especiales, también consumían demasiada corriente y ocupaban demasiado
espacio físico.

! Posteriormente aparecieron otros tipos de Displays mas complejos (matriz de


led’s) que podían mostrar algunos caracteres y símbolos; pero tenían de igual
manera mucho consumo de corriente y espacio físico desperdiciado.

Dr. Everardo Inzunza Gonzalez 2


Visualizador LCD

! Sin embargo, en muchos proyectos es necesario visualizar la

información en una pantalla de bajo costo. Una de las formas más

utilizadas es mediante un display LCD (Liquid Crystal Display).

! Los LCD tienen la capacidad de mostrar cualquier caracter

alfanumérico, permitiendo representar la información que genera

cualquier equipo electrónico de una forma fácil y económica.

Dr. Everardo Inzunza Gonzalez 3


Visualizador LCD…
! La pantalla consta de una matríz de caracteres (normalmente de

5x7 puntos) distribuídos en una, dos, tres o cuatro líneas de 16

hasta 40 caracteres cada línea.

Figura 1) Aspecto físico de un módulo LCD.

Dr. Everardo Inzunza Gonzalez 4


Componentes principales de un LCD

Ø  La propia pantalla LCD.


Ø  Un microcontrolador.
Ø  Una pequeña memoria ROM que contiene una tabla de
caracteres.

Ø  Una pequeña memoria RAM.


Ø  Un interfaz de contactos eléctricos, para conexión externa.
Ø  Opcionalmente, una luz trasera para iluminar la pantalla.

Dr. Everardo Inzunza Gonzalez 5


Visualizador LCD…
! El proceso de visualización es gobernado por un

microcontrolador incorporado a la pantalla, siendo el Hitachi

44780 uno de los modelos más utilizados.

! Existen muchos fabricantes de LCD, el modelo utilizado en esta

ocasión es el LM016L, que es un módulo de 2 líneas de 16

caracteres cada una.

! Sin embargo, la mayoría de los fabricantes de LCD, siguen el

mismo estándar de comunicación y el código ASCII.

Dr. Everardo Inzunza Gonzalez 6


Visualizador LCD…
! Las características generales de un módulo LM016L son:
§  Consumo de potencia del orden de 7.5 mW.

§  Pantalla de caracteres ASCII, además de los caracteres japoneses Kanji,


caracteres griegos y algunos símbolos matemáticos.

§  Desplazamiento de los caracteres hacia la izquierda o derecha.

§  Memoria de 40 caracteres por línea de pantalla, visualizándose 16


caracteres por línea.

§  Movimiento del cursor.

§  Permite que el usuario pueda programar 8 caracteres.

§  Pueden ser gobernados de dos formas principales:


§  Conexión con BUS de 4 bits.

§  Conexión con BUS de 8 bits.

Dr. Everardo Inzunza Gonzalez 7


Pines del Visualizador LCD…
! El módulo LCD tiene 14 pines, se conecta fácilmente a cualquier sistema

microcontrolador.

! Las líneas del BUS de datos son tri-estados y pasan al estado de alta impedancia

cuando el LCD no está habilitado.

Figura 2) Pines del módulo LCD y diagrama a bloques.

Dr. Everardo Inzunza Gonzalez 8


Pines del Visualizador LCD…

Dr. Everardo Inzunza Gonzalez 9


DDRAM
! El módulo LCD posee una zona de memoria RAM llamada DDRAM (Data Display

RAM) donde se almacenan los caracteres que se van a desplegar.

! Tiene una capacidad de 80 bytes, 40 por cada línea, de las cuales sólo 32 se

pueden visualizar a la vez (16 bytes por línea).

De las 80 posibles, las dos direcciones más importantes


de la DDRAM son:

-  Dirección 00h, es el comienzo de la primera línea.


-  Dirección 40h, es el comienzo de la segunda línea.

Dr. Everardo Inzunza Gonzalez 10


DDRAM
! Cada vez que se escribe un dato en la DDRAM, automáticamente se apunta a la
siguiente posición, donde se realizará la escritura del próximo caracter.

CGROM
! El módulo LCD tiene una zona de memoria no volátil llamada CGROM donde se
almacena una tabla con los 192 caracteres que pueden ser visualizados (ver
siguiente figura).

! Cada uno de los caracteres tiene su representación binaria de 8 bits.

! Para visualizar un caracter, se debe recibir por el bus de datos el código ASCII
correspondiente al caracter.

! Por ejemplo, para visualizar el caracter “A” el LCD debe recibir por su bus de
datos el código b’01000001’ o bien el 41h.

Dr. Everardo Inzunza Gonzalez 11


Caracteres definidos
dentro de la memoria
CGROM.
Dr. Everardo Inzunza Gonzalez 12
CGRAM

! El módulo LCD también permite definir ocho nuevos caracteres de usuario, no


incluidos en su tabla interna. Estos caracteres se guardan en una zona de RAM
denominada CGRAM (Character Generator RAM).

Dr. Everardo Inzunza Gonzalez 13


MODOS DE FUNCIONAMIENTO

! MODO COMANDO. Es cuando por el bus de datos el LCD recibe instrucciones


como “Borrar Display”, “Mover Cursor”, “Desplazar a la izquierda”, etc. Para
trabajar en modo comando, el pin RS debe estar en “0”. El pin R/W también
debe ser “0” para indicar que se está realizando una operación de escritura.
Una operación en este modo tarda un máximo de 1.64 mS.

§  MODO CARACTER O DATOS. Es cuando por el bus de datos el visualizador


LCD recibe un caracter a escribir en la DDRAM. Es decir, cuando se envía al LCD
el caracter ASCII a visualizar. Para trabajar en este modo, el pin RS debe estar a
“1”. El pin R/W debe estar en “0” para indicar que se está realizando una
operación de escritura. También se le llama “modo de registro”. Una operación
en este modo tarda un máximo de 40 µS.

Dr. Everardo Inzunza Gonzalez 14


MODOS DE FUNCIONAMIENTO…

! MODO DE LECTURA “Busy flag” o LCD ocupado. En el bit 7 del bus de


datos el LCD informa al microcontrolador que está ocupado (este bit se
denomina Busy Flag). Para ello se lee el bus de datos con RS=0 y R/W=1, si el
bit 7 del bus de datos es “1” indica que la pantalla LCD está ocupada realizando
operaciones internas y no puede aceptar nuevas instrucciones ni datos. Hay que
esperar a que “Busy Flag” valga “0” para enviarle la siguiente instrucción o
caracter.

! Si no se desea estar leyendo la bandera “Busy Flag”, se recomienda crear


pequeños retardos, el cual debe ser mayor a 1.64 mS si se trabaja en modo
COMANDO y mayor a 40 µS si se trabaja en modo DATOS.

Dr. Everardo Inzunza Gonzalez 15


COMANDOS DE CONTROL

Comandos del display LCD.

Dr. Everardo Inzunza Gonzalez 16


COMANDOS DE CONTROL…

! Los comandos se envían a través del bus de datos. Para que el LCD los
reconozca hay que poner la señal RS a nivel bajo. A continuación se detallan los
comandos y símbolos de esta tabla:
! Clear Display (0000 0001). Borra pantalla y devuelve el cursor a la posición
inicial (dirección 0 de la DDRAM).

! Return Home (0000 001x). Cursor a dirección origen. Devuelve el cursor a la


posición original de la DDRAM (dirección 00h) quedando intacto su contenido.

! Entry Mode Set (0000 0 1 I/D S). Modo entrada. Establece las
características de escritura de los datos (Shift e Increment/Decrement):

! Si S=0, la información visualizada en pantalla no se desplaza al escribir un


nuevo caracter.
! Si S=1, la información visualizada se desplaza al escribir un nuevo caracter.
La pantalla se desplaza en el sentido indicado por el bit I/D cuando el
cursor llega al filo de la pantalla.
Dr. Everardo Inzunza Gonzalez 17
COMANDOS DE CONTROL…

! Si I/D=1, Incremento automático a la posición del cursor. La posición


de la DDRAM se incrementa automáticamente tras cada lectura o
escritura de la misma.

! Si I/D=0, Decremento automático de la posición del cursor. Se


decrementa el puntero de la DDRAM.
! Display Control (0 0 0 0 1 D C B). Control de la pantalla.

! Si B=0, Blink OFF, no hay efecto del parpadeo del cursor.

! Si B=1, Blink ON, efecto del parpadeo con un cursor rectangular.

! Si C=0, Cursor OFF, el cursor no se visualiza.

! Si C=1, Cursor ON, el cursor es visualizado.

! Si D=0, Display OFF, el display se apaga.

! Si D=1, Display ON, el display se enciende.

Dr. Everardo Inzunza Gonzalez 18


COMANDOS DE CONTROL…

! Cursor and Display Shift (0 0 0 1 S/C R/L X X). Control de los desplazamientos
del cursor y de la pantalla:

! Si R/L=0, Left. Desplazamiento de cursor a la izquierda.

! Si R/L=1, Right. Desplazamiento de cursor a la derecha.

! Si S/C=0, El efecto del desplazamiento se aplica sólo sobre el cursor sin alterar
el contenido de la DDRAM.

! Si S/C=1, El efecto del desplazamiento se aplica sobre todo el display.

! Function Set (0 0 1 DL N F x x). Caracteristicas de control de hardware.

! Si F=0, Font. Caracteres de 5x7 puntos.

! Si F=1, Font. Caracteres de 5x10 puntos.

! Si N=0, Number Line. Pantalla de 1 línea.

! Si N=1, Number Line. Pantalla de 2 líneas.

! Si DL=0, Data Length. Comunicación con 4 bits. Indica al LCD que solamente se
van a utilizar las líneas DB7:DB4 para enviarle los datos y que se hará enviando
primero el nibble alto y luego el nibble bajo del dato.

! Si DL=1, Data Length. Comunicación con 8 bits.


Dr. Everardo Inzunza Gonzalez 19
COMANDOS DE CONTROL…

! Set CGRAM Address (0 1 d d d d d d). Se va a escribir sobre la dirección CGRAM


señalada.

! Set DDRAM Address (1 d d d d d d d). Esta instrucción se utiliza para modificar el


puntero de la DDRAM. Así por ejemplo, si la dirección es la 08h se escribirá en el
centro de la primera línea.

! Read Busy Flag . Lee el BF indicando si hay una operación interna en proceso y lee,
además el contenido de la dirección DDRAM apuntada.

Dr. Everardo Inzunza Gonzalez 20


CONEXIÓN DE LCD MEDIANTE 4 BITS

•  La siguiente figura ilustra la forma de conectar el LCD al puerto B del


microcontrolador 16F84 mediante 4 líneas y sin lectura del Busy Flag,
por lo que también se ahorra la línea R/W, la cual está conectada a
tierra.

•  La principal ventaja de este circuito es que utiliza el mínimo posible


de pines (6 líneas) del microcontrolador para
el control del LCD.

Dr. Everardo Inzunza Gonzalez 21


CONEXIÓN DE LCD MEDIANTE 4 BITS CON EL 16F84A

Dr. Everardo Inzunza Gonzalez 22


CONEXIÓN DE LCD MEDIANTE 8 BITS

! La siguiente figura ilustra la forma de conectar el LCD al puerto B del


microcontrolador mediante 8 líneas y utilizando la Busy flag, por ello se conecta
el pin R/W del LCD a la línea RA1 del microcontrolador, aunque se pudo haber
sustiruido por un retardo de 2 mS o 50 µS, tal como se hizo con la conexión de
4 bits.

! La ventaja fundamental del control del LCD mediante 8 bits, respecto a la


conexión de 4 bits, es una mayor rapidez al envíar los 8 bits por el puerto al
mismo tiempo, en lugar de empaquetrarlos en bloques de 4 bits.

! Además el software de control es más sencillo.

! Como inconveniente importante destaca el aumento de las líneas ocupadas del


microcontrolador. Esto es muy importante en el caso de PIC 16F84, debido a
que cuenta con pocas líneas de E/S.

Dr. Everardo Inzunza Gonzalez 23


CONEXIÓN DE LCD MEDIANTE 8 BITS CON EL 16F84A

Dr. Everardo Inzunza Gonzalez 24


CONEXIÓN DE LCD MEDIANTE 8 BITS CON EL 16F877

Dr. Everardo Inzunza Gonzalez 25


UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA

INGENIERÍA EN ELECTRÓNICA

 III  Programación  en  ALTO  nivel  para  el  


microcontrolador.
(Lenguaje C)

PROFESOR: DR. EVERARDO INZUNZA GONZÁLEZ

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
EJEMPLO  DE  DECLARACION  DE  VARIABLES  

Elaboró:  Dr.  Everardo  Inzunza  González  


OPERACIONES  ARTIMÉTICAS  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Ejemplo  de  una  Función  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Ejemplos  el  If:  

Elaboró:  Dr.  Everardo  Inzunza  González  


Ejemplos  el  If:  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
Funciones  en  C  

Elaboró:  Dr.  Everardo  Inzunza  González  


Funciones  en  C  

Elaboró:  Dr.  Everardo  Inzunza  González  


Funciones  en  C  

Elaboró:  Dr.  Everardo  Inzunza  González  


Tipos  de  archivo  que  se  generan  al  compilar  el  programa  fuente  (.c)  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
GesNón  de  puertos  en  C  

Elaboró:  Dr.  Everardo  Inzunza  González  


Manipulación  de  puertos  a  nivel  de  Bit  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Ejemplo  #1  de  programa  en  C  para  el  PIC  16F876  

Elaboró:  Dr.  Everardo  Inzunza  González  


GesNón  de  puertos  en  C  

Elaboró:  Dr.  Everardo  Inzunza  González  


GesNón  de  puertos  en  C    –    A  través  de  las  direcNvas  

Elaboró:  Dr.  Everardo  Inzunza  González  


GesNón  de  puertos  en  C    –    A  través  de  las  direcNvas  

Elaboró:  Dr.  Everardo  Inzunza  González  


GesNón  de  puertos  en  C    –    A  través  de  las  direcNvas  

Elaboró:  Dr.  Everardo  Inzunza  González  


MANEJO  DEL  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Manejo  del  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Manejo  del  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Manejo  del  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Manejo  del  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Manejo  del  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Manejo  del  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Conexión  eléctrica  del  PIC  16F876    con  el  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
ConverNdor  de  Analógico  a  Digital  

Elaboró:  Dr.  Everardo  Inzunza  González  


ConverNdor  de  Analógico  a  Digital  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Elaboró:  Dr.  Everardo  Inzunza  González  
ConverNdor  de  Analógico  a  Digital  

Elaboró:  Dr.  Everardo  Inzunza  González  


LECTURA  del  ConverNdor  de  Analógico  a  Digital  

Elaboró:  Dr.  Everardo  Inzunza  González  


EJEMPLO  DE  USO  DEL  ADC  Y  LCD  EN  C  

Desarrolle  un  programa  en  lenguaje  C,  de  la  forma  que  el  microcontrolador  PIC  16F876,  
uGlice  el  converGdor  de  analógico  a  digital  y  el  resultado  de  la  conversión  lo  despliegue  
en  formato  decimal  y  en  escala  de  voltaje  en  un  LCD.  

Elaboró:  Dr.  Everardo  Inzunza  González  


Elaboró:  Dr.  Everardo  Inzunza  González  
Ejercicio  #1  

Desarrolle  un  programa  en  lenguaje  C,  de  tal  forma  que  el  microcontrolador  PIC  16F876,  
uGlice  el  converGdor  de  analógico  a  digital  y  el  resultado  de  la  conversión  lo  despliegue  
en  formato  decimal  y  en  escala  de  voltaje  en  un  LCD,  cuando  el  voltaje  sea  mayor  a  3.5V  
que  envie  un  mensaje  de  alarma  al  LCD  y  acGve  un  buzzer  conectado  en  el  pin  RC0.  

Elaboró:  Dr.  Everardo  Inzunza  González  


Ejercicio  #2  

Desarrolle  un  programa  en  lenguaje  C,  de  tal  forma  que  el  microcontrolador  PIC  16F877,  
uGlice  el  converGdor  de  analógico  a  digital  y  mulGcanalice  las  entradas  AN0-­‐AN4  y    
posteriormente  envíe  el  valor  de  estos  canales  en  escala  de  voltaje  a  una  pantalla  LCD  
16  X  2.  

Elaboró:  Dr.  Everardo  Inzunza  González  


COMUNICACION  SERIE  RS-­‐232  

RS232  (Recommended  Standard  232)    


También  conocido  como  Electronic  Industries      
Alliance   RS-­‐232C)   es   una   interfaz   que  
designa     una   norma   para   el   intercambio   de  
datos    binarios  entre  aparatos  electrónicos.  

Elaboró:  Dr.  Everardo  Inzunza  González  


FORMAS DE
INTERCAMBIAR
INFORMACIÓN BINARIA

Transmisión
TIPO De Bits Ventajas Desventajas

-Transf. Rápida - Gran Cantidad


PARALELA Simultánea de Hilos
- Mayor Costo
- Poco Alcance
- Menos Líneas - Aparentemente
SERIAL Bit x Bit - Mas Económicos difícil
- Mayor Alcance

Elaboró:  Dr.  Everardo  Inzunza  González  


SÍNCRONA

I2C  
SPI  
RS-­‐232  
USB  
FORMAS DE
COMUNICACIÓN
SERIAL

ASÍNCRONA

RS-­‐232  
USB  
Elaboró:  Dr.  Everardo  Inzunza  González  
Esquema  de  comunicación  serie  RS-­‐232  

Comunicación  
Asíncrona  

Comunicación  
Síncrona  

Elaboró:  Dr.  Everardo  Inzunza  González  


Trama  de  comunicación  serie  RS-­‐232  

Velocidades  estándar  RS-­‐232  


75   4800  
110   9600  
150   19200  
300   115,200  
600  
1200  
Elaboró:  Dr.  Everardo  Inzunza  González  
2400  
Circuito  integrado  MAX  232  

ConverNdor  de  niveles    


de  voltaje  
 
TTL  è    RS-­‐  232  
 
RS-­‐232  è  TTL  

RS  232  
“1”  Lógico  (-­‐7V  a  -­‐12V)  
“0”  Lógico  (7V  a  12V)  

Elaboró:  Dr.  Everardo  Inzunza  González  


El MAX232
•  Aplicación Típica

Elaboró:  Dr.  Everardo  Inzunza  González  


Chip  FTDI  
•  ConverNdor  de  RS  –  232  a  USB  (Universal  
Serial  Bus)  

Elaboró:  Dr.  Everardo  Inzunza  González  


CONFIGURACION  DE  RS-­‐232  EN  MICROCONTROLADOR  PIC  

Elaboró:  Dr.  Everardo  Inzunza  González  


CONFIGURACION  DE  RS-­‐232  EN  MICROCONTROLADOR  PIC  

Elaboró:  Dr.  Everardo  Inzunza  González  


RS  232.            EJEMPLO  #1  
Desarrolle  un  programa  para  enviar  los  datos  del  0  al  10,  en  modo  asíncrono,  entre  
dos  microcontroladores  PICs.  Desarrolle  otro  programa  para  recibir  esos  datos.  

Elaboró:  Dr.  Everardo  Inzunza  González  


Programa  para  enviar  datos  por  puerto  serie  RS-­‐232  

Elaboró:  Dr.  Everardo  Inzunza  González  


Programa  para  recibir  datos  por  puerto  serie  RS-­‐232  

Elaboró:  Dr.  Everardo  Inzunza  González  


RS  232.            EJEMPLO  #2  
Desarrolle  un  programa  para  transmiGr  los  datos  de  una  conversión  de  analógico  a    
digital  por  el  puerto  serie  a  una  computadora  y  a  una  pantalla  LCD  en  el  modo  de  
comunicación  de  4  bits.  

Elaboró:  Dr.  Everardo  Inzunza  González  


Programa  ejemplo  para  transmiNr  datos  de  conversión  A/D  por  puerto  serie  RS-­‐232  
y  a  una  pantalla  LCD  

Elaboró:  Dr.  Everardo  Inzunza  González  


UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA, ARQUITECTURA
Y DISEÑO

MICROCONTROLADORES

DESARROLLO DE APLICACIONES CON ARDUINO

PRESENTA: DR. EVERARDO INZUNZA GONZÁLEZ


Profesor - Investigador

Dr. Everardo Inzunza González


Objetivo

Ø Manejar, interconectar y programar en forma básica

un microcontrolador arduino para el desarrollo de

diversas aplicaciones.

Dr. Everardo Inzunza González


Definición Arduino
Es una plataforma de hardware libre, basada en

una placa con un microcontrolador AVR y un

entorno de desarrollo, diseñada para facilitar el

uso de la electrónica en proyectos

multidisciplinarios.

3
Dr. Everardo Inzunza González
CARACTERÍSTICAS ELÉCTRICAS
DE ARDUINO

4
Dr. Everardo Inzunza González
Características eléctricas ARDUINO

ü  Microcontrolador ATMEL – AVR de 8 bits -Alto desempeño y bajo consumo


de energía
ü  32 registros de propósito general de 8 bits
ü  20 MIPS con reloj 20 MHz
ü  32 Kb memoria flash
ü  1 Kb EEPROM
ü  2 KB SRAM
ü  10,000/100,000 escritura/borrado Flash/EEPROM
ü  20 años de retención de datos
ü  2 Timers de 8 bits
ü  1 Timer de 16 bits
5
Dr. Everardo Inzunza González
Características eléctricas ARDUINO

ü  6 canales de ADC 10 bits


ü  USART Serie programable
ü  Comunicación serie SPI
ü  Comunicación serie I2C
ü  Power on reset
ü  Brown out detection
ü  Voltaje de operación 1.8V – 5.5 V
ü  Rango de temperatura -40 oC a 85 oC
ü  Velocidad de operación 0 – 20 MHz
ü  Bajo consumo de energía
ü  Modo Activo 0.2 mA
ü  Modo sleep 0.1 µA 6
Dr. Everardo Inzunza González
Sistema mínimo

7
Dr. Everardo Inzunza González
Simulación en PROTEUS

8
Dr. Everardo Inzunza González
Componentes de la placa ARDUINO

9
Dr. Everardo Inzunza González
Tabla comparativa de AVRs

10
Dr. Everardo Inzunza González
Modelos Arduino

11
Dr. Everardo Inzunza González
LENGUAJE C
PARA ARDUINO

12
Dr. Everardo Inzunza González
Lenguaje C para Arduino
Sintaxis Básica
Delimitadores: ;, {}
Comentarios: //, /* */
Cabeceras: #define, #include
Operadores aritméticos: +, -, *, /, %
Asignación: =
Operadores de comparación: ==, !=, <, >, <=, >=
Operadores Booleanos: &&, ||, !
Operadores de acceso a punteros: *, &
Operadores de bits: &, |, ^, ~, <<, >>
Operadores compuestos:
Incremento/decremento de variables: ++, --
Asignación y operación: +=, -=, *=, /=, &=, |= 13
Dr. Everardo Inzunza González
Lenguaje C para Arduino
Estructuras de control
Condicionales: if, if...else, switch case
Bucles: for, while, do... while
Bifurcaciones y saltos: break, continue,
return, goto

Tipos de datos
boolean (booleano)
unsigned long (entero 32b sin signo)
char (caracter)
float (en coma flotante)
byte
double (en coma flotante de 32b)
int (entero)
string (cadena de caracteres)
unsigned int (entero sin signo)
array (cadena)
long (entero 32b)
void (vacío)
word 14
Dr. Everardo Inzunza González
Lenguaje C para Arduino
Constantes
HIGH / LOW: niveles alto y bajo en pines. Los niveles
altos son aquellos de 3 voltios o más.
INPUT / OUTPUT: entrada o salida
true / false

Conversión entre tipos


Estas funciones reciben como argumento una variable de cualquier tipo y
devuelven una variable convertida en el tipo deseado.
char(), byte(), int(), word(), long(), float()

15
Dr. Everardo Inzunza González
Lenguaje C para Arduino
E/S Digital
pinMode(pin, modo)
digitalWrite(pin, valor)
int digitalRead(pin)

E/S Analógica
analogReference(tipo)
int analogRead(pin)
analogWrite(pin, valor)
Tiempo
unsigned long millis()
unsigned long micros()
delay(ms)
delayMicroseconds(microsegundos) 16
Dr. Everardo Inzunza González
Lenguaje C para Arduino
Matemáticas
min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow,
fromHigh, toLow, toHigh), pow(base, exponente), sqrt(x)

Trigonometría
sin(rad), cos(rad), tan(rad)

Números aleatorios
randomSeed(semilla), long random(máx),
long random(mín, máx)

Bits y Bytes
lowByte(), highByte(), bitRead(),
bitWrite(), bitSet(), bitClear(), bit() 17
Dr. Everardo Inzunza González
Lenguaje C para Arduino

Comunicación por puerto serie

Las funciones de manejo del puerto serie deben ir precedidas de "Serial.”

begin(), available(), read(), flush(), print(), println(), write().

Ejemplo: serial.begin(), serial.read()

18
Dr. Everardo Inzunza González
Manipulación de puertos en paralelo
Los registros de puertos permiten la manipulación a mas bajo nivel y de forma
mas rápida de los pines de E/S del microcontrolador de las placas Arduino. Los
pines de las placas Arduino están repartidos entre los registros B(8-13), C
(analógicos) y D(0-7). Mediante las siguientes variables podemos ver y modificar
su estado:
DDR[B/C/D]: Data Direction Register (o dirección del registro de datos) del
puerto B, C ó D. Sirve para especificar que pines queremos usar como de entrada
y cuales de salida. Variable de Lectura/Escritura.
PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C ó D.
Variable de Lectura/Escritura.
PIN[B/C/D]: Input Pins Register (o registro de pines de entrada) del puerto
B, C ó D. Variable de sólo lectura.
Por ejemplo, para especificar que queremos utilizar los pines 1 a 7 como salidas y
el 0 como entrada, bastaría utilizar la siguiente asignación:

DDRD = B11111110; 19
Dr. Everardo Inzunza González
EJEMPLOS DE
PROGRAMACION

20
Dr. Everardo Inzunza González
Código mínimo necesario para empezar a trabajar

void setup() {
// Dentro de esta función se configura el microcontrolador, se inicializan
// variables, se configuran los pines (entradas/salidas), se incluyen las
// librerías, etc.
// Esta función solamente se ejectua una sola vez al inicio

void loop() {

// Aqui se coloca el código principal del programa, y se ejecuta


// indefinidamente (ciclo infinito)

21
Dr. Everardo Inzunza González
Ejemplo No. 1 (Blink)
/* Blink
Turns on a LED for one second, then off for one
second, repeatedly.

This example code is in the public domain.


*/

void setup() {
// initialize the digital pin as an output.
// Pin 13 has a LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
22
Dr. Everardo Inzunza González
Ejemplo No. 2 (Digital Read Serial)

/*
Reads a digital input on pin 2, prints the result to the serial monitor

This example code is in the public domain.


*/
void setup() {
Serial.begin(9600); // Configura comunicación serial 9600 bps
pinMode(2, INPUT); // pin 2 como entrada
}

void loop() {
int sensorValue = digitalRead(2); // Lee pin 2
Serial.println(sensorValue); // envia valor del pin por puerto serie
} 23
Dr. Everardo Inzunza González
Ejercicio No. 3 (Escriba un programa para controlar
un semáforo de un crucero de calle con avenida)

Calle principal Avenida


Luz verde 30 Seg. Luz verde 20 Seg.
Luz ambar 5 Seg. Luz ambar 5 Seg.

Nota: La luz roja de la calle principal o avenida estará encendida cuando


en la calle contraria esté en luz verde ó ambar.

24
Dr. Everardo Inzunza González
Tabla de estados del semáfoto

Estado Prin. Prin. Prin. Ave. Ave. Ave. Tiempo


Verde Ambar Rojo Verde Ambar Rojo (Seg.)

#1 1 0 0 0 0 1 30

#2 0 1 0 0 0 1 5

#3 0 0 1 1 0 0 20

#4 0 0 1 0 1 0 5

25
Dr. Everardo Inzunza González
Convertidor Analógico a Digital

26
Dr. Everardo Inzunza González
Ejemplo No. 4 (Analog Read Serial)

/*
Reads an analog input on pin 0, prints the result to the serial monitor

This example code is in the public domain.


*/
void setup() {
Serial.begin(9600);
}

void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(1000);
}
27
Dr. Everardo Inzunza González
Ejemplo No. 5 (Analog Read Serial)
/*
Lee un valor analógico, lo convierte a voltaje y lo envía por el puerto serie a la
PC
*/
void setup() {
Serial.begin(9600);
}
void loop() {
float voltaje;
int sensorValue = analogRead(A0);
Serial.print("Binario = ");
Serial.print(sensorValue);

voltaje=5.0*sensorValue/1023.0;

Serial.print("\t Voltaje = ");


Serial.println(voltaje);
delay(1000);
}
28
Dr. Everardo Inzunza González
/* Ejemplo # 6
Analog input, analog output, serial output

Reads an analog input pin, maps the result to a range from 0 to 255
and uses the result to set the pulsewidth modulation (PWM) of an output pin.
Also prints the results to the serial monitor.

The circuit:
* potentiometer connected to analog pin 0.
Center pin of the potentiometer goes to the analog pin.
side pins of the potentiometer go to +5V and ground
* LED connected from digital pin 9 to ground
*/

// These constants won't change. They're used to give names


// to the pins used:
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0; // value read from the pot


int outputValue = 0; // value output to the PWM (analog out)

void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
29
} Dr. Everardo Inzunza González
void loop() {

// read the analog in value:

sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);

// change the analog out value:


analogWrite(analogOutPin, outputValue);

// print the results to the serial monitor:

Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);

// wait 10 milliseconds before the next loop


// for the analog-to-digital converter to settle
// after the last reading:
delay(10);
30
} Dr. Everardo Inzunza González
Conexión eléctrica con LCD 16x2

31
Dr. Everardo Inzunza González
Conexión eléctrica con LCD 16x2

32
Dr. Everardo Inzunza González
/*
LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal


library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD


and shows the time.

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3) 33
*/ Dr. Everardo Inzunza González
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins


//LiquidCrystal lcd( RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);

// Print a message to the LCD.


lcd.print("hello, world!");
}

void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):

lcd.setCursor(0, 1); // Cambia el cursor a la segunda linea


// print the number of seconds since reset:

lcd.print(millis()/1000); 34
}
Dr. Everardo Inzunza González
/*
LiquidCrystal Library - Autoscroll

This sketch demonstrates the use of the autoscroll()


and noAutoscroll() functions to make new text scroll or not.

// include the library code:


#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins


//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16,2);
} 35
Dr. Everardo Inzunza González
void loop() {
// set the cursor to (0,0):
lcd.setCursor(0, 0);
// print from 0 to 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
lcd.print(thisChar);
delay(500);
}

// set the cursor to (16,1):


lcd.setCursor(16,1);
// set the display to automatically scroll:
lcd.autoscroll();
// print from 0 to 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
lcd.print(thisChar);
delay(500);
}
// turn off automatic scrolling
lcd.noAutoscroll();

// clear screen for the next loop:


lcd.clear(); 36
}
Dr. Everardo Inzunza González
/*
Liquid Crystal Library – Adc Serie LCD
*/

// include the library code:


#include <LiquidCrystal.h>

float vin;
int adc;
// initialize the library with the numbers of the interface pins
//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd ( 12,11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
Serial.begin(9600);
// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("Bienvenidos");
lcd.setCursor(0,1);
lcd.print(”Curso-Arduino");
delay(1500); 37
}
Dr. Everardo Inzunza González
void loop()
{

lcd.clear(); // borra inf del lcd


adc=analogRead(A0); // convierte A/D
vin=5.0*adc/1023; // calcula el voltaje de entrada
lcd.print("Voltaje = ");
lcd.print(vin,2); // ENVIA EL VALOR DEL VOLTAJE CON DOS DECIMALES AL LCD
lcd.print(" V"); // IMPRIME V en el LCD

Serial.print("Voltaje = "); // Imprime Voltaje en la computadora


Serial.print(vin,2); // ENVIA EL VALOR DEL VOLTAJE CON DOS DECIMALES A LA COMPUTADORA
Serial.print(" V \t"); // IMPRIME V EN LA COMPUTADORA y manda tabulador

lcd.setCursor(0,1); // Posiciona cursor en la 2da linea del LCD


lcd.print("Digital = "); // Imprime la palabra Digital = en el LCD
lcd.print(adc); // Imprime el valor de la conversion A/D

Serial.print("Digital = "); // Imprime la palabra Digital = en la Computadora


Serial.println(adc); // Envia el valor ADC a la computadora
delay(500); // Retardo de 500 mS
38
}
Dr. Everardo Inzunza González
/* Dimmer1
Demonstrates the sending data from the computer to the Arduino board, in this case to control
the brightness of an LED. The data is sent in individual bytes, each of which ranges from 0 to
255.  Arduino reads these bytes and uses them to set the brightness of the LED.
The circuit:
LED attached in serie with 330 Ohms resistor from digital pin 9 to ground.
Serial connection to Processing, Max/MSP, or another serial application
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int ledPin = 9; // the pin that the LED is attached to (Salida PWM)
void setup()
{
// initialize the serial communication:
Serial.begin(9600);
// initialize the ledPin as an output:
pinMode(ledPin, OUTPUT);

lcd.begin(16, 2);
// Print a message to the LCD.

lcd.print("Codigo ASCII"); 39
}
Dr. Everardo Inzunza González
void loop() {
byte brightness;
char letra;

// check if data has been sent from the computer:


if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255):

lcd.clear();
lcd.print("Codigo ASCII");

brightness = Serial.read();
// set the brightness of the LED:
analogWrite(ledPin, brightness);
lcd.setCursor(0, 1);
lcd.print("Dec ");
lcd.print(brightness);

lcd.print(" Char = ");


letra=char(brightness);
lcd.print(letra);
}
} 40
Dr. Everardo Inzunza González
EL INTERNET DE LAS COSAS
CON MICROCONTROLADORES

41
Dr. Everardo Inzunza González
Concepto de “Internet of things”

“Things” consiste
de varios sensores
y actuadores que
interactúan con el
medio ambiente y el
i n t e r n e t ,
permitiendo a los
usuarios manipular
sus datos desde
distintas interfaces.

42
Dr. Everardo Inzunza González
Concepto de computación en la nube (Cloud computing)

Cloud Computing
Todos los tipos de
dispositivos de
computación y
comunicaciones son
c a p a c e s d e
interactuar con la
Nube y compartir los
mismos datos.

43
Dr. Everardo Inzunza González
Uniendo todo con un microcontrolador

44
Dr. Everardo Inzunza González
Módulos de comunicación

Ethernet Wi Fi Bluetooth

GPS

45
Monitoreo de sensores en internet

46
Dr. Everardo Inzunza González
Monitoreo de sensores en internet

47
Dr. Everardo Inzunza González
- PERIFÉRICOS DE
MICROCONTROLADORES

TECLADO MATRICIAL

Presenta: Dr. Everardo Inzunza González


TECLADO MATRICIAL
•  Un teclado matricial es un simple arreglo de
botones/switches conectados en filas y colúmnas.

De tal forma que se pueden leer varios botones con el
mínimo número de pines requeridos.

Un teclado matricial 4x4 solamente ocupa 4 líneas de
un puerto para las filas y otras 4 líneas para las
colúmnas, de este modo se pueden leer 16 teclas
uOlizando solamente 8 líneas de un microcontrolador.
TECLADO MATRICIAL (4X4)
TECLADO MATRICIAL (4X3)
DECODIFICADOR DEL TECLADO MATRICIAL
HEXADECIMAL
DECODIFICADOR DEL TECLADO MATRICIAL HEXADECIMAL MM74C922 y
MM74C923
DECODIFICADOR DEL TECLADO MATRICIAL HEXADECIMAL MM74C922 y
MM74C923
DECODIFICADOR DEL TECLADO MATRICIAL HEXADECIMAL
MM74C922 y MM74C923
DECODIFICADOR DEL TECLADO MATRICIAL HEXADECIMAL
MM74C922 y MM74C923
DECODIFICADOR DEL TECLADO MATRICIAL HEXADECIMAL
MM74C922 y MM74C923
Como saber cual tecla se presionó?
Tareas básicas a realizar en un sistema con teclado matricial
Uso del teclado con el microcontrolador Arduino

Ø En este caso, el microcontrolador puede


realizar la tarea de decodificación, es decir,
idenOficar cual tecla se presionó.

Ø En el caso de Arduino, nos vamos auxiliar de la


librería/biblioteca keypad.h para realizar la
tarea de decodificación.
Interconexión del microcontrolador con el
teclado matricial

Nota: Se recomienda dejar libres los pines de la


Comunicación serial/USB (0 y 1).
Ejemplo de configuración, programación y uso de
teclado matricial

Nota: Las teclas capturadas


están en código ASCII (Opo texto)
Ejemplo de configuración, programación y uso de
teclado matricial

Nota: Las teclas capturadas


están en código ASCII (Opo texto)
Pruebas de los ejemplos anteriores

Nota: Las teclas capturadas


están en código ASCII (Opo texto)

Es decir NO Oenen algún valor
Numérico de Opo entero, ni
flotante.
Ejemplo Verificación de contraseñas
•  Desarrolle un programa para que lea una contraseña, cuando
esta esa la correcta deberá encender el led del pin 13, de lo
contrario deberá permanecer apagado el led del pin 13.
Además cada tecla que sea presionada deberá ser enviada al
monitor serial para ser visualizada.


TAREA – Control de acceso
•  Desarrolle un programa para control de acceso mediante chapa eléctrica
con solenoide, de tal forma que el Arduino lea una clave de 6 dígitos,
cuando esta sea correcta deberá acOvar un solenoide durante 5 segundos,
para que permita el acceso de una persona, en caso contrario y después
de 3 intentos fallidos, deberá acOvar un buzzer como señal de alarma y
desplegar un mensaje de clave incorrecta en la LCD.

•  Al inicio de la ejecución del programa, en la LCD deberá aparecer un


mensaje solicitando la clave de acceso, cuando el usuario teclee la clave y
por seguridad (para evitar plagio de claves), deberán de aparecer
solamente asteriscos (*).
•  Nota: En este ejemplo no se requiere la comunicación con la PC.
MICROCONTROLADORES

SENSORES ULTRASÓNICOS

Presenta: Dr. Everardo Inzunza González


Ultrasonido
•  El ultrasonido son ondas mecánicas, es decir
no ionizantes, cuya frecuencia está por
encima de la capacidad de audición del oído
humano (aproximadamente 20 KHz).
¿Qué es un sensor ultrasónico?

•  Los sensores ultrasónicos miden la distancia mediante el uso


de ondas ultrasónicas.

•  El transductor emite una onda ultrasónica y recibe la onda


reflejada que retorna desde el objeto.

•  Los sensores ultrasónicos miden la distancia al objeto


contando el Fempo entre la emisión y la recepción.
Principio de medición

Transductor

Cálculo de la distancia
Donde:
1 L es la distancia
Dis tan cia L = tc t es el Fempo entre la emisión y recepción
2 c es la velocidad del sonido en el medio
(En el aire es 343.2 m/S)
Principio de medición de distancia por ultrasonido




Microcontrolador
Arduino



Esquema a bloques del medidor de distancias ultrasónico.



CaracterísKcas de la detección
[Objeto transparente detectable]
Dado que las ondas ultrasónicas pueden reflejarse en una
superficie de vidrio o líquido, y retornar al transductor,
incluso los objetos transparentes pueden ser detectados.

[Resistente a niebla y suciedad]
La detección no se ve afectada por la acumulación de polvo
o suciedad.

[Objetos de forma compleja detectables]
La detección de presencia es estable, incluso para objetos
tales como bandejas de malla o resortes.

SENSOR DISTANCIAS POR ULTRASONIDOS SRF04

- El SRF04 es un sensor de distancias por ultrasonidos capaz de detectar


objetos y calcular la distancia a la que se encuentra en un rango de 3 a 300 cm.

- El sensor funciona por ultrasonidos y conFene toda la electrónica encargada


de hacer la medición.

- Su uso es tan sencillo como enviar el pulso de arranque y medir la anchura


del pulso de retorno.

- De muy pequeño tamaño, SRF04 destaca por su bajo consumo, gran precisión
y bajo precio
CaracterísKcas técnicas y pines del SRF04
Rango efecKvo del SRF04

El Rango efec,vo del SRF04 es de unos 30º como puede verse en este diagrama.
Diagrama esquemáKco del SRF04
Ejemplo de código

Mide distancia con sensor ultrasónico y envía la medición al puerto serie

Descargar librería en: hXps://github.com/elrodri/Ultrasonic-HC-SR04/archive/master.zip


Ejemplo de código

Mide distancia con sensor ultrasónico y despliega la medición en LCD
Ejemplo de código

Obtener Kempo (en ms) que tarda el sonido en ir y volver.


MICROCONTROLADORES
SENSORES OPTO-ELECTRÓNICOS

Presenta: Dr. Everardo Inzunza González


Fotosensores acCvos

Este &po de sensores consta de un emisor de luz,


que normalmente es un LED/Laser y un receptor,
que suele ser un fotodiodo, fototransistor,
fototriac, etc.

La situación de ambos, define el &po de sensor, ya
sea reflexión o por barrera.
Aplicaciones de los sensores ópCcos
•  Detección de presencia de objetos.
•  Medición de distancias cortas.
•  Léctura de códigos de barra.
•  Escaneo opto-electrónico.
•  Disposi&vos de conmutación.
•  Discos óp&cos (CD, DVD, Blueray).
•  Encoder (Medición de velocidad en motores).
•  Automa&zación de procesos industriales
SENSOR CNY 70
•  Sensor óp&co reflexivo por infrarrojo con
salida a transistor, diferencía colores blanco y
negro.
CaracterísCcas eléctricas
CaracterísCcas eléctricas
Principio de operación
Principio de operación
Curvas I(V)
Diagramas Qpico de conexiones del CNY70
Diagramas Qpico de conexiones del CNY70

Al microcontrolador

Circuito con ajuste de disparo y salida con comparador de voltaje


Ejemplo del sensor CNY70 con Arduino
El sensor CNY70 puede u&lizarse con la entrada digital o
analógica del microcontrolador.


- Cuando el sensor está orientado hacia una superficie u
objeto de color negro éste absorbe gran parte de la luz
emiCda por el diodo, entonces el sensor enviará unnivel alto
(HIGH) al Arduino.

- Cuando el sensor se coloca frente a una superficie u objeto
de color blanco, gran parte de la luz emiCda por el diodo será
reflejada al fototransistor, entonces el sensor enviará un
nivel bajo (LOW) al Arduino.
Ejemplo del sensor CNY70 con Arduino
Desarolle un programa para leer la salida del sensor CNY70 conectada a la entrada A0
del microcontrolador Arduino, el resultado enviará al monitor serial de Arduino.
Ejercicio del sensor CNY70 con Arduino
Considere que un microcontrolador Arduino &ene conectados 3 sensores
optoelectrónicos CNY70 por sus pines digitales configurados como entradas, los
cuales le llamaremos sensor-izquierdo, sensor-central y sensor-derecho, esto debido
a la forma que están colocados en el chasis de un robot.

Además &ene conectado en sus pines digitales configurados como salida y mediante
una etapa de potencia, dos motores, a los cuales llamaremos motor-izquierdo y
motor-derecho, por la forma en que están colocados en el chasis de un robot.

Escriba un programa para Arduino, de tal forma que cuando el sensor-central
esté acCvo en bajo (mientras que los otros dos sensores estén en Alto) encienda
ambos motores (motor-derecho y motor-izquierdo).

Cuando el sensor-izquierdo esté acCvo en bajo (mientras sensor-central en alto y
derecho en Alto) deberá encender el motor-derecho.

Cuando el sensor-derecho esté acCvo en bajo (mientras sensor-central en alto y
izquierdo en Alto) deberá encender el motor-izquierdo.

Cuando los tres sensores se encuentren acCvos en bajo, el microcontrolador deberá
encender un buzzer de alarma y detener su marcha (apagar ambos motores).

Diagrama a bloques del ejercicio con 3 sensores CNY70 y
contro de dos motores con Arduino

Diagrama a bloques del ejemplo anterior con CNY70


Otros sensores opto-electrónicos
Pin out
Pin out
CaracterísCcas eléctricas
Opto-acopladores de ranura
Otros sensores opto-electrónicos
SENSOR DE RANURA GP1S094HCZ0F marca Sharp

CaracterísCcas:
o  Fotointerruptor de ranura ó herradura
o  Salida a fototransistor
o  Ancho de la ranura (Gap): 3 mm
o  Tipo transmisivo
o  Tamaño compacto
o  Pin de posicionamiento para prevenir
desalineaciones
o  Luz infrarroja
o  Corriente del LED en directo max: 50 mA
o  Voltaje inverso del LED max: 6 V
o  Voltaje colector-emisor max: 35 V
o  Corriente de colector max: 20 mA
o  Tiempo de respuesta: 50 μs _pico
SENSOR DE RANURA GP1S094HCZ0F marca Sharp

Aplicaciones:

•  Detección de presencia o ausencia de objetos.

•  Detección de posición.

•  Medición de revoluciones en motores


Tarea: Tacómetro ópCco
•  Desarrolle un prorgama para arduino de tal forma que pueda
medir la velocidad angular de un motor (rpm), el resultado lo
deberá desplegar en una LCD.

Esquema de medición con sensor óp&co y disco perforado.


Tacómetro ópCco con sensor de ranura

Esquema de medición con sensor óp&co de ranura y emplendo disco perforado.