You are on page 1of 24

UNIVERSIDAD AUTNOMA DEL CARIBE

IMPLEMENTACIN DE UN RELOJ DIGITAL CON FUNCIN CALENDARIO MEDIANTE DE EL USO DE UN MICROCONTROLADOR IMPLEMENTATION OF A DIGITAL CLOCK WITH CALENDAR FUNCTION THROUGH THE USE OF A MICROCONTROLLER Danilo Rojas M.1, Jos Salas R2.
1 Estudiante de Ingeniera Mecatrnica, Universidad Autnoma Del Caribe, Grupo De Investigacin De Ingeniera Mecatrnica GIIM. Email: darm940@hotmail.com 2 Estudiante de Ingeniera Mecatrnica, Universidad Autnoma Del Caribe. Email: jo-an17@hotmail.com

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 utilizacin de la menor cantidad de elementos externos a parte del mismo, lo que reduce notablemente el tamao y nmero de componentes permitiendo disminuir el nmero de averas, el volumen y el peso al momento de crear un dispositivo electrnico o mecatrnico. El Reloj fue desarrollado utilizando un Microcontrolador PIC16F84A el cual fue programado en lenguaje Assembler, tambin se utilizo un Decodificador de BCD a 7 Segmentos (7448), un demultiplexor (74138), 6 displays 7 Segmentos de Ctodo Comn, un led y 4 pulsadores. Los Displays fueron controlados mediante la tcnica de multiplexacion dinmica 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 visualizacin de los nmeros y el control de las variables produjeran excelentes resultados y un producto final compuesto por dos placas superpuestas. Palabras Claves: Microcontrolador, Assembler, Display 7 segmentos, Reloj, Calendario. 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. Keywords: Microcontroller, Assembler, 7-segment Display, Clock, Calendar.

UNIVERSIDAD AUTNOMA DEL CARIBE

1. Introduccin A la lo largo de este documento vern el camino decidido tomar para la elaboracin de un Reloj Digital Con Funcin De Calendario utilizando un microcontrolador, impartido en el sexto semestre de ingeniera Mecatrnica 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, das, meses, aos y modo, las variables a modificar dependern 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 clculos 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.

2.1 Microcontrolador PIC16F84A 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 utilizacin de un microcontrolador en un circuito reduce notablemente el tamao y nmero de componentes y, en consecuencia, disminuye el nmero de averas y el volumen y el peso de los equipos, entre otras ventajas. [1] El microcontrolador PIC16F84A esta encapsulado en un DIL de 18 pines, trabaja a una frecuencia mxima de 10 MHz, normalmente se alimenta con un voltaje de 5V aplicados entre los pines VDD y VSS que son respectivamente la alimentacin y masa del micro. Posee dos puertos de entra-salida, el Puerto A con 5 lneas y el Puerto B con 8 lneas, los cuales pueden entregar niveles TTL. [1]

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 1. Encapsulado y smbolo del PIC16F84A. Figure 1. Encapsulation and symbol of PIC16F84A. Figur

2.2 Diodo Emisor de Luz LED 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] Figura 2. Estructura LED. Figure 2. LED structure.

2.3 Transistor Los transistores son dispositivos de tres terminales que se utilizan para controlar corrientes relativamente grandes a partir de seales de corriente o de voltajes muy dbiles, actuando como resistencias o interruptores controlables electrnicamente. Los transistores pueden ser bsicamente de dos tipos: Bipolares, y unipolares. Los transistores bipolares se denominan tambin transistores de unin 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]

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 3. Estructura Transistor 2N3906. Figure 3. 2N3906 Transistor structure.

2.4 Decodificador BCD-7Segmentos 7Segmentos Los decodificadores de segmentos requieren cuatro entradas en cdigo decimal binario (BCD) y siete salidas, una para cada segmento del display. Los decodificadores ms comunes son los circuitos decodificadores integrados 7447 y 7448. Siendo el 7447 de lgica negativa y se trabaja con el display de nodo comn y el 7448 de lgica positiva y se trabaja con el display de ctodo comn El decodificador a utilizar es el 7448. comn. [4] Figura 4. Estructura integrado decodificador BCD-7 segmentos 7448. BCD 7 Figure 4 Integrated structure BCD-7 7448 segment decoder. 4.

2.5 Display De Led 7-Segmentos Segmentos Un tipo muy comn de display de 7 segmentos es el de diodo emisores de luz. Cada segmento es u LED un que emite luz cundo lo atraviesa una corriente elctrica. La configuracin de nodo Comn requiere de un circuito de excitacin, que proporcione un nivel de excitacin 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 entrada travs de l. La configuracin en ctodo comn requiere de un circuito de excitacin que proporcione un . nivel de tensin 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 travs de l. El 7-Segmentos a utilizar es de Ctodo Segmentos Comn. [5]

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 5. Estructura Display de 7-Segementos. Figure 5. Structure 7-segement display.

2.6 Demultiplexor Un demultiplixor es un circuito integrado que permite tomar datos de una line a de entrada y distribuirlos a un determinado nmero de salidas, por este motivo tambin se conoce como distribuidor de datos. Los dis demultiplexores realizan la operacin inversa a un multiplexor. El demultiplexor a utilizar es el 74138 que es un demultiplexor de 3 lneas a 8 lneas. [6] Figura 6. Estructura Demultiplexor 74138. Figure 6. Demultiplexer Structure 74138.

3. Cdigo del Programa El cdigo del programa se desarrollo en lenguaje Assembler y se presentara al final del informe como un Assembler anexo (Ver anexo 1). 4. Diagrama, PCB y Fotos del Circuito Los diagramas, PCB y fotos del circuito se presentaran al final del informe como un anexo (Ver Anexo 2). (

UNIVERSIDAD AUTNOMA DEL CARIBE

5. Tcnicas De Programacin Utilizadas 5.1 Multiplexacion Dinmica Debido a la baja cantidad de pines que posee el PIC16F84A fue necesario utilizar la tcnica de Multiplexacion Dinmica para controlar seis 7-Segmentos a la vez. En el circuito las seales que salen del Decodificador 7448 estn conectadas a todas las entradas de los 6 7-Segmentos y los pines comunes de estos estn conectados al Demultiplexor 74138. La tcnica consiste en habilitar el primer 7-Segmentos mediante el 74138 y enviar el dato a mostrar por este a travs del 7448 manteniendo habilitado este primer 7-Segmentos durante un corto lapso de tiempo (durante ese tiempo los dems 7 segmentos estn 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 dems. Esto quiere decir que los 7 segmentos van a estar apagndose y prendiendo constantemente solo que este cambio es tan rpido que el ojo humano no lo alcanza a percibir. 5.2 Interrupciones Una interrupcin es un mecanismo por el cual un evento interno o externo puede interrumpir la ejecucin 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] En PIC16F84A existen cuatro tipos de interrupciones: Interrupcin INT. Por activacin del pin RB0/INT. Interrupcin RBI. Por cambio en los estados en una o varias de las 4 lneas de ms peso RB7:RB4 del puerto B. Interrupcin TOI. Por Desbordamiento del Timer0. Interrupcin EEI. Por la finalizacin de la escritura en el EEPROM de datos.

Las interrupciones utilizadas fueron en el desarrollo del programa fueron: Interrupcin por RBI: Para modificar las variables Modo (Pin RB4), Hora/Dias (Pin RB5), Minutos/Meses (Pin RB6) y Segundos/Aos (Pin RB7). Interrupcin por TOI: Para que se vayan incrementando los segundos de manera automtica.

6. Resultados 6.1 Tiempo de Retardo Multiplexacion Dinmica 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. Obtenindose una buena multiplexacion con los valores de 1ms y 500us. Pudindose utilizar cualquiera de las dos.

UNIVERSIDAD AUTNOMA DEL CARIBE

6.2 Carga Del Valor y Cantidad de Desbordamientos del TMR0 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 desbordara 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 mximo que se puede obtener con el TMR0 utilizando el mximo 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 frmula: [8] 256 0 (1)

Donde Temporizacin es el tiempo que se desea obtener, Tcm es el periodo de un ciclo maquina y CargaTMR0 es el valor a cargar. [8] 50000 50000 1 256 256 65536 256 0 65536 50000 0 60536 0 0 (2) (3) (4) (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 divisin: (6) (7)

20

Por lo tanto de lo anterior se puede inferir que para que transcurra un segundo el TMR0 ha de desbordarse 20 veces. 7. Conclusiones Podemos concluir que: Los microcontroladores son elementos programables que nos permiten ahorrar espacio y elementos al momento de realizar un proyecto teniendo muy en cuenta cules son sus caractersticas fsicas 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 visualizacin utilizando la multiplexacion dinmica es necesario tener habilitado cada 7-segmentos 1ms o menos. El valor a cargar al TMR0 para obtener una temporizacin de 50 ms es de 61. La cantidad de veces que tiene que desbordarse el TMR0 para que transcurra un segundo es de 20.

UNIVERSIDAD AUTNOMA DEL CARIBE

8. Referencias [1] Palacios E., Remiro F., y Lpez L. (2006) Microcontrolador PIC16F84. En: Palacios E., Remiro F., y Lpez L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edicin. Mxico, AlfaOmega, p.19. [2] Que es el LED? [Internet] Sistema De Informacin Energtica 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 Educacin a Distancia. Disponible desde: <http://www.uned.es/cabergara/ppropias/Morillo/web_et_dig/02_semiconduc/transistores.pdf> [Acceso 3 de Diciembre 2011] [4] Floyd T. (2000) Funciones De Lgica Combinacional. En: Floyd T. Fundamentos De Sistemas Digitales 7 Edicin. Espaa, Prentice Hall, p.358-359.

[5] Floyd T. (2000) Algebra de Boole y Simplificacin Lgica. En: Floyd T. Fundamentos De Sistemas Digitales 7 Edicin. Espaa, Prentice Hall, p.254-257. [6] Floyd T. (2000) Funciones De Logica Combinacional. En: Floyd T. Fundamentos De Sistemas Digitales 7 Edicin. Espaa, Prentice Hall, p.379-381. [7] Palacios E., Remiro F., y Lpez L. (2006) Interrupciones. Lectura de Entradas. En: Palacios E., Remiro F., y Lpez L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edicin. Mxico, AlfaOmega, p.253-270. [8] Palacios E., Remiro F., y Lpez L. (2006) TMR 0. En: Palacios E., Remiro F., y Lpez L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edicin. Mxico, AlfaOmega, p.223-234

UNIVERSIDAD AUTNOMA DEL CARIBE

ANEXOS Anexo 1. Cdigo Del Programa. LIST INCLUDE __CONFIG CBLOCK segu segd minu mind horu hord tmr modo diasu diasd mesesu mesesd aosu aosd diasauxu diasauxd GuardaW ENDC org goto org btfsc goto goto P=16F84A <P16F84A.INC> _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC 0Ch ; Definimos un bloque de constantes ; Registros de las unidades de los segundos ; Registros de las decenas de los segundos ; Registros de las unidades de los minutos ; Registros de las decenas de los minutos ; Registros de las unidades de las horas ; Registros de las decenas de las horas ; Registro de las veces que se ha desbordado el TMR0 ; Registro del tipo de modo ; Registros de las unidades de los das ; Registros de las decenas de los das ; Registros de las unidades de los meses ; Registros de las decenas de los meses ; Registros de las unidades de los aos ; Registros de las decenas de los aos ; Registros auxiliar de las unidades de los das ; Registros auxiliar de las decenas de los das ; Registros para guardar el valor de W

0 inicio 4 INTCON,RBIF interrbi intertmr ; Verificamos si la interrupcin fue por interruptores ; si lo fue nos vamos a la subrutina de interruptores ; sino nos vamos a la subrutina de TMR0

;*:*:*:*:*:*:*CONFIGURACIN PUERTOS E INTERRUPCIONES*:*:*:*:*:*:*:* inicio bsf movlw movwf movlw movwf movlw movwf bcf movlw movwf movlw STATUS,RP0 b'11110000' TRISB b'00000000' TRISA b'00000111' OPTION_REG STATUS,RP0 .61 TMR0 b'10101000' ; Pasamos al banco 1 ; Configuramos el nibble mas alto como entrada ; y el ms bajo como salida del puerto B ; Configuramos el puerto A como salida ; Asignamos el prescaler de 256 al TMR0 ; Pasamos al banco 0 ; Cargamos el TMR0 con el valor correspondiente para un ; retardo de 50 ms ; Configuro interrupcin por RB7:RB4, por TMR0 y general

UNIVERSIDAD AUTNOMA DEL CARIBE

movwf clrf clrf clrf bsf call call

INTCON PORTB PORTA modo modo,0 borrarregh borrarregd ; Inicializamos Los puertos en 0

; Iniciamos en modo hora ; Inicializamos los registros de las horas en 0 ; Inicializamos los registros de los das en 0

;*:*:*:*:*:*:*:*PROGRAMA PRINCIPAL*:*:*:*:*:*:*:*:* Principal btfsc goto goto

modo,0 mostrarh mostrard

; Verificamos en qu modo se encuentra ; Si esta en hora mostramos la hora ; Si esta en calendario mostramos la fecha

;*:*:*:*:*:*:*:*:*INTERRUPCIONES*:*:*:*:*:*:*:* ;*:*:*:*:*:*:*:RBI:*:*:*:*:*:*:* interrbi movwf btfsc call btfsc goto goto incmenhoras btfsc call btfsc call btfsc call call bcf call call movf retfie incmendias btfsc call btfsc call btfsc GuardaW PORTB,4 cambmodo modo,0 incmenhoras incmendias ; Guardamos el contenido de W ; verificamos si se ha presionado el interruptor cambiar modo ; Cambiamos a modo calendario o viceversa ; Verificamos en qu modo se encuentra ; Si esta en hora incrementamos las horas ; Si esta en calendario incrementamos la fecha

PORTB,7 incseg1 PORTB,6 incmin1b PORTB,5 inchor1b verhoru INTCON,RBIF Retardo_100ms Retardo_50ms GuardaW,W

; Incrementar SEGUNDOS ; Incrementar MINUTOS ; Incrementar HORAS ; Verificamos la Hora ; Borramos bit indicador de interrupcin por RB7:RB0 ; Este retardo es para evitar rebotes ; Cargamos a W con su valor previamente guardado

PORTB,5 incdias1 PORTB,6 incmeses1b PORTB,7

; Incrementar DAS ; Incrementar MESES ; Incrementar AOS

10

UNIVERSIDAD AUTNOMA DEL CARIBE

call call call bcf call call movf retfie

incaos1b verdiasmes vermesesu INTCON,RBIF Retardo_100ms Retardo_50ms GuardaW,W

; Verificamos los Das dependiendo del Mes ; Verificamos Los Meses ; Borramos bit indicador de interrupcin por RB7:RB0 ; Este retardo es para evitar rebotes ; Cargamos a W con su valor previamente guardado

;*:*:*:*:*:*:*CAMBIO DE MODO*:*:*:*:*:* cambmodo btfsc goto btfss goto return modohora bsf return modocalen bcf return

modo,0 modocalen modo,0 modohora

; Si esta en modo hora cambio a calendario ; Si esta en calendario cambio a hora

modo,0

; Activo modo hora

modo,0

; Activo modo calendario

;*:*:*:*:*:*:*:TMR0:*:*:*:*:*:*:* intertmr movwf movlw movwf inctmr incf movf sublw btfsc call bcf movf retfie incdeseg clrf call call return

GuardaW .61 TMR0

; Guardamos el contenido de W ; Cargamos el TMR0 con el valor correspondiente para un ; retardo de 50 ms

tmr,F tmr,W .20 ; Le restamos el valor correspondiente a la cantidad de veces STATUS,Z ; que tiene que desbordarse para cumplir un tiempo de 1s incdeseg ; si se cumple incrementamos los segundos INTCON,T0IF ; Borramos el bit indicador de interrupcin por TMR0 GuardaW,W ; Cargamos a W con su valor previamente guardado

tmr incseg1 verhoru

; Borramos el registro tmr ; Incrementamos un segundo ; verificamos la hora

;*:*:*:*:*:*:*:*BORRADO DE REGISTROS*:*:*:*:*:*:*:*

11

UNIVERSIDAD AUTNOMA DEL CARIBE

borrarregh1 call call call borrarregh clrf clrf clrf clrf clrf clrf return borrarregd clrf bsf clrf clrf bsf clrf clrf clrf return

incdias1 verdiasmes vermesesu segu segd minu mind horu hord

; Se incrementan los segundos ; Se verifica los das dependiendo del mes ; Se verifican los meses ; Borramos todos los registros pertenecientes a las horas

diasu diasu,0 diasd mesesu mesesu,0 mesesd aosu aosd

; Borramos todos los registros pertenecientes al calendario ; y los inicializamos

;*:*:*:*:*:*:*:*INCREMENTAR REGISTROS*:*:*:*:*:*:*:* ;*:*:*:*:*:*:*:*HORAS*:*:*:*:*:*:*:* incseg1 incf movf sublw btfsc goto return incseg10 clrf incf movf sublw btfsc goto return incmin btfss goto clrf return incmin1 segu,F segu,W .10 STATUS,Z incseg10 ; Incrementamos las unidades de los segundos ; Si las unidades de los segundos se han ; incrementado en 10 ; incrementamos las decenas de los segundos

segu segd,F segd,W .6 STATUS,Z incmin

; Borramos las unidades de los segundos ; Incrementamos las decenas de los segundos ; Si las decenas de los segundos se han ; incrementado en 6 ; incrementamos los minutos

INTCON,RBIF incmin1 segd

; Verifica si el incremento fue por un interruptor ; Sino fue, incremento los minutos ; Borramos las decenas de los segundos

12

UNIVERSIDAD AUTNOMA DEL CARIBE

clrf incmin1b incf movf sublw btfsc goto return incmin10 clrf incf movf sublw btfsc goto return inchor btfss goto clrf return inchor1 clrf inchor1b incf movf sublw btfsc goto return inchor10 clrf incf movf sublw btfsc clrf return

segd minu,F minu,W .10 STATUS,Z incmin10

; Borramos las decenas de los segundos ; Incrementamos las unidades de los minutos ; Si las unidades de los minutos se han ; incrementado en 10 ; incrementamos las decenas de los minutos

minu mind,F mind,W .6 STATUS,Z inchor

; Borramos las unidades de los minutos ; Incrementamos las decenas de los minutos ; Si las decenas de los minutos se han ; incrementado en 6 ; incrementamos las horas

INTCON,RBIF inchor1 mind

; Verifica si el incremento fue por un interruptor ; Sino fue, incremento las horas ; Borramos las decenas de los minutos

mind horu,F horu,W .10 STATUS,Z inchor10

; Borramos las decenas de los minutos ; Incrementamos las unidades de las horas ; Si las unidades de las horas se han ; incrementado en 10 ; incrementamos las decenas de las horas

horu hord,F hord,W .10 STATUS,Z hord

; Borramos las decenas de las horas ; Incrementamos las decenas de los minutos ; Si las decenas de las horas se han ; incrementado en 10 ; Borramos las decenas de las horas

;*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:* incdias1 incf movf sublw btfsc goto return

diasu,F diasu,W .10 STATUS,Z incdias10

; Incrementamos las unidades de los das ; Si las unidades de los das se han ; incrementado en 10 ; incrementamos las decenas de los das

13

UNIVERSIDAD AUTNOMA DEL CARIBE

incdias10 clrf incf return incmeses1 clrf clrf bsf incmeses1b incf movf sublw btfsc goto return incmeses10 clrf incf return incaos1 clrf clrf bsf incaos1b incf movf sublw btfsc goto return incaos10 clrf incf movf sublw btfsc clrf return

diasu diasd,F

; Borramos las unidades de los das ; Incrementamos las decenas de los das

diasd diasu diasu,0 mesesu,F mesesu,W .10 STATUS,Z incmeses10

; Borramos las decenas de los das ; Borramos e inicializamos las unidades ; de los das ; Incrementamos las unidades de los meses ; Si las unidades de los meses se han ; incrementado en 10 ; incrementamos las decenas de los meses

mesesu mesesd,F

; Borramos las unidades de los meses ; Incrementamos las decenas de los meses

mesesd mesesu mesesu,0 aosu,F aosu,W .10 STATUS,Z incaos10

; Borramos las decenas de los meses ; Borramos e inicializamos las unidades ; de los meses ; Incrementamos las unidades de los aos ; Si las unidades de los aos se han ; incrementado en 10 ; Incrementamos las decenas de los aos

aosu aosd,F aosd,W .10 STATUS,Z aosd

; Borramos las unidades de los aos ; Incrementamos las decenas de los aos ; Si las decenas de los aos se han ; incrementado en 10 ; Borramos las decenas de los aos

;*:*:*:*:*:*:*VERIFICAR REGISTROS*:*:*:*:*:* ;*:*:*:*:*:*:*:*:*:*HORA*:*:*:*:*:*:*:*:*:* verhoru movf horu,W

14

UNIVERSIDAD AUTNOMA DEL CARIBE

sublw btfsc goto return verhord movf sublw btfsc goto return verhor btfss goto clrf clrf return

.4 STATUS,Z verhord

; Verificamos si las unidades de las horas ; han llegado a 4, si han llegado ; verificamos las decenas de las horas

hord,W .2 STATUS,Z verhor

; Verificamos si las decenas de las horas ; han llegado a 2, si han llegado ; verificamos si fue por interruptor

INTCON,RBIF borrarregh1 hord horu

; Verifica si el incremento fue por un interruptor ; Sino fue, reinicio la hora e incremento 1 da ; si fue, reinicio el reloj solamente

;*:*:*:*:*:*:*:*:*:*:*:*MESES*:*:*:*:*:*:*:*:*.*:* vermesesu movf sublw btfsc goto return vermesesd movf sublw btfsc goto return vermeses btfss goto clrf clrf bsf return

mesesu,W .3 STATUS,Z vermesesd

; Verificamos si las unidades de los meses ; han llegado a 4, si han llegado ; verificamos las decenas de los meses

mesesd,W .1 STATUS,Z vermeses

; Verificamos si las decenas de las horas ; han llegado a 1, si han llegado ; verificamos si el incremento fue por interruptor

INTCON,RBIF incaos1 mesesd mesesu mesesu,0

; Verifico si el incrementos fue por un interruptor ; Sino fue, incrementos los aos ; si fue, borramos e inicializamos los meses

;*:*:*:*:*:*:*:*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*:*:*:*:*:* verdiasmes movf btfsc addlw call call

mesesu,W mesesd,0 .10 tabladias descnumero

; Verificamos si los meses han llegado a 10 ; si han llegado, le sumo 10 a las unidades ; Llamamos tabla de los das dependiendo del mes ; Descomponemos el numero en unidades y decenas

15

UNIVERSIDAD AUTNOMA DEL CARIBE

verdiasu movf subwf btfsc goto return verdiasd movf subwf btfsc goto return verdias btfss goto clrf clrf bsf return tabladias addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw descnumero clrf movwf unidad movlw subwf btfsc goto addwf return decena incf goto

diasu,W diasauxu,F STATUS,Z verdiasd

; Verificamos si las unidades de los das son iguales ; si lo son ; pasamos a verificar las decenas de los das

diasd,W diasauxd,F STATUS,Z verdias

; Verificamos si las decenas de los das son iguales ; si lo son ; Verificamos si el incremento fue por interruptor

INTCON,RBIF incmeses1 diasd diasu diasu,0

; Verifico si el incremento fue por interruptor ; Sino fue, incremento los meses ; si fue, borramos e inicializamos los das

PCL,F .0 .32 .29 .32 .31 .32 .31 .32 .32 .31 .32 .31 .32

diasauxd diasauxu .10 diasauxu,F STATUS,C decena diasauxu,F

diasauxd,F unidad

16

UNIVERSIDAD AUTNOMA DEL CARIBE

;*:*:*:*:*:*:*:*:*MOSTRAR REGISTROS*:*:*:*:*:*:*:* ;*:*:*:*:*:*:*:*:*:*:*:*:*HORAS*:*:*:*:*:*:*:*.*:*:*:* mostrarh movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf clrf goto

b'00000101' PORTA segu,W PORTB Retardo_1ms PORTB b'00001001' PORTA segd,W PORTB Retardo_1ms PORTB b'00001101' PORTA minu,W PORTB Retardo_1ms PORTB b'00010001' PORTA mind,W PORTB Retardo_1ms PORTB b'00010101' PORTA horu,W PORTB Retardo_1ms PORTB b'00011001' PORTA hord,W PORTB Retardo_1ms PORTA PORTB principal

; Habilitamos el primer 7-Segmentos ; Mostramos las unidades de los segundos ; Esperamos un tiempo

; Habilitamos el segundo 7-Segmentos ; Mostramos las decenas de los segundos ; Esperamos un tiempo

; Habilitamos el tercer 7-Segmentos ; Mostramos las unidades de los minutos ; Esperamos un tiempo

; Habilitamos el cuarto 7-Segmentos ; Mostramos las decenas de los minutos ; Esperamos un tiempo

; Habilitamos el quinto 7-Segmentos ; Mostramos las unidades de las horas ; Esperamos un tiempo

; Habilitamos el sexto 7-Segmentos ; Mostramos las unidades de las horas ; Esperamos un tiempo

17

UNIVERSIDAD AUTNOMA DEL CARIBE

;*:*:*:*:*:*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*:*:*:*: mostrard movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf movlw movwf movf movwf call clrf clrf goto

b'00000100' PORTA aosu,W PORTB Retardo_1ms PORTB b'00001000' PORTA aosd,W PORTB Retardo_1ms PORTB b'00001100' PORTA mesesu,W PORTB Retardo_1ms PORTB b'00010000' PORTA mesesd,W PORTB Retardo_1ms PORTB b'00010100' PORTA diasu,W PORTB Retardo_1ms PORTB b'00011000' PORTA diasd,W PORTB Retardo_1ms PORTA PORTB principal

; Habilitamos el primer 7-Segmentos ; Mostramos las unidades de los das ; Esperamos un tiempo

; Habilitamos el segundo 7-Segmentos ; Mostramos las decenas de los das ; Esperamos un tiempo

; Habilitamos el tercer 7-Segmentos ; Mostramos las unidades de los meses ; Esperamos un tiempo

; Habilitamos el cuarto 7-Segmentos

; Mostramos las decenas de los meses ; Esperamos un tiempo

; Habilitamos el quinto 7-Segmentos ; Mostramos las unidades de las horas ; Esperamos un tiempo

; Habilitamos el sexto 7-Segmentos ; Mostramos las decenas de las horas ; Esperamos un tiempo

;*:*:*:*:*:*:*RETARDOS*:*:*:*:*:*:*:* CBLOCK

18

UNIVERSIDAD AUTNOMA DEL CARIBE

R_ContA R_ContB R_ContC ENDC Retardo_100ms movlw goto Retardo_50ms movlw goto Retardo_1ms movlw Retardos_ms movwf R1ms_BucleExterno movlw movwf R1ms_BucleInterno nop decfsz goto decfsz goto return END

; Contadores para los retardos.

d'100' Retardos_ms d'50' Retardos_ms

; Esta subrutina de retardo fue tomada del libro ; Microcontrolador PIC16F84 Desarrollo de ; Proyectos de Enrique Palacios.

. d'1' R_ContB d'249' R_ContA

R_ContA,F R1ms_BucleInterno R_ContB,F R1ms_BucleExterno

19

UNIVERSIDAD AUTNOMA DEL CARIBE

Anexo 2. Diagramas, PCB y Fotos del circuito. El diagrama del circuito es: Figura 7. Diagrama del Reloj. Figure 7. Diagram of the Clock.

20

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 8. PCB Vista Real de la Cara Inferior. Figure 8. PCB Real view of the lower face.

Figura 9. PCB Vista Real de la Cara Superior. Figure 9. PCB Real view of the top face.

21

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 10. Impreso De la Cara Inferior. Figure 10. Printed of the lower face.

Figura 11. Diagrama del Reloj. Figure 11. Printed of the top face.

22

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 12. Foto Del circuito de la cara superior. Figure 12. Photo of the top face circuit.

Figura 1 Foto Del circuito de la cara del lado. 13. Figure 13. Photo of the beside face circuit.

23

UNIVERSIDAD AUTNOMA DEL CARIBE

Figura 14. Foto Del circuito de la cara inferior. Figure 14. Photo of the lower face circuit

24

You might also like