Académique Documents
Professionnel Documents
Culture Documents
11686 MICROCONTROLADORES
y control.
Ø Circuitos lógicos
Ø Flip-Flops
Ø Diseño digital
Ø Manejo de memorias de estado sólido
Ø Microprocesadores (Teoría de operación y
programación)
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
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.
INTRODUCCIÓN A LOS
SISTEMAS DIGITALES
DIY PIC MCU Development Board Kit Update PIC16F877A PIC Development Board
PIC16F877 877A PIC16F Minimum System Board NEW
§ Microprocesador o CPU.
§ Memoria de solo lectura (ROM, EPROM, EEPROM o FLASH) para guardar el programa de
n Temporizadores,
Fabricante Modelos
HITACHI HD64180
TOSHIBA 68HC11
8. Otros materiales
2. La evolución del microprocesador
9. Empaquetado
3. Funcionamiento
• Prestaciones:
Su reducido tamaño y bajo costo permiten que se pueda incorporar
• Confiabilidad:
Al tener menos componentes, se disminuye el riesgo de fallas y
precisa menos calibraciones.
• Flexibilidad:
• Aplicaciones:
del diseñador...”
• 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
6- Compilar el programa.
SOFTWARE
Ø Editor
ü MPLAB
ü PROTEUS
Ø Ensamblador ü ICPROG
ü Compilador C CCS
Ø Simulador HARDWARE
Bus de direcciones
s
MEMORIA
Bus de datos
PROCESADOR RAM / ROM
R/W
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
Secadoras
T.V.
RELOJ GPS
T.V. PORTÁTIL
Brújulas digitales
Tablero de avión
Impresora
Copiadora FAX
Elaboró: Dr. Everardo Inzunza
González 45
MUCHAS GRACIAS!!!
ATTE.
DR. EVERARDO INZUNZA GONZÁLEZ
Email: einzunza@uabc.edu.mx
INGENIERIA EN ELECTRÓNICA
MICROCONTROLADORES
INTRODUCCIÓN A LOS
SISTEMAS DIGITALES
0
t
t
Ejemplo de una señal Digital
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).
• DIAGRAMA DE CONEXIONES
2
Ø Recursos Especiales de los Microcontroladores
• Timers o temporizadores
• Comparador analógico
• PWM o Modulador de anchura de pulso
• Protección de código
3
Ø RECURSOS ESPECIALES…
Ø Timers:
Ø Watchdog:
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.
5
Ø RECURSOS ESPECIALES…
6
Ø RECURSOS ESPECIALES…
7
Ø RECURSOS ESPECIALES…
u Convertidor A/D y D/A:
8
Ø RECURSOS ESPECIALES…
Ø PWM:
9
Ø Puertos de comunicación:
• USB (Universal Serial Bus): Moderno bus serie para los PC.
10
HERRAMIENTAS DE DESARROLLO
Ø 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
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
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
18
o RECURSOS FUNDAMENTALES
Ø Procesador de Arquitectura RISC (Reduced Instruction Set Computer).
Ø Juego de 35 instrucciones con 14 de bits de longitud.
20
ARQUITECTURA INTERNA DE LOS
MICROCONTROLADORES PIC
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.
24
25
26
Mapa de la
Memoria RAM
27
DESCRIPCION DE LOS REGISTROS
28
Ø REGISTRO PCL (Dirección 02)
29
Ø REGISTRO STATUS ( Dirección 03 )…
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
32
Ø REGISTRO FSR (Dirección 04) o registro de selección de registro.
33
• Cada bit del registro INTCON tiene un significado concreto que es el que
sigue:
• 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.
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.
38
Ø PUERTO B
• 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.
41
Ø TEMPORIZADOR
• El PIC 16F84 solamente contiene un temporizador. Genera una interrupción
cada vez que el temporizador se desborda de FF a 00.
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.
• 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.
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
47
Ø MEMORIA EEPROM DE DATOS
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.
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:
Registro EECON1
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
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.
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.
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.
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.
56
CONJUNTO DE INSTRUCCIONES DEL PIC 16C84
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
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
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
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
END
LIST P=16F84 ; Se indica tipo de procesador
RADIX HEX
INCLUDE P16F84.INC
ORG 0x00
goto INICIO
ORG 0x05
; movf PORTA,W
; addlw b'00000001'
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
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
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.
;===============================================================================================
; Encabezado
;================================================================================================
__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
;--------------------------------
;================================================================================================
; Fin del encabezado.
;================================================================================================
ENCENDIDO
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.
call DEMORA_MEDIO_SEG
call DEMORA_MEDIO_SEG
;---------------------------------------------------------------------------
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
Loop_externo
movlw d'250' ; Recarga el contador del loop interno.
movwf CONTA_L
decfsz CONTA_H, F
goto Loop_externo
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.
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
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.
; ===================================================================
; 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
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.
; ===================================================================
; 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
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
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
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
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
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
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
; ===================================================================
; 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
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
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
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.
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.
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
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
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
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
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
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
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
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
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
• Low-power consumption
12
Arquitectura interna del PIC 16F874/16F877
13
ORGANIZACION DE LA MEMORIA
*cuidando que no
sea menor a 1.6 us
ADCON1
CONFIGURAR
PUERTOS
movlw b'111111';
movwf TRISA;
clrf TRISB;
clrf TRISC;
conv
bcf PIR1,ADIF; apaga Band. Int. ADC
bsf ADCON0,GO; Inicia Conversión
movf ADRESL,w;
movwf dato;
movwf PORTB;
goto conv
INGENIERIA EN ELECTRÓNICA
MATERIA: MICROCONTROLADORES
! 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.
microcontrolador.
! Las líneas del BUS de datos son tri-estados y pasan al estado de alta impedancia
! Tiene una capacidad de 80 bytes, 40 por cada línea, de las cuales sólo 32 se
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).
! 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.
! 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).
! Entry Mode Set (0000 0 1 I/D S). Modo entrada. Establece las
características de escritura de los datos (Shift e Increment/Decrement):
! 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 S/C=0, El efecto del desplazamiento se aplica sólo sobre el cursor sin alterar
el contenido de la DDRAM.
! 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.
! 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.
INGENIERÍA EN ELECTRÓNICA
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.
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.
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.
Transmisión
TIPO De Bits Ventajas Desventajas
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
RS
232
“1”
Lógico
(-‐7V
a
-‐12V)
“0”
Lógico
(7V
a
12V)
MICROCONTROLADORES
diversas aplicaciones.
multidisciplinarios.
3
Dr. Everardo Inzunza González
CARACTERÍSTICAS ELÉCTRICAS
DE ARDUINO
4
Dr. Everardo Inzunza González
Características eléctricas ARDUINO
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
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
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() {
21
Dr. Everardo Inzunza González
Ejemplo No. 1 (Blink)
/* Blink
Turns on a LED for one second, then off for one
second, repeatedly.
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
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)
24
Dr. Everardo Inzunza González
Tabla de estados del semáfoto
#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
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;
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
*/
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
29
} Dr. Everardo Inzunza González
void loop() {
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
31
Dr. Everardo Inzunza González
Conexión eléctrica con LCD 16x2
32
Dr. Everardo Inzunza González
/*
LiquidCrystal Library - Hello World
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>
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.print(millis()/1000); 34
}
Dr. Everardo Inzunza González
/*
LiquidCrystal Library - Autoscroll
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);
}
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()
{
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;
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);
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
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.
SENSORES ULTRASÓNICOS
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
- 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
Al microcontrolador
• Detección de posición.