Micro-procesadores
Micro-controladores
Aplicaciones
Caractersticas
Familia
Estructura interna
Instrucciones
Programacin
Proyecto final
Microprocesadores
Curso terico prctico propuesta de criterio de evaluacin:
Un examen departamental (35%) y un parcial (20%) 55%
- Laboratorio con entrega personal de circuito con 30%
- Reporte de prcticas, participacin y Asistencia 15% (5% C/U)
- Calificacin final 100%
- PRACTICAS:
- 1.- suma. 2.-Uso de puertos
- 3.- puertos con complemento 4.- conteo
- 5.- parpadeo 6.- un poco de todo
- 7.- 7 segmentos 8, 9 y 10 proyecto
Para la teora:
Definiciones
Caractersticas (qu es)
En que se utiliza
Cmo se utiliza
Bus de control
Bus de datos
MICROPRO
CESADOR
Bus de direcciones
http://es.slideshare.net/andresmg/la-familia-de-microcontroladores-pic-
3361548
5. Recursos auxiliares:
Recursos auxiliares: segn las aplicaciones a las que orienta el fabricante cada
modelo de microcontrolador, incorpora una diversidad de complementos que
refuerzan la potencia y la flexibilidad del dispositivo. Las ms comunes son:
a) Circuito de reloj: encargado de generar los pulsos que sincronizan el
funcionamiento de todo el sistema.
b) Temporizadores: orientados a controlar tiempos.
Memoriade Memoria
Bus de control Bus de control
Instrucciones de
UCP
1K*14 Datos
512* 8
Bus de datos 8
Bus de instrucciones 14
El procesador de los modernos microprocesadores responde a la arquitectura
RISC (Computador de Juego de Instrucciones Reducido), que se caracteriza
por tener un repertorio de instrucciones mquina pequeo y simple, de forma
que la mayor parte de las instrucciones se ejecuten en un ciclo de instruccin.
Con el aumento del paralelismo para incrementar su eficiencia, consistente en
la segmentacin del procesador (pipe-line), descomponindolo en etapas
para poder procesar una instruccin diferente en cada una de ellas y trabajar
con varias a la vez.
2. OTP (programable una vez): se graba por parte del usuario slo una vez.
3. EEPROM la grabacin de hace igual a las OTP y EPROM, pero el borrado
es ms sencillo se puede borrar y regrabar electrnicamente.
Al reinicializarse el PIC todos los bits de los registros TRIS quedan a uno,
(automticamente quedan configuradas como entradas).
El puerto A posee 5 lneas RA0- RA4, y una de ellas soporta dos funciones
multiplexadas a (TOCKI que acta como lnea de E/S y como receptora de
impulsos externos para contar TMRO). Su capacidad es de una corriente
mxima absorbida de 80 mA y una corriente mxima suministrada: 50 mA
La lnea RB0/INT, adems de E/S acta como terminal para la peticin de una
interrupcin externa. A todas las lneas de esta puerta se las permite
conectar una resistencia pull-up, de elevado valor, con el positivo de la
alimentacin. (con el Reset todas se configuran como entradas y se
desactivan las pull-up). El puerto B tiene 8 lneas, RB0 RB7, tambin una
con funciones multiplexadas (la RB0/INT en la que se reciben impulsos
externos que provocan una interrupcin).
RB7 a RB4 (las de mas peso) pueden programarse para soportar una misin
especial. Se pueden programar para generar una interrupcin si alguna
entrada cambia de estado lgico. La PUERTA B puede absorber un mximo
de 150 mA y suministrar un total de 100 mA.
Configuracinbsica
+5V
R R R R R
1 RA2 RA1 18
2 RA3 RA0 17
3 RA4/TOCK OSC1 16 XTAL C
27 pf
+5V 330 100 4 MCLR/Vpp OSC2 15
C
Reset 5 Vss VDD 14 +5V
6 RBO/INT RB7 13
7 RB1 RB6 12
8 RB2 RB5 11
9 RB3 RB4 10
R 330 R 330
(
En la adaptacin de las terminales RA3 - RA0 a las seales internas del procesador.
Cuando se lee una lnea se recoge el nivel lgico que tiene en ese momento.
Las lneas cuando actan como salida estn latcheadas, implica sacar el nivel lgico que
se haya cargado por ltima vez en el registro PUERTA A.
La escritura de una puerta implica la operacin lectura/modificacin escritura (imagen 103)
WR PUERTA A Q P
LATCH DATO
RA3:RA0
D Q
WR TRIS A
N BUFFER
Q ENTRADA
LATCH TRIS TTL
Q D
RD
RD PUERTA A Q
Imagen 105 VDD
RBPU#
P (pull-up)
BUS DE DATOS D Q
LACH
WR ESCRITURA (RB7:RB4)
DATO
PUERTA A
D Q
LACH
WR ESCRITURA TRIS B
TIRS A
BUFFR
ENTRADA
RD LECTURA TRIS A TTL
D Q
RD LECTURA TRIS B
EN
D Q
DESDE OTRAS
TERMINALES RD LECTURA
RB7:RB4
EN PERTA B
Programacin de micro-controladores: la utilizacin de los lenguajes ms
cercanos a la mquina (de bajo nivel) representan un considerable ahorro de
cdigo en la confeccin de los programas, lo que es muy importante dado la
estricta limitacin de la capacidad de la memoria de instrucciones. Los
programas bien realizados en lenguaje ensamblador optimizan el tamao de
la memoria que ocupan; adems, de su rpida ejecucin. Colocando a los
Arduino como la competencia de microchip. (9)
PIC16C56 1K 25 20 12 TRMO+WDT 18
PIC16C57 2K 72 20 20 TRMO+WDT 28
PIC16C57B 2K 72 20 20 TRMO+WDT 28
PIC16CR58A 2K 73 20 12 TRMO+WDT 18
modelo Memoria Memoria Registros tempori CAP PWM CAD interrup Multipli termina
programa datos especfic ciones cador les
os zadores 10 E/S
hardwa
bits
re
PIC17C42A 2Kx16 232 48 4+WDT 2 2 11 33 8x8 40/44
De la serie enana
El PIC16F84, pertenece a la familia de la gama media y dentro de ella es
uno de los ms pequeos, slo tiene 18 terminales; y es de los de menos
recursos. El PIC16X84 en sus dos versiones C y F, por que cumple con los
requisitos esenciales para ensear a manejar los micro-controladores y
comenzar a disear proyectos.
Diagrama de conexionado
El F Tiene una memoria de 1K EEPROM
(capaz de soportar 1 000 000 ciclos de 1 RA2 RA1 18
escritura - borrado) tipo FLASH (con 2 RA3 RA0 17
slo 1 000 ciclos) con palabras de 14 bits
3 RA4/TOCK OSC1 16
cada una. Dispone de 64 bytes de
EEPROM como memoria de datos auxiliar 4 MCLR/Vpp OSC2 15
y opcional. 5 Vss VDD 14
La programacin se simplifica en el proceso 6 RBO/INT RB7 13
de escritura y borrado que se realiza en
7 RB1 RB6 12
serie, en las terminales RB6 para el CLK y
RB7 para los datos. 8 RB2 RB5 11
9 RB3 RB4 10
Presentacin de los PIC16X84
Memoria de programa: 1K*14,EEPROM C y FLAS F
Memoria de datos RAM: 36 bytes C y 68 bytes F
Memoria de datos EEPROM: 64 bytes para ambos modelos
Pila (Stack): de 8 niveles
Interrupciones: 4 tipos diferentes
Juego de instrucciones: 35
Encapsulado: plstico DIP de 18 terminales
Frecuencia de trabajo: 10 MHz. mxima
Temporizadores slo uno (TMRO) y el pero guardin (WDT)
Lneas de E/S digitales : 13 (puerta A 5 y 8 puerta B)
Corriente mxima absorbida: 80 mA puerta A y 150 mA puerta B
Corriente mxima suministrada: 50 mA puerta A y 100 mA puerta B
Corriente mxima absorbida mxima por lnea: 20 mA
Voltaje de alimentacin (VDD): de 2 a 6VCD
Voltaje de grabacin (Vpp): de 12 a 14 VCD
Requerimientos bsicos para los PIC
Reinicializacin o RESET: cuando se aplica un nivel bajo (dispone de un filtro
interno para eliminar los ruidos y los impulsos muy pequeos) en la terminal MCLR# el
micro-controlador reinicializa su estado. Se producen dos acciones importantes:
Bsqueda3 Ejecucin3
Bsqueda4
1 instruccin MOVLW F5h
Bs.1salto Eje1salto
2 instruccin MOVWF PA
3 instruccin CALL SAL
4 instruccin MOVLW F6h
Eje: un PIC que funciona a 4 MHZ ejecuta un programa de 1000 instrucciones, de las cuales el 25%
son de salto. Calcular el tiempo que tarda en ejecutarlo.
T ciclo instruccin = 4 / T reloj = 4 * 250 ns = 1 000 ns = 1 us
T programa = 750 * 1 + 250 * 2 = 1 250 us
Tipos de osciladores: Los PIC admiten cuatro tipos de osciladores externos
para aplicarles la frecuencia de funcionamiento. El tipo empleado debe especificarse
en dos bits (FOSC1, FOSC0) de la palabra de configuracin.
Oscilador tipo RC: se trata de un oscilador de bajo costo formado por un circuito
con una resistencia y un condensador. Proporciona una estabilidad mediocre de la
frecuencia, cuyo valor depende de los valores de los elementos de la red. (imagen 73)
Ejemplo: Un PIC 16F84 funcionando con una red R-C de 10K y 220 pF, est ejecutando
un programa de 500 instrucciones de las cuales 20% son de salto. Cuanto tarda en
ejecutar el programa?
Si trabaja a 80 KHz,
+VDD
Rext. (5k< Rext<100k)
T osc = (1s / 80* 10 ) = 12.5 s,
3
PIC16X84
Fosc Rext Cext
OSC2/CLKOUT
625KHz 10k 20pF Fosc/4
80KHz 10k 220pF
C1 XTAL SLEEP
RF A LA LOGICA
C2 INTERNA
R
En el interior del procesador:
En el PIC 16F84 la longitud de los datos es de un byte, mientras que la de las
instrucciones es de 14 bits. El manejo intensivo de los bancos de registros
(activos en la ejecucin de instrucciones).
MEMORIA DE PROGRAMA: la
arquitectura de los PIC puede 12 PC 0
contener 8 192 instrucciones (de
14 bits cada una).
NIVEL 1
Este mapa se divide en pginas de VECTOR DE
2 048 posiciones (para direccionar INTERUP.
8k posiciones se necesitan 13 bits, 0004 H
que es la longitud que tiene el PC).
La aportacin de este PIC es la NIVEL 8
utilizacin de una memoria de
programa tipo EEPROM 03FFH
0400 H
El contador del programa y la NO IMPLEMENTADO
pila: desde 0000 H a la 03FF H
(1024posiciones). En e PC se 1FFF H
ignoran los tres bits de mas peso.
Memoria de datos RAM: disponen de 68 registros de propsito general (en
las direcciones 0x0C y la 0x4f Hex). Y en su organizacin dispone de dos
zonas diferentes:
1. rea de RAM esttica (SRAM), donde reside el banco de registros
especficos (SFR con 24 posiciones de un byte) y el banco de registro de
propsito general (GPR con 36 posiciones).
Registros de 00
01
INDF
TRMO
INDF
OPTION
80
81
propsito 02 PCL PCL 82
03 ESTADO ESTADO 83
especial: 04 FSR FSR 84
08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 8C
REGISTROS
GPR
PROPSITO
GENERAL
4F CF
MEMORIA DE DATOS
Register of 00
01
INDF
TRMO
INDF
OPTION
80
81
Function 02 PCL PCL 82
03 STATUS STATUS 83
Special: 04 FSR FSR 84
08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 8C
REGISTROS
GPR
PROPSITO
GENERAL
4F CF
Registro ESTADO: ocupa la direccin tres (del banco 0 y 1) de la memoria de datos
RAM. Sus bits tienen tres misiones:
1a. Se encarga de avisar las incidencias del resultado de la ALU (C, DC, Z(cero))
2a. Indica el estado de Reset (TO# y PD#)
3a. Seleccionan el banco a acceder en la memoria de datos (IRP, RP0, RP1)
7 ESTADO 0
RP1-RP0: Seleccin del banco direccionamiento directo: nicamente emplea el bit RP0,
1: se accede al banco 1
0: se accede al banco 0 (despus de un reset RP0 = 0)
IPR: seleccin del banco en direccionamiento indirecto: este bit junto con el de mas peso
del FSR sirven para determinar el banco de la memoria de datos seleccionado en el
modo de direccionamiento indirecto.
La palabra de configuracin: se trata de una posicin reservada de la memoria del
programa (situada en la direccin 2007H y accesible slo durante la grabacin). Al
escribirse el programa de la aplicacin es necesario grabar el contenido de esta
posicin de acuerdo con las caractersticas del sistema.
CP CP CP CP CP CP CP CP CP CP PWRTE WDTE FOS1 FOS0
13 0
CP: bits de proteccin de la memoria de cdigo
1: No protegida.
0: Protegida (no se puede leer evitando copias, ni sobre escribir. Y si se modifica CP 0
a 1, se borra completamente la EEPROM).
SFR SFR
0BH
7 0CH MAPEADO 128
DIRECIN DEL BANCO GPR ENEL
Bytes
BANCO0
2FH
30H
7FH
Direccionamiento directo: El operando que utiliza la instruccin en curso se
referencia mediante su direccin, que se incluye en su cdigo OP de la misma
(los 7 bits de menos peso), el banco a acceder lo determinan los bits RP0 y RP1
(del registro ESTADO). En el 16F84 se usa el bit de RP0 implementados en dos
bancos.
7 5 ESTADO 0 13 CODIGO OP INSTRUCCIN 6 0
RP0
30H
NO
IMPLEMENTADO
7FH
Direccionamiento indirecto: se usa cuando en una interrupcin se utiliza
como operando el registro INDF (en la direccin 0 de ambos bancos). En
realidad ste registro no esta implementado fsicamente y cuando se le hace
referencia, se accede a la direccin de un banco especificada en los 7 bits
de menos peso de FSR. El banco a acceder se selecciona con el bit de mas
peso de FSR junto al bit e menos peso de IPR, mientras los 7 bits de
menos peso de FSR apuntan a la posicin (IRP =0 siempre)
ESTADO 7 6 FSR 0
IPR
SELECCIN BANCO
2 7
SELECCIN
DIRECCION
La ALU efecta sus operaciones lgico
INDIRECTO
aritmticas con dos operandos, uno que
recibe desde el registro W (work), que REGISTRO DE
INSTRUCCIN
hace las veces de acumulador en los TRMO
TEMPORIZADOR OSCILADOR
PERRO GUARDIAN Y
(WATCHDOG TIMER) WDT CONTROL
CLKOUT
FRECUENCIA INTERNA
6
OPTION
REGISTRO OPTION
TEMPORIZADOR 8
PRINCIPAL
TMRO 8
BUS DE DATOS
DESDE W
IMPULSOS DE RELOJ
PARA TMRO
DIVISOR DE FRECUENCIA
MPX3
CLK
MPX4
PERRO PS2-PS0
GUARDIAN AL TMRO (MPX2)
WDT
WDTE
(PALABRA DE MPX5
CONFIGURACION
PSA
DESBORDAMIENTO WDT
(RESET)
El registro OPTION su misin principal es gobernar el TMRO y el divisor de
frecuencia (ocupa la posicin 81H de la memoria de datos).
El bit 7 RBPU# (RB Pull-Up) activa = 0, y desactiva = 1, las resistencia del puerto B en
las lneas pueden conectarse opcionalmente. (99)
PS2:PS0valoresconelqueactadefrecuencia
PS2 PS1 PS0 DivisindelTMR0 DivisindelWDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
DistribucinyasignacindelosbitsdelregistroOPTION
PSA:Asignacindeldivisordefrecuencia
1= ElDivisordeFrecuenciaseleasignaalWDT
0= ElDivisordeFrecuenciaseleasignaalTMRO
TOSE:TipodeflancoenTOCK1
1= IncrementodeTMROcadaflancodescendente
0= IncrementodeTMROcadaflancoascendente
TOCS:TipodeRelojparaelTMRO
1= PulsosintroducidosatravsdeTOCK1(contador)
0= PulsosderelojinternoFOSC/4(temporizador)
INTEDG:Flancoactivointerrupcinexterna
1= Flancoascendente
0= Flancodescendente
RBPU#:ResistenciaPullUpPuertaB
1= Desactivadas
0= Activadas
EL PAPEL DE LOS TEMPORIZADORES: Los PIC son un computador integral rpido y
potente, en l se incluye un temporizador (para controlar los tiempos), con un sistema de
interrupciones capaz de detectar anomalas (o sucesos especiales), en sistemas de
seguridad, en modo de funcionamiento de bajo consumo y recursos auxiliares.
El funcionamiento del TMRO con el esquema general, con el bloque que retrasa
2 ciclos el contaje para sincronizar el momento de incremento producido por la
seal aplicada en TOCKI (impulsos externos ). Cuando se escribe TMRO se
retrasa 2 ciclos su re incremento y se pone a 0 el divisor de frecuencia. (imagen 97)
El perro guardin (WDT) se trata de un contador interno de 8 bits que
origina un Reset cuando se desborda, (es independiente del TMRO). su control
de tiempos y esta basado en una red R-C. su actuacin es opcional y puede
bloquearse para que no funcione (el bit WDTE de la palabra de
configuracin).
Para evitar que se desborde hay que refrescarle previamente (se pone a cero
mediante clrwdt y sleep), al desbordar WDT el bit TO# = 0 del registro
ESTADO.
GPR REGISTROS
PROPSITO
GENERAL
4F CF
EECON1 -- -- -- EEIF WRERR WREN WR RD
En el registro EEDATA (en la direccin 8 del banco 0), se depositan los datos que se leen o
se escriben.
El registro EECON1 (en la direccin 8H del banco1), tiene misin de control en las
operaciones de la EEPROM, con la siguiente distribucin:
GPR REGISTROS
PROPSITO
GENERAL
4F CF
4F
interrupcin
Cuando ocurre cualquiera de las 4
sucesos indicados se origina una
PC-Pila,GIE =0
peticin de interrupcin, que si se
acepta y se atiende comienza
PC=0004
depositando el valor del PC actual en la
Pila, poniendo el GIE =0 (Global
Interrupt Enable) y cargando en el PC RSI
el valor 0004H, (que es el vector de
interrupcin donde se desva el flujo de Se almacenan los
control). Donde cada fuente de registros a modificar
interrupcin dispone de un sealizador
Se determina la
flag (que se pone automticamente a
Causa de la interrupcin
1 cuando se produce) adems de otro
bit de permiso, que segn su valor Salto a la rutina de
permite o prohbe la realizacin de una Servicio correspondiente
interrupcin.
Se restauran los valores
De los registro almacenados
Se borra el sealizador
Se borra el sealizador De la interrupcin
De la interrupcin
Retorno PC-Pila
GIE = 1
El registro de Control de Interrupciones INTCON: La mayor parte de los
sealizadores y bits de permiso de las fuentes de interrupcin de los PIC16F8X estn
implementados sobre los bits del registro INTCON (en la direccin 0BH del banco. 0,
1).
INTCON
GIE Permiso Global de Interrupciones:
1: Permite la ejecucin de todas las interrupciones, adems del permiso individual
0: Prohbe las interrupciones
Causas de interrupcin:
1a. Activacin de la terminal de control RBO/INT
2a. Desbordamiento del temporizador del TMRO
3a. Cambio de estado en una de (RB7- RB4) de la puerta B
4a. Finalizacin de la escritura en la EEPROM de datos
Interrupcin externa INT: Esta fuente de interrupcin es sumamente importante para
atender acontecimientos externos en tiempo real. Cuando ocurre se hace una peticin
de interrupcin, y entonces de manera automtica, el bit INTF= 1 (si el bit de permiso
INTE = 1) se autoriza el desarrollo de la interrupcin (seleccionando el flanco activo
en INTEG del registro OPTION). El procesador explora el sealizador (INTF) al final
del primer ciclo de reloj de cada ciclo de interrupcin.
Interrupcin por desbordamiento del TMRO: Cuando se desborda (y pasa del valor
FFH a 00H), el sealizador TOIF se pone a uno automticamente. GIE = TOIE =
TMRO = 1, se produce una interrupcin. Si no se recarga el TMRO cuando se
desborda, sigue contando. Y en cualquier momento se puede leer y escribir este
registro, pero cada ves que se escribe se pierden dos ciclos de reloj para la
sincronizacin.
Interrupcin por cambio de estado en las lneas RB7:RB4 del puerto B: esta
interrupcin esta diseada especficamente para detectar la pulsacin de una tecla
correspondiente a un teclado matricial, que explora las 4 lneas de E/S.
Interrupcin por finalizacin de escritura en la EEPROM de datos: su tiempo tpico es
de 10 ms, para asegurarse de que se ha completado la escritura y puede
continuarse con el flujo de control del programa, cuando los bits de autorizacin lo
permiten. Con el uso del registro no real EECON2, en el que se graban dos valores
(55H y AAH). Durante la escritura este registro debe prohibirse la aceptacin de
interrupciones para salvaguardar la operacin de escritura (el mdulo se pone GIE
=0).
Los bits TO# (TO# =0 cuando se desborda el WDT), PD# se emplea para
conocer la causa del Reset que despierta al sistema (PD# = 0 cuando se
ejecuta la instruccin SLEEP).
Programador
1 20 1 18 1 28 1 40
2 19 2 17 2 27 2 39
3 18 3 16 3 26 3 38
4 17 4 15 4 25
5 16 5 14 4 37
5 24 5 36
6 15 6 13
7 14 7 12
6 22 6 35
8 13 8 11 7 21 7 34
9 12 9 10 8 20 8 33
10 11 9 19 9 32
10 18 10 31
11 17 11 30
12 16 12 29
13 15 13 28
14 14
Tableta de prueba
Repertorio de instrucciones: El repertorio RISC, como significa Computador de Juego
de Instrucciones Reducido y consta de 35 instrucciones, y posee las siguientes
caractersticas. (125)
1a. Las instrucciones son simples y rpidas, permite que sean ejecutadas en un ciclo de
instruccin y las de salto tardan el doble.
2a. Las instrucciones son ortogonales, apenas tienen restricciones en el uso de operandos
(cualquier instruccin puede usar cualquier operando).
3a. La longitud de las instrucciones y los datos es constante, (todas las instrucciones
tienen 14 bits, y todos los datos un byte).
Tipos de formato:
-Campo de cdigo OP: los bits de este campo sirven para definir la operacin que realiza la
instruccin.
-Campo de los operandos fuente (f) y destino (d): definen los registros que actan
como operandos en la instruccin. (referencan la direccin que ocupa en la memoria)
-Campo de operando inmediato o literal (k): contiene el valor del operando inmediato
-Campo de referencia a un bit: (con 3 bits) indica la posicin de un bit concreto dentro
del registro de 8 bits.
-Campo de la direccin del salto: CALL y GOTO contiene la direccin de la siguiente
instruccin que hay que ejecutar.
Instrucciones que manejan registros: responde a la sintaxis nemnico f y d (de la
memoria de datos 8 bits). El registro f viene referenciado por la direccin de 7 bits
que ocupo, mientras que para el destino slo por uno, que si vale 0 es el W y si vale 1
es el fuente.(127)
Instrucciones que manejan bits: slo con dos instrucciones una de ellas se pone a
1 (bsf) cualquier bit de un registro, mientras que la otra pone a 0 (bcf). (128)
R R R R R
1 RA2 RA1 18
2 RA3 RA0 17
3 RA4/TOCK OSC1 16 XTAL C
27 pf
+5V 330 100 4 MCLR/Vpp OSC2 15
C
Reset 5 Vss VDD 14 +5V
6 RBO/INT RB7 13
7 RB1 RB6 12
8 RB2 RB5 11
9 RB3 RB4 10
R 330 R 330
Temporizadores para PICs: Rutina para 500 ms
16 15 14 13 12 11 10 9
VCCfgabcde 7 6
Outputs A
BCD A 7 SEGMENTOS DECODIFICADOR/ 8 5
DRIVER ACTIVO EN BAJO 74LS47 R F B
BC lamp outputinputDA 330 9
inputinputTest RBRB inputinput GND
1 2 3 4 5 6 7 8 4
G
3
E C
2
QB QC QD QA 10 D 1
+
1. D
DISPLAY 2. PUNTO
ANODO COMN 3. C
DA04 4. G
5. B
6. Comun (+)
7. A
8. F
9. Comn (+)
10. E
16 15 14 13 12 11 10 9
VCCfgabcde 10 9 8 7 6 1. E
Outputs 2. D
+ BCDAA77SEGMENTOS
BCD SEGMENTOSDECODIFICADOR/ DECODIFICADOR/
a 3. Comn (+)
DRIVERACTIVO
DRIVER ACTIVOEN ENBAJOBAJO74LS47 74LS47 4. C
f b
BC lamp outputinputDA 5. Punto
inputinputTest RBRB inputinput GND
1 2 3 4 5 6 7 8 g 6. B
c 7. A
e 8. Comn (+)
9. F
d
QB QC QD QA 10. g
1 2 3 4 5
DISPLAY
ANODO COMN R
DA09 330
+
Programa que despliega un digito en un display de 7 segmentos en el puerto B segn
se active el dato en el puerto A. Recuerde que dependiendo del display (nodo o
ctodo comn) se utilizan ceros o unos respectivamente en trminos digitales.
Adems, debe coincidir la asignacin de los pines del PIC (puerto B) con el programa,
El cual considera: RB0=a, RB1=b, RB2=c, RB3=d, RB4=e, RB5=f, RB6=g Y RB7= punto
el cual indica que la cantidad es mayor que 10.
(coloque una resistencia a cada segmento)
; programa que suma dos valores y guarda el resultado /*programa en C de la suma de dos operandos */
;en ensamblador
LIST P=16584A
INCLUDE <P16F84A.INC> #DEVICE P16F84A /*micro a utilizar /*
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF # INCLUDE <16F84A.H> /*librera a utilizar */
OPERANDO1 EQU 0X0C
void main (void)
OPERANDO2 EQU 0X0D {
RESULTADO EQU 0X0E int*p_ op1, op2, p_result; /*declaracin de los */
ORG 0
/*punteros a utilizar */
MOVLW 05 p_op1 = 0x0c; /*asignacin de di- */
MOVWF OPERANDO1 p_op2 = 0x0d; /*recciones a los */
MOVLW 02
MOVWF OPERANDO2
p_result = 0x0e; /* operandos */
MOVFW OPERANDO1
ADDWF OPERANDO2, 0 *p_op1 =5; /*se carga un cinco*/
MOVWF RESULTADO
END
*p_op2 = 2; /*se carga un dos */
*p_result = *p_op1 + *op2; /*se hace la suma*/
} /*comando de fin de programa*/
; programa que lee el puerto A y lo muestra en el puerto B /*programa en C que lee en el puerto A y mostra en el
;en ensamblador
LIST P=16584A
puerto B */
INCLUDE <P16F84A.INC>
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF #DEVICE P16F84A /*micro a utilizar /*
RADIX HEX
# INCLUDE <16F84A.H> /*librera a utilizar */
OTRA OPCIN
#bytepuertaA=05 /*posicin de puertoA */
BSF STATE, RP0 BSF 0X03,5 #bytepuertaB=06 /*posicin de puertoB*/
MOVLW 0XFF MOVLW 0X0FF
MOVWF PORTA MOVWF 0X05
MOVLW 0X00
MOVLW 0X00 void main (void)
MOVWF 0X06
MOVWF PORTB BCF 0X03,5 {
BCF STATE, RP0 int valor; /*valor temporal*/
ORG 0
ORG 0
MOVF 0X05, 0 set_tris_A (0xff); /*configura al puerto A como entrada*/
MOVF PORTA, 0
MOVWF 0X06
MOVWF PORTB INICIO GOTO INICIO set_tris_B (0x00); /*configura al puerto B como entrada*/
INICIO GOTO INICIO
do {
END END
valor = puertaA; /* lee el puerto A */
puertaB = valor; /* resultado pasa al puerto B*/
} while (TRUE); /* bucle infinito */
} /*comando de fin de programa*/
; programa que lee el puerto A le suma cuatro y lo muestra /*programa en C de la suma de cuatro que lee en el puerto
;en el puerto B en ensamblador
A y mostrarlo en el puerto B */
LIST P=16584A
#DEVICE P16F84A /*micro a utilizar /*
INCLUDE <P16F84A.INC>
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF # INCLUDE <16F84A.H> /*librera a utilizar */
#bytepuertaA=05 /*posicin de puerto A */
RADIX HEX OTRA OPCIN #bytepuertaB=06 /*posicin de puerto B*/
BSF STATE, RP0 BSF 0X03,5
MOVLW 0XFF MOVLW 0X0FF void main (void)
MOVWF PORTA MOVWF 0X05
MOVLW 0X00 {
MOVLW 0X00
MOVWF 0X06 int valor; /*valor temporal*/
MOVWF PORTB BCF 0X03,5
BCF STATE, RP0
ORG 0 set_tris_A (0xff); /*configura al puerto A como entrada*/
ORG 0 set_tris_B (0x00); /*configura al puerto B como entrada*/
INICIO MOVF 0X05, 0
INICIO MOVF PORTA, 0
ADDLW 0X04 do {
ADDLW 0X04, 0 MOVWF 0X06
MOVWF PORTB GOTO INICIO valor = puertaA; /* lee el puerto A */
GOTO INICIO valor += 4; /*incrementa el valor en 4*/
END END
puertaB = valor; /* resultado pasa al puerto B*/
} while (TRUE); /* bucle infinito */
} /*comando de fin de programa*/
; programa que cuenta ascendente hasta 5f y se reinicia /*programa en C cuenta ascendente hasta 5f */
; en ensamblador
LIST P=16584A
INCLUDE <P16F84A.INC> #DEVICE P16F84A /*micro a utilizar /*
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF # INCLUDE <16F84A.H> /*librera a utilizar */
RADIX HEX
#use delay (4000000) /*especifica clk 4MHz*/
CUENTA EQU 0X0C #bytepuertaB=06 /*posicin de puerto B*/
#byteconta=0x0c /*posicin de conta */
BSF STATE, RP0
CLRF PORTB
BCF STATE, RP0 void main (void)
{
ORG 0
GOTO INICIO
ORG 5
set_tris_B (0x00); /*configura al puerto B como entrada*/
Utilizando libreras con funciones de uso comn, de modo que realiza una temporizacin
como una directiva. #use delay (clock=velocidad_en hercios) y luego emplear las
funciones delay_ms, delay_us o delay_cycles segn convenga.
}
/*programa en C rutina de desplazamiento de*/ Bit_set (puertaB,6) /* activa el sptimo bit a uno*/
/*izquierda a derecha y viceversa*/ Delay_us (1000000); /* genera retardo de un segundo*/
#DEVICE P16F84A /*micro a utilizar /* Bit_set (puertaB,7) /* activa el octavo bit a uno*/
# INCLUDE <16F84A.H> /*librera a utilizar */
#use delay (4000000) /*especifica clk 4MHz*/ Dos
#bytepuertaA=05 /*posicin de puerto A*/ Delay_us (1000000); /* genera retardo de un segundo*/
#bytepuertaB=06 /*posicin de puerto B*/ Bit_set (puertaB,7) /* activa el octavo bit a uno*/
void main (void) Delay_us (1000000); /* genera retardo de un segundo*/
{ Bit_set (puertaB,6) /* activa el sptimo bit a uno*/
set_tris_A (0xff); /*configura al puerto A como entrada*/ Delay_us (1000000); /* genera retardo de un segundo*/
set_tris_B (0x00); /*configura al puerto B como salida*/ Bit_set (puertaB,5) /* activa el sexto bit a uno*/
portB = 0; Delay_us (1000000); /* genera retardo de un segundo*/
do { Bit_set (puertaB,4) /* activa el quinto bit a uno*/
Uno = bit_test = 0(portA,0); Delay_us (1000000); /* genera retardo de un segundo*/
Dos = bit_test = 1(portA,0); Bit_set (puertaB,3) /* activa el cuarto bit a uno*/
Uno Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,0) /* activa el primer bit a uno*/ Bit_set (puertaB,2) /* activa el tercer bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/ Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,1) /* activa el segundo bit a uno*/ Bit_set (puertaB,1) /* activa el segundo bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/ Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,2) /* activa el tercer bit a uno*/ Bit_set (puertaB,0) /* activa el primero bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/ Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,3) /* activa el cuarto bit a uno*/ inicio
Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,4) /* activa el quinto bit a uno*/ }
Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,5) /* activa el sexto bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/
; programa que despliega en un display de 7 segmentos en el
;puerto B segn lo seleccione en el puerto A en ensamblador SIGUE8 MOVLW 0X08
LIST P=16584A SIGUE2 MOVLW 0X02
SUBLW VALOR,0
INCLUDE <P16F84A.INC> SUBLW VALOR,0
BTFSC STATE,2
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF BTFSC STATE,2
GOTO SIGUE7
VALOR EQU 0X0C GOTO SIGUE1
GOTO OCHO
BSF STATE, RP0 GOTO DOS
SIGUE7 MOVLW 0X07
CLRF PORTB SIGUE13 MOVLW 0X0D SIGUE1 MOVLW 0X01
SUBLW VALOR,0
MOVLW 0X0F SUBLW VALOR,0 SUBLW VALOR,0
BTFSC STATE,2
MOVWF PORTA BTFSC STATE,2 BTFSC STATE,2
GOTO SIGUE6
BCF STATE, RP0 GOTO SIGUE12 GOTO SIGUE
GOTO SIETE
ORG 0 GOTO TRECE GOTO UNO
SIGUE6 MOVLW 0X06
CLRF PORTB SIGUE12 MOVLW 0X0C SIGUE MOVLW 0X00
SUBLW VALOR,0
SUBLW VALOR,0 MOVWF PORTB
BTFSC STATE,2
INICIO MOVF PORTA,0 BTFSC STATE,2 CALL RETARDO
GOTO SIGUE5
MOVWF VALOR GOTO SIGUE11 GOTO INICIO
GOTO SIES
COMF VALOR,F GOTO DOCE UNO MOVLW 0X01
SIGUE5 MOVLW 0X05
MOVLW 0X1F SIGUE11 MOVLW 0X0B MOVWF PORTB
SUBLW VALOR,0
SUBLW VALOR,0 SUBLW VALOR,0 CALL RETARDO
BTFSC STATE,2
BTFSC STATE,2 BTFSC STATE,2 GOTO INICIO
GOTO SIGUE4
GOTO SIGUE15 GOTO SIGUE10 DOS MOVLW 0X02
GOTO CINCO
GOTO DIECISEIS GOTO ONCE MOVLW PORTB
SIGUE4 MOVLW 0X04
SIGUE15 MOVLW 0X0F SIGUE10 MOVLW 0X0A CALL RETARDO
SUBLW VALOR,0
SUBLW VALOR,0 SUBLW VALOR,0 GOTO INICIO
BTFSC STATE,2
BTFSC STATE,2 BTFSC STATE,2 TRES MOVLW 0X03
GOTO SIGUE3
GOTO SIGUE14 GOTO SIGUE9 MOVLW PORTB
GOTO CUATRO
GOTO QUINCE GOTO DIEZ CALL RETARDO
SIGUE3 MOVLW 0X03
SIGUE14 MOVLW 0X0E SIGUE9 MOVLW 0X09
SUBLW VALOR,0
SUBLW VALOR,0 SUBLW VALOR,0
BTFSC STATE,2
BTFSC STATE,2 BTFSC STATE,2
GOTO SIGUE2
GOTO SIGUE13 GOTO SIGUE8 GOTO INICIO
GOTO TRES
GOTO CATORCE GOTO NUEVE CALL RETARDO
RETURN
END
/*programa en C que despliega en display de 7 segmentos*/
/*del puerto B, seleccionado el valor en el puerto A*/
Identificacin de pines.
Identificacin de caracteres predefinidos (data sheet) a partir del cdigo correspondiente.
Identificar los comandos de control.
Los datos predefinidos en una memoria no voltil llamada CGROM se almacenan 192
caracteres visibles a partir de un cdigo binario de 8 bits. La DDRAM (Data Dispaly
RAM) memoria donde almacena caracteres que se pueden representar (80 bytes)
Modos de funcionamiento:
Modo comando: cuando por el bus de datos el LCD recibe instrucciones como Borrar
Display, Mover Cursor, Desplazar a la Izquierda, etc. RS=0 y R/W=0 esto tarda 1.64
ms.
Modo Carcter o Dato: cuando por el bus de datos el LCD recibe un carcter a escribir
en la DDRAM en ACII. RS=1 y R/W=0. esto tarda 40 s.
Modo lectura del Busy Flag (o LCD ocupada): en el bit 7del bus de datos el LCD informa
al microcontrolador que est ocupada, con RS=0 y R/W=1, y hay que esperar.
;LibreradesubrutinasparaelmanejodemensajesavisualizarenunvisualizadorLCD.
CBLOCK ;indicaquecualquierdireccinseasignaautomticamente
LCD_ApuntaCaracter ;Indicalaposicindelcarcteravisualizaraliniciodetodos
;(posicindelaetiqueta"Mensajes").
LCD_ValorCaracter ;CdigoASCIIdelcarctera
ENDC ;visualizar.
;Losmensajessesituandentrodelas256primerasposicionesdela
;memoriadeprograma,esdecir,nopuedensuperarladireccin0FFh.
;Subrutina"LCD_Mensaje,VisualizaelmensajeapuntadoporelregistroW.
;Losmensajesdebenlocalizarsedentrodeunazonaencabezadaporlaetiqueta
"Mensajes"yque;tengalasiguienteestructura:
;Mensajes ;Etiquetaobligatoria!
;addwf PCL,F ;Mensaje0yposicininicialdelmensaje.
;DT"....",0x00 ;Mensajeterminadoen0x00.
;Mensaje1
; ...
; ...
;FinMensajes
;Lallamadaaestasubrutinaserealizarsiguiendoesteejemplo:
MovlwMensaje0 ;Cargalaposicindelmensaje.
call LCD_Mensaje ;Visualizaelmensaje.
LCD_Mensaje
MovwfLCD_ApuntaCaracter ;Posicindelprimercarcterdelmensaje.
MovlwMensajes ;Hallalaposicinrelativadelprimercarcter
subwfLCD_ApuntaCaracter,F ;delmensajerespectodeetiqueta"Mensajes".
decf LCD_ApuntaCaracter,F ;Compensalaposicinqueocupa"addwfPCL,F".
LCD_VisualizaOtroCaracter
movf LCD_ApuntaCaracter,W
call Mensajes ;ObtieneelcdigoASCIIdelcarcterapuntado.
MovwfLCD_ValorCaracter ;Guardaelvalordecarcter.
movf LCD_ValorCaracter,F ;LonicoquehaceesposicionarflagZ.Encaso
btfsc STATUS,Z ;quesea"0x00",queescdigoindicadorfinal
goto LCD_FinMensaje ;demensaje,salefuera.
LCD_NoUltimoCaracter
call LCD_Caracter ;VisualizaelcarcterASCIIledo.
incf LCD_ApuntaCaracter,F ;Apuntaalaposicindelsiguientecarcter
goto LCD_VisualizaOtroCaracter ;dentrodelmensaje.
LCD_FinMensaje
return ;Vuelvealprogramaprincipal.
;Subrutina"LCD_MensajeMovimiento",visualiza unmensajede16caracteresenuna
;lneaelmensajedebedejarse16espaciosenblanco,alprincipioyalfinalpara
;conseguirqueeldesplazamientodelmensajesealomslegibleposible.
CBLOCK
LCD_CursorPosicion ;Contabilizalaposicindelcursordentrodela
ENDC ;pantallaLCD
LCD_MensajeMovimiento
movwfLCD_ApuntaCaracter ;Posicindelprimercarcterdelmensaje.
movlwMensajes ;Hallalaposicinrelativadelprimercarcter
subwfLCD_ApuntaCaracter,F ;delmensajerespectodelaetiqueta"Mensajes".
decfLCD_ApuntaCaracter,F ;Compensalaposicinqueocupa"addwfPCL,F".
LCD_PrimeraPosicion
clrfLCD_CursorPosicion ;Elcursorenlaposicin0delalnea.
callLCD_Borra ;Sesitaenlaprimeraposicindelalnea1y
LCD_VisualizaCaracter ;borralapantalla.
movlwLCD_CaracteresPorLinea ;Hallegadoafinaldelnea?
subwf LCD_CursorPosicion,W
btfss STATUS,Z
goto LCD_NoEsFinalLinea
LCD_EsFinalLinea
callRetardo_200ms ;Lomantienevisualizadoduranteestetiempo.
callRetardo_200ms
movlwLCD_CaracteresPorLinea1;Apuntaalaposicindelsegundocarcter
visualizado
subwfLCD_ApuntaCaracter,F ;enpantalla,queserelprimeroenlasiguiente
gotoLCD_PrimeraPosicion ;visualizacindelnea,paraproducirelefecto
LCD_NoEsFinalLinea ;dedesplazamientohacialaizquierda.
movfLCD_ApuntaCaracter,W
calMensajes ;ObtieneelASCIIdelcarcterapuntado.
movwfLCD_ValorCaracter ;Guardaelvalordecarcter.
movfLCD_ValorCaracter,F ;LonicoquehaceesposicionarflagZ.Encaso
btfscSTATUS,Z ;quesea"0x00",queescdigoindicadorfinal
gotoLCD_FinMovimiento ;demensaje,salefuera.
LCD_NoUltimoCaracter2
callLCD_Caracter ;VisualizaelcarcterASCIIledo.
incfLCD_CursorPosicion,F ;Contabilizaelincrementodeposicindelcursor
incfLCD_ApuntaCaracter,F ;Apuntaalasiguienteposicinporvisualizar.
gotoLCD_VisualizaCaracter ;Vuelveavisualizarelsiguientecarcter
LCD_FinMovimiento ;delalnea.
return ;Vuelvealprogramaprincipal.
;LCD_4BIT.INC
;PermitenrealizarlastareasbsicasdecontroldeunmduloLCDde2
;lneaspor16caracteres,compatibleconelmodeloLM016L.
;ElvisualizadorLCDestconectadoalPuertoBdelPICmedianteunbusde4bits.Las
;conexionesson:
; Las4lneassuperioresdelmduloLCD,pines<DB7:DB4>seconectanalas4
; lneassuperioresdelPuertoBdelPIC,pines<RB7:RB4>.
; PinRSdelLCDalalneaRA0delPIC.
; PinR/WdelLCDalalneaRA1delPIC,oamasa.
; PinEnabledelLCDalalneaRA2delPIC.
;Seutilizanllamadasasubrutinasderetardodetiempolocalizadasenlalibrera
;RETARDOS.INC.
;ZONADEDATOS
*********************************************************************
CBLOCK
LCD_Dato
LCD_GuardaDato
LCD_GuardaTRISB
LCD_Auxiliar1
LCD_Auxiliar2
ENDC
Mensaje1
; ...
; ...
;FinMensajes
;
;Lallamadaaestasubrutinaserealizarsiguiendoesteejemplo:
; movlwMensaje0 ;Cargalaposicindelmensaje.
; callLCD_Mensaje ;Visualizaelmensaje.
LCD_Mensaje
movwf LCD_ApuntaCaracter ;Posicindelprimercarcterdel
mensaje.
movlw Mensajes ;Hallalaposicinrelativadel
primercarcter
subwf LCD_ApuntaCaracter,F ;delmensajerespectodeetiqueta
"Mensajes".
decf LCD_ApuntaCaracter,F ;Compensalaposicinqueocupa
"addwfPCL,F".
LCD_VisualizaOtroCaracter
movf LCD_ApuntaCaracter,W
LCD_CaracteresPorLineaEQU .16;Nmerodecaracteresporlneadelapantalla.
#DEFINELCD_PinRS PORTA,0
#DEFINELCD_PinRW PORTA,1
#DEFINELCD_PinEnable PORTA,2
#DEFINELCD_BusDatos PORTB
LCD_Inicializa
bsf STATUS,RP0 ;ConfiguralaslneasconectadasalpinesRS,
bcf LCD_PinRS ;R/WyE.
bcf LCD_PinEnable
bcf LCD_PinRW
bcf STATUS,RP0
bcf LCD_PinRW ;Encasodequeestconectadoleindica
;quesevaaescribirenelLCD.
bcf LCD_PinEnable ;ImpidefuncionamientodelLCDponiendoE=0.
bcfLCD_PinRS ;ActivaelModoComandoponiendoRS=0.
callRetardo_20ms
movlwb'00110000'
callLCD_EscribeLCD ;EscribeeldatoenelLCD.
callRetardo_5ms
list p=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF
;radix hex
PDel0EQU 0X0C
PDel1EQU 0X0D
PDel2EQU 0X0D
;Listadoderegistrosespecialesutilizadoenesteprograma
;Findelistadoderegistrosespecialesutilizadoenesteprograma
;Comienzalistadoderegistrosdepropositogeneralempleadosenesteprograma
movlwb'00110000'
callLCD_EscribeLCD
callRetardo_200micros
movlwb'00110000'
callLCD_EscribeLCD
calltardo_20micros ;Esteretardoesnecesarioparasimularen
PROTEUS.
ProyectosparaMicroprocesadores
Cruce vehicular con un semforo 1. Diseo de despachador automtico de
botanas que cobre.
Control de potencia con PWM motor
2. Selector de temporizador secuencial
Control de potencia con PWM foco
con display y teclado sencillo
Selector de tres mens con LCD
3. Control para silla motorizada
Display que muestre temperatura
4. Velocmetro digital con sensor
(ADC y LM35)
5. Diseo de reloj digital que muestre
Control con teclado de temperatura
minutos y horas con control
con un termostato (ADC y LM35)
6. Alarma para automvil
Control de motor a pasos con giros
izquierdo y derecho a dos velocidades 7. Alarma para casa
Seleccin de 8 rutinas para el pto. 8. Cronmetro digital con LCD
Secuencia de un proceso industrial 9. Selector de paquetera
Diseo de una lavadora que elija 10. Sistema de diagnostico para automvil
lavado, nivel, enjuagado y secado 11. Leer el pto. Y parpadear segn el digito
Calculadora de dos bits que sume o seleccionado
reste para mostrar resultado 12. Monitoreo de proceso de produccin
Diseo de despachador automtico de 13. Diseo de un control remoto
refrescos que cobre. 14. Conexin entre dos microprocesadores
Gracias
Gracias