Documente Academic
Documente Profesional
Documente Cultură
RESUMEN
Un microcontrolador es un circuito integrado programable que contiene todos los componentes necesarios
para controlar el funcionamiento de una tarea determinada, y que permite la utilización de la menor
cantidad de elementos externos a parte del mismo, lo que reduce notablemente el tamaño y número de
componentes permitiendo disminuir el número de averías, el volumen y el peso al momento de crear un
dispositivo electrónico o mecatrónico. El Reloj fue desarrollado utilizando un Microcontrolador
PIC16F84A el cual fue programado en lenguaje Assembler, también se utilizo un Decodificador de BCD a
7 Segmentos (7448), un demultiplexor (74138), 6 displays 7 Segmentos de Cátodo Común, un led y 4
pulsadores. Los Displays fueron controlados mediante la técnica de multiplexacion dinámica y las
diferentes variables como los segundos, minutos, horas y cambio de modo entre Hora y Calendario se
controlan mediante interrupciones externas e internas, todo esto permitió que la visualización de los
números y el control de las variables produjeran excelentes resultados y un producto final compuesto por
dos placas superpuestas.
ABSTRAC
A microcontroller is a programmable integrated circuit that contains all the components necessary to
control the operation of a particular task, and allows the use of fewer external components of the same,
which greatly reduces the size and number of components allowing reduce the number of failures, the
volume and weight when creating an electronic or mechatronics device. The clock was developed using
a PIC16F84A microcontroller which was programmed in Assembler, also use a Decoder BCD to
7 Segment (7448), a demultiplexer (74 138), 6 7-Segment Displays Common Cathode, a LED and
4 buttons. The displays were controlled by the dynamic multiplexing technique and the different
variables as the seconds, minutes, hours, and mode change between Time and Calendar are controlled
by external and internal interrupts, this allowed the display of numbers and control
variables produce excellent results and a final product consists of two overlapping plates.
1
UNIVERSIDAD AUTÓNOMA DEL CARIBE
1. Introducción
A la lo largo de este documento verán el camino decidido tomar para la elaboración de un Reloj Digital
Con Función De Calendario utilizando un microcontrolador, impartido en el sexto semestre de ingeniería
Mecatrónica por el docente Msc. Mauricio Barrios Barrios en el periodo 2011-02.
El Reloj Digital contara con pulsadores que permiten modificar las diferentes variables como la hora,
minutos, segundos, días, meses, años y modo, las variables a modificar dependerán del modo en el que el
Reloj se encuentre, si esta en modo hora permitirá modificar las variables referentes a esta y si esta en
modo calendario las de este. El incremento de los segundos por parte del reloj se controla mediante
interrupciones por desbordamiento del Timer 0 para lo cual se realizaron una serie de cálculos para
obtener el valor con el que se debe cargar y la cantidad de veces que se debe desbordar para que pase un
segundo.
2. Elementos
1 Microcontrolador PIC16F84A.
1 Decodificador de BCD a 7-Segmentos 7448.
1 Demultiplexor 74138.
6 Transistores 2N3906.
6 Displays de 7-Segmentos.
6 Pulsadores.
Un regulador de Voltaje de 5V 7805.
7 Resistencias de 2.2k a ½ Watt.
1 Capacitor de 100uf a 16V.
2 Capacitores de 22pf.
1 Cristal de Cuarzo de 4MHz.
1 Led Rojo.
Un microcontrolador es un circuito integrado programable que contiene todos los componentes necesarios
para controlar el funcionamiento de una tarea determinada, como el control de una lavadora, un teclado de
ordenar, una impresora, un sistema de alarma, etc. Un sistema de microcontrolador debe disponer de una
memoria donde se almacena el programa que gobierna el funcionamiento del mismo que, una vez
programado y configurado, solo sirve para realizar la tarea asignada. La utilización de un
microcontrolador en un circuito reduce notablemente el tamaño y número de componentes y, en
consecuencia, disminuye el número de averías y el volumen y el peso de los equipos, entre otras ventajas.
[1]
2
UNIVERSIDAD AUTÓNOMA DEL CARIBE
Un led es un tipo especial de Diodo semiconductor, el cual emite luz cuando se polariza directamente.
Estos emiten luz en la gama de los ultravioleta, luz visible e infrarrojos. El Led a utilizar es un Led Rojo.
[2]
2.3 Transistor
Los transistores son dispositivos de tres terminales que se utilizan para controlar corrientes relativamente
grandes a partir de señales de corriente o de voltajes muy débiles, actuando como resistencias o
interruptores controlables electrónicamente. Los transistores pueden ser básicamente de dos tipos:
Bipolares, y unipolares. Los transistores bipolares se denominan también transistores de unión o BJT y
son dispositivos controlados por corriente. Los transistores unipolares, por su parte se denominan
transistores de efecto de campo o FET. Y son dispositivos controlados por voltaje. El transistor a utilizar
es el PNP 2N3906. [3]
3
UNIVERSIDAD AUTÓNOMA DEL CARIBE
Los decodificadores de segmentos requieren cuatro entradas en código decimal binario (BCD) y siete
salidas, una para cada segmento del display. Los decodificadores más comunes son los circuitos
integrados 7447 y 7448. Siendo el 7447 de lógica negativa y se trabaja con el display de ánodo común y el
7448 de lógica positiva y se trabaja con el display de cátodo común. El decodificador a utilizar es el 7448.
[4]
Un tipo muy común de display de 7 segmentos es el de diodo emisores de luz. Cada segmento es un LED
que emite luz cundo lo atraviesa una corriente eléctrica. La configuración de Ánodo Común requiere de un
circuito de excitación, que proporcione un nivel de excitación bajo para activar un determinado segmento.
Cuando se aplica un nivel bajo a la entrada de un segmento, el LED se enciende y circula corriente a
través de él. La configuración en cátodo común requiere de un circuito de excitación que proporcione un
nivel de tensión alto para activar un cierto segmento. Cuando se aplica un nivel alto a la entrada del
segmento, el LED se enciende y circula corriente a través de él. El 7-Segmentos a utilizar es de Cátodo
Común. [5]
4
UNIVERSIDAD AUTÓNOMA DEL CARIBE
2.6 Demultiplexor
Un demultiplixor es un circuito integrado que permite tomar datos de una line a de entrada y distribuirlos
a un determinado número de salidas, por este motivo también se conoce como distribuidor de datos. Los
demultiplexores realizan la operación inversa a un multiplexor. El demultiplexor a utilizar es el 74138 que
es un demultiplexor de 3 líneas a 8 líneas. [6]
El código del programa se desarrollo en lenguaje Assembler y se presentara al final del informe como un
anexo (Ver anexo 1).
Los diagramas, PCB y fotos del circuito se presentaran al final del informe como un anexo (Ver Anexo 2).
5
UNIVERSIDAD AUTÓNOMA DEL CARIBE
Debido a la baja cantidad de pines que posee el PIC16F84A fue necesario utilizar la técnica de
Multiplexacion Dinámica para controlar seis 7-Segmentos a la vez. En el circuito las señales que salen del
Decodificador 7448 están conectadas a todas las entradas de los 6 7-Segmentos y los pines comunes de
estos están conectados al Demultiplexor 74138. La técnica consiste en habilitar el primer 7-Segmentos
mediante el 74138 y enviar el dato a mostrar por este a través del 7448 manteniendo habilitado este primer
7-Segmentos durante un corto lapso de tiempo (durante ese tiempo los demás 7 segmentos están
deshabilitados por tanto el numero no se va a mostrar por estos), luego lo deshabilito, habilito el segundo
7-Segmentos y envio el dato a mostrar por este manteniendo este segundo 7-Segmentos habilitado durante
el mismo tiempo que el primero, el procedimiento se repite con cada uno de los demás. Esto quiere decir
que los 7 segmentos van a estar apagándose y prendiendo constantemente solo que este cambio es tan
rápido que el ojo humano no lo alcanza a percibir.
5.2 Interrupciones
Una interrupción es un mecanismo por el cual un evento interno o externo puede interrumpir la ejecución
de un programa en cualquier momento. El funcionamiento de estas es similar al de las interrupciones, de
las cuales se diferencian, principalmente, en los procedimientos que las ponen en marcha. Las
interrupciones se ejecutan al aparecer en cualquier instante de tiempo un evento externo al programa. [7]
Interrupción por RBI: Para modificar las variables Modo (Pin RB4), Hora/Dias (Pin RB5),
Minutos/Meses (Pin RB6) y Segundos/Años (Pin RB7).
Interrupción por TOI: Para que se vayan incrementando los segundos de manera automática.
6. Resultados
Como sabemos para realizar la multiplexacion cada 7-Segmentos debe durar un tiempo habilitado, para lo
cual utilizamos un retardo. Las pruebas se hicieron con tiempos de 10ms, 5ms, 2ms, 1ms y 500us.
Obteniéndose una buena multiplexacion con los valores de 1ms y 500us. Pudiéndose utilizar cualquiera
de las dos.
6
UNIVERSIDAD AUTÓNOMA DEL CARIBE
Al utilizar el TMR0 como temporizador toca cargarle una constante para determinar un intervalo de
tiempo en concreto. Como se está utilizando un Cristal de Cuarzo de 4MHz el TMR0 se incremente cada
1us con lo que se desbordaría a los 256us debido a que es un registro de 1byte,pero se le puede asignar un
Prescaler (divisor de frecuencia) para obtener tiempos mayores. Como el tiempo máximo que se puede
obtener con el TMR0 utilizando el máximo prescaler es de 65.536 ms, se decidió trabajar con 50ms. Para
conocer el valor que se debe cargar al TMR0 se utilizo la siguiente fórmula: [8]
· · 256 0 (1)
Donde Temporización es el tiempo que se desea obtener, Tcm es el periodo de un ciclo maquina y
CargaTMR0 es el valor a cargar. [8]
0 60536 (5)
Tomando el resultado anterior y redondeando se obtuvo del valor de 61.
Para calcular cuantas veces tiene que desbordarse el TMR0, debemos conocer cuantas veces esta
contenido 50ms en un 1s, entonces realizando una simple división:
!"
#$%!$&'"
(6)
20 (7)
Por lo tanto de lo anterior se puede inferir que para que transcurra un segundo el TMR0 ha de desbordarse
20 veces.
7. Conclusiones
Los microcontroladores son elementos programables que nos permiten ahorrar espacio y
elementos al momento de realizar un proyecto teniendo muy en cuenta cuáles son sus
características físicas externas e internas y el modo de funcionamiento.
Los microcontroladores poseen recursos como las interrupciones que nos facilitan la captura de
datos externos y realizar temporizaciones internas.
Para obtener una excelente visualización utilizando la multiplexacion dinámica es necesario tener
habilitado cada 7-segmentos 1ms o menos.
La cantidad de veces que tiene que desbordarse el TMR0 para que transcurra un segundo es de 20.
7
UNIVERSIDAD AUTÓNOMA DEL CARIBE
8. Referencias
[1] Palacios E., Remiro F., y López L. (2006) Microcontrolador PIC16F84. En: Palacios E., Remiro F., y
López L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edición. México, AlfaOmega, p.1-
9.
[2] Que es el LED? [Internet] Sistema De Información Energética de Guanajuato. Disponible desde:
<http://energia.guanajuato.gob.mx/siegconcyteg/eventosieg/archivos/AI_Led.pdf> [Acceso 3 de
Diciembre 2011]
[3] Aranzabal Olea A. Transistor De Union Bipolar BJT [Internet] Universidad Nacional de Educación
a Distancia. Disponible desde: <http://www.uned.es/ca-
bergara/ppropias/Morillo/web_et_dig/02_semiconduc/transistores.pdf> [Acceso 3 de Diciembre 2011]
[4] Floyd T. (2000) Funciones De Lógica Combinacional. En: Floyd T. Fundamentos De Sistemas
Digitales 7ª Edición. España, Prentice Hall, p.358-359.
[5] Floyd T. (2000) Algebra de Boole y Simplificación Lógica. En: Floyd T. Fundamentos De Sistemas
Digitales 7ª Edición. España, Prentice Hall, p.254-257.
[6] Floyd T. (2000) Funciones De Logica Combinacional. En: Floyd T. Fundamentos De Sistemas
Digitales 7ª Edición. España, Prentice Hall, p.379-381.
[7] Palacios E., Remiro F., y López L. (2006) Interrupciones. Lectura de Entradas. En: Palacios E.,
Remiro F., y López L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edición. México,
AlfaOmega, p.253-270.
[8] Palacios E., Remiro F., y López L. (2006) TMR 0. En: Palacios E., Remiro F., y López L.
Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edición. México, AlfaOmega, p.223-234
8
UNIVERSIDAD AUTÓNOMA DEL CARIBE
ANEXOS
LIST P=16F84A
INCLUDE <P16F84A.INC>
CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0
goto inicio
org 4
btfsc INTCON,RBIF ; Verificamos si la interrupción fue por interruptores
goto interrbi ; si lo fue nos vamos a la subrutina de interruptores
goto intertmr ; sino nos vamos a la subrutina de TMR0
9
UNIVERSIDAD AUTÓNOMA DEL CARIBE
movwf INTCON
clrf modo
bsf modo,0 ; Iniciamos en modo hora
;*:*:*:*:*:*:*:*PROGRAMA PRINCIPAL*:*:*:*:*:*:*:*:*
Principal
btfsc modo,0 ; Verificamos en qué modo se encuentra
goto mostrarh ; Si esta en hora mostramos la hora
goto mostrard ; Si esta en calendario mostramos la fecha
;*:*:*:*:*:*:*:*:*INTERRUPCIONES*:*:*:*:*:*:*:*
;*:*:*:*:*:*:*:RBI:*:*:*:*:*:*:*
incmenhoras
btfsc PORTB,7 ; Incrementar SEGUNDOS
call incseg1
btfsc PORTB,6 ; Incrementar MINUTOS
call incmin1b
btfsc PORTB,5 ; Incrementar HORAS
call inchor1b
call verhoru ; Verificamos la Hora
bcf INTCON,RBIF ; Borramos bit indicador de interrupción por RB7:RB0
call Retardo_100ms ; Este retardo es para evitar rebotes
call Retardo_50ms
movf GuardaW,W ; Cargamos a W con su valor previamente guardado
retfie
incmendias
btfsc PORTB,5 ; Incrementar DÍAS
call incdias1
btfsc PORTB,6 ; Incrementar MESES
call incmeses1b
btfsc PORTB,7 ; Incrementar AÑOS
10
UNIVERSIDAD AUTÓNOMA DEL CARIBE
call incaños1b
call verdiasmes ; Verificamos los Días dependiendo del Mes
call vermesesu ; Verificamos Los Meses
bcf INTCON,RBIF ; Borramos bit indicador de interrupción por RB7:RB0
call Retardo_100ms ; Este retardo es para evitar rebotes
call Retardo_50ms
movf GuardaW,W ; Cargamos a W con su valor previamente guardado
retfie
;*:*:*:*:*:*:*CAMBIO DE MODO*:*:*:*:*:*
cambmodo
btfsc modo,0 ; Si esta en modo hora cambio a calendario
goto modocalen
btfss modo,0 ; Si esta en calendario cambio a hora
goto modohora
return
modohora
bsf modo,0 ; Activo modo hora
return
modocalen
bcf modo,0 ; Activo modo calendario
return
;*:*:*:*:*:*:*:TMR0:*:*:*:*:*:*:*
intertmr
movwf GuardaW ; Guardamos el contenido de W
movlw .61 ; Cargamos el TMR0 con el valor correspondiente para un
movwf TMR0 ; retardo de 50 ms
incdeseg
clrf tmr ; Borramos el registro tmr
call incseg1 ; Incrementamos un segundo
call verhoru ; verificamos la hora
return
;*:*:*:*:*:*:*:*BORRADO DE REGISTROS*:*:*:*:*:*:*:*
11
UNIVERSIDAD AUTÓNOMA DEL CARIBE
borrarregh1
call incdias1 ; Se incrementan los segundos
call verdiasmes ; Se verifica los días dependiendo del mes
call vermesesu ; Se verifican los meses
borrarregh
clrf segu ; Borramos todos los registros pertenecientes a las horas
clrf segd
clrf minu
clrf mind
clrf horu
clrf hord
return
borrarregd
clrf diasu ; Borramos todos los registros pertenecientes al calendario
bsf diasu,0 ; y los inicializamos
clrf diasd
clrf mesesu
bsf mesesu,0
clrf mesesd
clrf añosu
clrf añosd
return
;*:*:*:*:*:*:*:*INCREMENTAR REGISTROS*:*:*:*:*:*:*:*
;*:*:*:*:*:*:*:*HORAS*:*:*:*:*:*:*:*
incseg10
clrf segu ; Borramos las unidades de los segundos
incf segd,F ; Incrementamos las decenas de los segundos
movf segd,W
sublw .6 ; Si las decenas de los segundos se han
btfsc STATUS,Z ; incrementado en 6
goto incmin ; incrementamos los minutos
return
incmin1
12
UNIVERSIDAD AUTÓNOMA DEL CARIBE
incmin10
clrf minu ; Borramos las unidades de los minutos
incf mind,F ; Incrementamos las decenas de los minutos
movf mind,W
sublw .6 ; Si las decenas de los minutos se han
btfsc STATUS,Z ; incrementado en 6
goto inchor ; incrementamos las horas
return
inchor10
clrf horu ; Borramos las decenas de las horas
incf hord,F ; Incrementamos las decenas de los minutos
movf hord,W
sublw .10 ; Si las decenas de las horas se han
btfsc STATUS,Z ; incrementado en 10
clrf hord ; Borramos las decenas de las horas
return
;*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*
incdias1
incf diasu,F ; Incrementamos las unidades de los días
movf diasu,W
sublw .10 ; Si las unidades de los días se han
btfsc STATUS,Z ; incrementado en 10
goto incdias10 ; incrementamos las decenas de los días
return
13
UNIVERSIDAD AUTÓNOMA DEL CARIBE
incdias10
clrf diasu ; Borramos las unidades de los días
incf diasd,F ; Incrementamos las decenas de los días
return
incmeses1
clrf diasd ; Borramos las decenas de los días
clrf diasu ; Borramos e inicializamos las unidades
bsf diasu,0 ; de los días
incmeses1b
incf mesesu,F ; Incrementamos las unidades de los meses
movf mesesu,W
sublw .10 ; Si las unidades de los meses se han
btfsc STATUS,Z ; incrementado en 10
goto incmeses10 ; incrementamos las decenas de los meses
return
incmeses10
clrf mesesu ; Borramos las unidades de los meses
incf mesesd,F ; Incrementamos las decenas de los meses
return
incaños1
clrf mesesd ; Borramos las decenas de los meses
clrf mesesu ; Borramos e inicializamos las unidades
bsf mesesu,0 ; de los meses
incaños1b
incf añosu,F ; Incrementamos las unidades de los años
movf añosu,W
sublw .10 ; Si las unidades de los años se han
btfsc STATUS,Z ; incrementado en 10
goto incaños10 ; Incrementamos las decenas de los años
return
incaños10
clrf añosu ; Borramos las unidades de los años
incf añosd,F ; Incrementamos las decenas de los años
movf añosd,W
sublw .10 ; Si las decenas de los años se han
btfsc STATUS,Z ; incrementado en 10
clrf añosd ; Borramos las decenas de los años
return
;*:*:*:*:*:*:*VERIFICAR REGISTROS*:*:*:*:*:*
;*:*:*:*:*:*:*:*:*:*HORA*:*:*:*:*:*:*:*:*:*
verhoru
movf horu,W
14
UNIVERSIDAD AUTÓNOMA DEL CARIBE
verhord
movf hord,W
sublw .2 ; Verificamos si las decenas de las horas
btfsc STATUS,Z ; han llegado a 2, si han llegado
goto verhor ; verificamos si fue por interruptor
return
;*:*:*:*:*:*:*:*:*:*:*:*MESES*:*:*:*:*:*:*:*:*.*:*
vermesesu
movf mesesu,W
sublw .3 ; Verificamos si las unidades de los meses
btfsc STATUS,Z ; han llegado a 4, si han llegado
goto vermesesd ; verificamos las decenas de los meses
return
vermesesd
movf mesesd,W
sublw .1 ; Verificamos si las decenas de las horas
btfsc STATUS,Z ; han llegado a 1, si han llegado
goto vermeses ; verificamos si el incremento fue por interruptor
return
vermeses
btfss INTCON,RBIF ; Verifico si el incrementos fue por un interruptor
goto incaños1 ; Sino fue, incrementos los años
clrf mesesd ; si fue, borramos e inicializamos los meses
clrf mesesu
bsf mesesu,0
return
;*:*:*:*:*:*:*:*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*:*:*:*:*:*
verdiasmes
movf mesesu,W
btfsc mesesd,0 ; Verificamos si los meses han llegado a 10
addlw .10 ; si han llegado, le sumo 10 a las unidades
call tabladias ; Llamamos tabla de los días dependiendo del mes
call descnumero ; Descomponemos el numero en unidades y decenas
15
UNIVERSIDAD AUTÓNOMA DEL CARIBE
verdiasu
movf diasu,W
subwf diasauxu,F ; Verificamos si las unidades de los días son iguales
btfsc STATUS,Z ; si lo son
goto verdiasd ; pasamos a verificar las decenas de los días
return
verdiasd
movf diasd,W
subwf diasauxd,F ; Verificamos si las decenas de los días son iguales
btfsc STATUS,Z ; si lo son
goto verdias ; Verificamos si el incremento fue por interruptor
return
tabladias
addwf PCL,F
retlw .0
retlw .32
retlw .29
retlw .32
retlw .31
retlw .32
retlw .31
retlw .32
retlw .32
retlw .31
retlw .32
retlw .31
retlw .32
descnumero
clrf diasauxd
movwf diasauxu
unidad movlw .10
subwf diasauxu,F
btfsc STATUS,C
goto decena
addwf diasauxu,F
return
16
UNIVERSIDAD AUTÓNOMA DEL CARIBE
;*:*:*:*:*:*:*:*:*MOSTRAR REGISTROS*:*:*:*:*:*:*:*
;*:*:*:*:*:*:*:*:*:*:*:*:*HORAS*:*:*:*:*:*:*:*.*:*:*:*
mostrarh
movlw b'00000101'
movwf PORTA ; Habilitamos el primer 7-Segmentos
movf segu,W
movwf PORTB ; Mostramos las unidades de los segundos
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00001001'
movwf PORTA ; Habilitamos el segundo 7-Segmentos
movf segd,W
movwf PORTB ; Mostramos las decenas de los segundos
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00001101'
movwf PORTA ; Habilitamos el tercer 7-Segmentos
movf minu,W
movwf PORTB ; Mostramos las unidades de los minutos
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00010001'
movwf PORTA ; Habilitamos el cuarto 7-Segmentos
movf mind,W
movwf PORTB ; Mostramos las decenas de los minutos
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00010101'
movwf PORTA ; Habilitamos el quinto 7-Segmentos
movf horu,W
movwf PORTB ; Mostramos las unidades de las horas
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00011001'
movwf PORTA ; Habilitamos el sexto 7-Segmentos
movf hord,W
movwf PORTB ; Mostramos las unidades de las horas
call Retardo_1ms ; Esperamos un tiempo
clrf PORTA
clrf PORTB
goto principal
17
UNIVERSIDAD AUTÓNOMA DEL CARIBE
;*:*:*:*:*:*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*:*:*:*:
mostrard
movlw b'00000100'
movwf PORTA ; Habilitamos el primer 7-Segmentos
movf añosu,W
movwf PORTB ; Mostramos las unidades de los días
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00001000'
movwf PORTA ; Habilitamos el segundo 7-Segmentos
movf añosd,W
movwf PORTB ; Mostramos las decenas de los días
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00001100'
movwf PORTA ; Habilitamos el tercer 7-Segmentos
movf mesesu,W
movwf PORTB ; Mostramos las unidades de los meses
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00010100'
movwf PORTA ; Habilitamos el quinto 7-Segmentos
movf diasu,W
movwf PORTB ; Mostramos las unidades de las horas
call Retardo_1ms ; Esperamos un tiempo
clrf PORTB
movlw b'00011000'
movwf PORTA ; Habilitamos el sexto 7-Segmentos
movf diasd,W
movwf PORTB ; Mostramos las decenas de las horas
call Retardo_1ms ; Esperamos un tiempo
clrf PORTA
clrf PORTB
goto principal
;*:*:*:*:*:*:*RETARDOS*:*:*:*:*:*:*:*
CBLOCK
18
UNIVERSIDAD AUTÓNOMA DEL CARIBE
Retardo_100ms
movlw d'100' ; Esta subrutina de retardo fue tomada del libro
goto Retardos_ms ; Microcontrolador PIC16F84 Desarrollo de
Retardo_50ms ; Proyectos de Enrique Palacios.
movlw d'50'
goto Retardos_ms
Retardo_1ms .
movlw d'1'
Retardos_ms
movwf R_ContB
R1ms_BucleExterno
movlw d'249'
movwf R_ContA
R1ms_BucleInterno
nop
decfsz R_ContA,F
goto R1ms_BucleInterno
decfsz R_ContB,F
goto R1ms_BucleExterno
return
END
19
UNIVERSIDAD AUTÓNOMA DEL CARIBE
20
UNIVERSIDAD AUTÓNOMA DEL CARIBE
21
UNIVERSIDAD AUTÓNOMA DEL CARIBE
22
UNIVERSIDAD AUTÓNOMA DEL CARIBE
23
UNIVERSIDAD AUTÓNOMA DEL CARIBE
24