Reloj digital con 39 alarmas programales. - ALIPSO.COM: Monografías, resúmenes, biografias y tesis gratis.
Aprende sobre marketing online, desarrollo de sitios web gratis en Youtube
Suscribite para recibir notificaciones de nuevos videos:
Viernes 29 de Marzo de 2024 |
 

Reloj digital con 39 alarmas programales.

Imprimir Recomendar a un amigo Recordarme el recurso

DEFINICION DEL PROYECTO, CODIGO FUENTE, PARTES DEL PROGRAMA, INICIALIZACION DE DATOS, CONFIGURACION DE LA HORA Y ALARMAS, CONFIGURACION DE LOS TIMERS, ALGORITMO DEL RELOJ Y ACTIVACION DE LA ALARMA, CODIFICADOR DE DECIMAL A 7 SEGMENTOS, SELECCIÓN DE ENCEND

Agregado: 29 de AGOSTO de 2000 (Por ) | Palabras: 4689 | Votar | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Electrónica >
Material educativo de Alipso relacionado con Reloj digital con alarmas programales
  • Sociedad: sociedad anonima.acta constitutiva.:
  • Propuesta sobre el regimen juridico especial de proteccion a los pueblos indígenas en aislamiento voluntario y en contacto inicial del Peru: Propuesta sobre el régimen jurídico especial de protección a los pueblos indígenas en aislamiento voluntario y en contacto inicial del Perú
  • Biografia y vida de condes de Montijo: Breve Biografia de condes de Montijo

  • Enlaces externos relacionados con Reloj digital con alarmas programales

         Reloj Digital con 39 Alarmas Programables0001000100100100111110100100010001000100101001010100100101010010011000101001001010100010101010101001010101001010010101001010101001010100101010010101010101001010101010101000010001001001001111101001000100010001001000101001001010101010010101001001010100100100101010101010010101010010100101010010101010010101001010100101010101010010101010101010000100010010010011111010010001000100010010001010010010101010100101010010010101001001001010101010100101010100101001010100101010100101010010101001010101010100101010101010100001000100100100111110100100010001000100100010100100101010101001010100100101010010010010101010101001010101001010010101001010101001010100101010010101010101001010101010101000010001001001001111101001000100010001001000101001001010101010010101001001010100100100101010101010010101010010100101010010101010010101001010100101010101010010101010101010000100010010010011111010010001000100010010001010010010101010100101010010010101001001001010101010100101010100101001010100101010100101010010101001010101010100101010101010100001000100100100111110100100010001000100100010100100101010101001010100100101010010010010101010101001010101001010010101001010101001010100101010010101010101001010101010101000010001001001001111101001000100010

    RELOJ DIGITAL CON 39 ALARMAS PROGRAMABLES.

    DEFINICION DEL PROYECTO

    El proyecto consiste en diseñar un reloj digital capaz de almacenar 39 alarmas programables y mandar por el puerto 1 (bit 0) la señal de alarma. Gracias a unos displays de 7 segmentos conectados al puerto 2 podremos visualizar la hora actual y las alarmas programadas y a traves de unos leds podremos visualizar los distintos estados en el que se encuentra el microcontrolador. Para controlar las distintas funciones del reloj lo haremos a traves de unos pulsadores miniatura los cuales estaran conectados a 3 pines del puerto 1.

    CODIGO FUENTE

    USES 80537

     ORG 00H

    DB 63D,06D,91D,79D,102D,109D,125D,07D,255D,111D

    HORA EQU 30H

    MIN EQU 31H

    SEG EQU 28H

    CONTADOR  EQU 29H

    ALARMA EQU 32H

    MAXIMO EQU 20H

    MOV R5,#11H

    MOV P1,R4

    SETB P1.6

    MOV R0,#30H

    PETICION ACALL DISPLAYS-MANDAR

    JB 90H.1,BOTON1

    JB 90H.3,BOTON3

    JB 90H.2,BOTON2

    AJMP PETICION

    BOTON1: MOV MAXIMO,#24H

    INC R3

    ACALL DECIMAL

    JB P1.6,MAX_HORA

    MOV MAXIMO,#60H

    MAX_HORA: MOV A,R3

    CJNE A,MAXIMO,SALTO24H

    MOV R3,#00H

    MOV A,#00H

    SALTO24H MOV @R0,A

     AJMP PETICION

    BOTON2: CPL P1.6

    MOV R3,#00H

    INC R0

    CJNE @R0,#0FFH,PETICION

    AJMP SETUP_OK

    BOTON3: MOV A,R0

    CLR C

    RRC A

    JC PETICION

    SETUP_OK MOV @R0,#0FFH

    MOV 89H,#02H

    MOV 88H,#10H

    MOV 8CH,#0FEH

    INICIALIZAR: MOV R0,#30H

    MOV R2,#32H

    MOV CONTADOR, 89H

    PUESTA0 MOV R6,#01H

    MOV R7,#01H

    INC SEG

    MOV A,SEG

    CJNE A,#3CH,CUENTA

    MOV SEG,R4

    AJMP MINUTOS

    CUENTA: ACALL DISPLAYS-MANDAR

    ACALL CHEQUEO

    MOV A,88H

    CJNE A,#30H,CUENTA

    MOV 88H,#10H

    DJNZ R7,CUENTA

    MOV R7,#01H

    DJNZ R6,CUENTA

    AJMP PUESTA0

    MINUTOS: INC MIN

    CLR 90H.0

    MOV A, MIN

    CJNE A,#60H, CONVERTIR_MIN

    AJMP HORAS

    CONVERTIR_MIN MOV R3,MIN

    ACALL DECIMAL

    MOV MIN,R3

    MOV A,MIN

    CJNE A,#60H, CUENTA

    HORAS: MOV MIN,R4

    INC HORA

    MOV A, HORA

    CJNE A,#24H, CONVERTIR_HORA

    MOV HORA,R4

    AJMP INICIALIZAR

    CONVERTIR_HORA MOV R3,HORA

    ACALL DECIMAL

    MOV HORA,R3

    MOV A,HORA

    CJNE A,#24H, CUENTA

      AJMP INICIALIZAR

    ACTIVAR:  SETB 90H.0

    INC R2

    INC R2

    MOV A,R2

    MOV R0,A

    CJNE @R0,#0FFH,FIN_ALARMAS

    MOV R2,#32H

    FIN_ALARMAS: MOV R0,#30H

    RET

    CHEQUEO: MOV R0,#30H

    MOV A, R2

    MOV R1,A

    BUCLE: MOV A, @R0

    XRL A, @R1

    JNZ SALIR

    DJNZ CONTADOR, BUCLE1

    ACALL ACTIVAR

    BUCLE1: INC R0

    INC R1

    AJMP BUCLE

    ACALL ACTIVAR

    SALIR:  MOV R0,#30H

    MOV CONTADOR, #02H

    RET

    DECIMAL:  MOV A,#0AH

    ANL A,R3

    CJNE A,#0AH, NO_TOCAR

    MOV A,R3

    ADD A,#06H

    XCH A,R3

    NO_TOCAR RET

    DISPLAYS ACALL NPN

    MOV A,#0F0H

    ANL A,@R0

    SWAP A

    ACALL MANDAR

    ACALL NPN

    MOV A,#0FH

    ANL A,@R0

    ACALL MANDAR

    RET

    MANDAR MOVC A, @A+DPTR

    MOV P2,A

    RET

    DISPLAYS-MANDAR: ACALL DISPLAYS

    INC R0

    ACALL DISPLAYS

    DEC R0

    RET

    NPN:  MOV A,R5

    MOV P3,A

    MOV P3,R4

    RR A

    SEGUIR MOV R5,A

    RET

    END

    .

    PARTES DEL PROGRAMA

    Todo el funcionamiento del reloj esta escrito en ensamblador, es decir, en lenguaje de bajo nivel con un limite de 256 bytes de memoria interna por chip (8052). En el programa se puede diferenciar 6 partes diferentes:

    -Inicializacion de datos.

    -Configuracion de las horas y minutos.

    -Configuracion de registros para emular un segundo(TIMERS).

    -Algoritmo del reloj y activacion dela alarma.

    -Codificador de hexadecimal a decimal.

    -Codificador de decimal a 7 segmentos.

    INICIALIZACION DE DATOS

    La funcion de esta parte es la de almacenar unos datos en la memoria para poner en marcha al reloj. Hay dos clases de datos en nuestro programa:

    -         Datos temporales.

    -         Constantes.

    Los datos temporales se utilizan para poner en marcha el reloj. Estos datos cambiaran continuamente según el algoritmo empleado. Un ejemplo de dato temporal puede ser el registro que contiene la direccion de la ultima alarma programada.

    Las constantes son datos que no van a cambiar en el transcurso del programa y que nos sirven de referencia. Un ejemplo de constantes es la tabla de datos correspondiente a la excitación de los displays de 7 segmentos.

    TABLA DE DATOS DE EXCITACIóN DISPLAY 7 SEGMENTOS.

    USES 80537

    ORG 00H

    DB 63D,06D,91D,79D,102D,109D,125D,07D,255D,111D

    ASIGNACIONES DE MEMORIA.

    HORA EQU 30H à HORA ACTUAL

    MIN EQU 31H à MINUTO ACTUAL

    SEG EQU 28H à SEGUNDOS TRANSCURRIDOS

    CONTADOR EQU 29H à ENCARGADO DE ACTIVAR LA ALARMA SI LOS 4

    BYTES COINCIDEN(30H CON 32H Y 31H CON 3H, ETC)

    ALARMA EQU 32H à HORA 1º ALARMA

    MAXIMO EQU 20H à ENCARGADO DE QUE NO PONGAMOS + DE 24

    HORAS NI + DE 60 MINUTOS

    CONFIGURACION DE LA HORA Y ALARMAS

    Para configurar la hora y las alarmas lo hacemos mediante pulsadores en miniatura conectados al puerto 1, estos, al pulsarlos, enviaran tension a una determinada partilla del microcontrolador y ejecutara la parte del programa que le corresponde a ese boton. En nuestro proyecto disponemos de 3 botones:

    -BOTON1 à INCREMENTA EL VALOR DE LAS HORAS Y MINUTOS.

    -BOTON2 à GRABAR LOS DATOS EN MEMORIA.

    -BOTON3 à PUESTA EN MARCHA DEL RELOJ.

    PARTE DEL PROGRAMA CONTROLADA POR EL BOTON1.

     

    BOTON1: MOV MAXIMO,#24H

    INC R3

    ACALL DECIMAL

    JB P1.6,MAX_HORA

    MOV MAXIMO,#60H

    MAX_HORA: MOV A,R3

    CJNE A,MAXIMO,SALTO24H

    MOV R3,#00H

    MOV A,#00H

    SALTO24H: MOV @R0,A

    AJMP PETICION

    Lo primero que hacemos es llevar a MAXIMO el valor 24 que corresponde al maximo de horas que tiene un dia. Incrementamos R3 que contiene la veces que hemos pulsado el boton y llamamos a una subrutina llamada DECIMAL que lo que hace es que cuando el byte bajo de R3 sea 0AH ponga 00H ya que nuestro reloj va a visualizar los valores en numeracion decimal. Una vez convertido el dato, preguntamos si el bit 6 del puerto 1 esta puesto a 1 para poner el limite de 24 o 60, si esta puesto a uno entonces cuando hayamos pulsado 24 veces el pulsador, R3 pasara a valer 00H que corresponde a las doce de la noche. Si por el contrario, el bit 6 del puerto 1 esta a 0, estonces cargaremos en MAXIMO el valor 60 y esta vez R3 no parsara a 00H cuando llegue a 24 sino cuando llegue a 60. De esta manera nos aseguramos que nunca vamos a poner mas de 24 horas en el byte de las horas ni mas de 60 minutos en el byte de los minutos.

    Una vez que tengamos el dato en R3 lo graba en la posicion 30H (MOV @R0,A) para que una subrutina pueda llevar el contenido de 30H y poderlo visualizarlo en los displays.

    PARTE DEL PROGRAMA CONTROLADA POR EL BOTON2.

     BOTON2: CPL P1.6 à

    MOV R3,#00H

    INC R0

    CJNE @R0,#0FFH,PETICION

    AJMP SETUP_OK

    Una vez que pulsemos el boton 2, el bit P1.6 se pondra a 0 lo que indicara que los proximos datos a introducir van a ser minutos. Borramos los datos anteriores contenidos en R3 e incrementamos R0 para después grabar en la direccion 31h los minutos de la hora actual cuando pulsemos el boton1. Tambien compara si la proxima direccion de memoria equivale a FFH, si es así, el programa entendera que se ha completado de introducir las 39 alarmas y saltara a la etiqueta AJMPM SETUP_OK.

    PARTE DEL PROGRAMA CONTROLADA POR EL BOTON3.

     

    BOTON3: MOV A,R0

    CLR C

    RRC A

    JC PETICION

    Al pulsar el boton 3 indicamos que hemos completado de introducir todos los datos. Una vez que pulsemos el boton 3, el programa comprobara si hemos grabado la horas y los minutos. Si hemos introducido solo horas y no los minutos y pulsamos el boton3, el programa seguira dentro de la parte de configuracion de los minutos y todavia no se habra puesto en marcha el reloj.

    Si por el contrario lo hemos configurado bien, las siguientes instrucciones a ejecutar son las siguientes:

    SETUP_OK MOV @R0,#0FFH

    MOV 89H,#02H

    MOV 88H,#10H

    MOV 8CH,#0FEH

     INICIALIZAR: MOV R0,#30H

    MOV R2,#32H

     MOV CONTADOR, 89H

     En esta parte graba mediante el direccionamiento indirecto el dato FFH para que, cuando vayamos comprobando cuantas alarmas hemos programado, sepa el programa cual ha sido la ultima y vuelva a la primera y ademas configura los timers para llevar la cuenta de los ciclos maquina. El reloj ira inspecionando la tabla de datos y cuando encuentre el dato FFH volvera al principio de la tabla.

    En R0 vamos a llevar, como al principio, el dato 30h que corresponde a la direccion de las horas actuales y en R2 la de las alarmas. En la posicion apuntada por CONTADOR vamos a llevar el dato que contiene la posmem 89h que es exactamente un 02h. Este byte es el encargado de averiguar cuantos bytes coinciden entre la hora actual y la de la alarma. Por ejemplo: Si la hora actual es 16:00 y la de la alarma es 16:05 el contador mediante una serie de instrucciones se decrementara en 1 ya que solo coinciden en la horas. Si coincidiesen tambien en minutos, el contador se pondria a cero y saltariamos a la señal de alarma.

    CONFIGURACION DE LOS TIMERS

    Esta parte es el corazon del reloj ya que es la parte del programa que lleva la cuenta de los ciclos maquina para emular los segundos de nuestro reloj. De las diversas formas de configuracion de los timers, hemos seleccionado el modo 2 ( temporizador con auto-recarga) y controlado por hardware.

    MOV 89H,#02H à MODO 2

    MOV 88H,#10H à HABILITAR TEMPORIZADOR

    MOV 8CH,#055H à VALOR CORRESPONDIENTE A LA AUTO-RECARGA

    Nuestro chip lleva internamente un reloj interno de 12MHz.Cada ciclo maquina tarda un microsegundo en completarse por lo tanto si los timers cuentan ciclos maquina debemos contar exactamente un millon de ciclos para que equivalga a un segundo. Como los registros de auto-recarga son de 8 bits, como maximo podremos contar 256 c.m (ciclos maquina) por lo que debemos auxiliarnos de unos registros auxiliares para llevar la cuenta.

    METODO PARA CONTAR UN SEGUNDO.

    PUESTA0 MOV R6,#50D

    MOV R7,#100D

    INC SEG

    MOV A,SEG

    CJNE A,#3CH,CUENTA

    MOV SEG,R4

    AJMP MINUTOS

    CUENTA: ACALL DISPLAYS-MANDAR

    MOV A,88H

    CJNE A,#30H,CUENTA

    MOV 88H,#10H

    DJNZ R7,CUENTA

    MOV R7,#100D

    DJNZ R6,CUENTA

    AJMP PUESTA0

    El registro de auto-recarga lo ponemos a 55D para que cuando alcance FFH empiece desde 55D, así contara exclusivamente 200D cada vez. Cada vez que sobrepase FFh iremos decrementando el valor del R6 que inicialmente vale 50D y cuando R6 llegue a cero haremos lo mismo con R7 hasta que llegue igualmente a cero. Una vez que R7 llegue a cero significara que hemos contado 1000000 c.m (200x50x100). Inmediatamente después, volvemos a poner en los registros su valor inicial para contar el 2º y asi sucesivamente. En la posmem apuntada por SEG se encuentra el numero de segundos transcurridos y mientras que no excendan de 60D=3CH, esta parte del programa va a seguir haciendo lo mismo que antes pero si por el contrario llega a 3CH entoces los segundos se inicializan a 00H=contenido de R4 y ademas se incrementa la posmem MINUTOS.

    ALGORITMO DEL RELOJ Y ACTIVACION DE LA ALARMA.

     Esta parte del programa es la que mas bytes de memoria ocupa ya que los datos va a pasar por distinta fases para que el reloj funcione correctamente.

    MINUTOS: INC MIN

    MOV A, MIN

    CJNE A,#60H, CONVERTIR_MIN

    AJMP HORAS

    CONVERTIR_MIN MOV R3,MIN

    ACALL DECIMAL

    MOV MIN,R3

    ACALL CHEQUEO

    MOV A,MIN

    CJNE A,#60H, CUENTA

    HORAS: MOV MIN,R4

    INC HORA

    MOV A, HORA

    CJNE A,#24H, CONVERTIR_HORA

    AJMP INICIALIZAR

    Una vez transcurrido un minuto, lo primero que hacemos es llevar el contenido de MINUTOS al acumulador para compararlo con el valor 60h, si es igual, ponemos a 00H MINUTOS y saltamos a la etiqueta HORAS. Si por el contrario no es igual a 60H, lo que hacemos es llevar a R3 el contenido de MINUTOS y llamamos a la subrutina DECIMAL que se encarga de pasar los datos de hexadecimal a decimal. Una vez tengamos el dato convertido en R3 lo pasamos a MINUTOS y llamamos a la subrutina Chequeo que es la encargada de verificar los bytes de las horas actuales y alarmas. Una vez verificado estos datos hacemos el mismo proceso de los minutos a las horas,es decir, llevamos al acumulador el valor de HORAS para compararlo con el valor 24D y si es igual poner HORAS a 00H, etc.

    El algoritmo empleado para activar la alarma es mas sencillo de entender. La hora actual se compone de 2 bytes, uno para las horas y otro para los minutos al igual que la hora de la alarma entonces solo basta comparar el byte de las horas actuales con el byte de las horas de alarmas, etc. Todo este algoritmo lo hace posible una cadena de subrutina que unidas de una forma determinada hace posible este proceso.

    ALGORITMO DE CHEQUEO

    CHEQUEO MOV R0,#30H

    MOV A, R2

    MOV R1,A

    BUCLE: MOV A, @R0

    XRL A, @R1

    JNZ SALIR

    ACALL CHEQUEO

     
    DJNZ CONTADOR, BUCLE1

    ACALL ACTIVAR

    BUCLE1: INC R0

    INC R1

    AJMP BUCLE

    SALIR: MOV R0,#30H

    MOV CONTADOR, #02H

    RET

    Esta subrutina graba en R0 la posicion 30h que corresponde a las horas y lleva R2 a R1 que va a contener la hora de alarma. Mediante direccionamiento indirecto vamos grabando los bytes en R0 y haciendo la AND logica para saber si esos dos bytes (R0 y R1 coinciden). Si coinciden decrementamos el valor de CONTADOR e incrementamos en 1 los valores de R0 y R1 para comparar los siguientes bytes y se hace la misma operación. Si coinciden otra vez quiere decir que han coincidido las horas y los minutos y entonces llamaremos a una subrutina encargada de dar la señal de alarma. En el caso de que no coincidan los bytes de las horas, R0 volvera a valer 30H y R1 la direccion de la ultima alarma junto a CONTADOR que volvera a valer 02H.

    ALGORITMO DE ACTIVAR


    ACTIVAR: SETB 90H.0

    INC R2

    INC R2

    ACALL ACTIVAR

     
    MOV A,R2

    MOV R0,A

    CJNE @R0,#0FFH,FIN_ALARMAS

    MOV R2,#32H

    FIN_ALARMAS: MOV R0,#30H

    RET

    Nuestra señal de alarma la vamos a enviar por el bit 0 del puerto 1 y va a estar activa durante 1 minuto. Luego incrementamos R2 dos veces para grabar en el mismo R2 la proxima alarma y ademas comparamos si el valor de R2 es FFh lo que significara que ya no hay mas alarmas y debe empezar la tabla de alarmas desde el principio (32H)

    CODIFICADOR DE HEXADECIMAL A DECIMAL.

    Una vez implantado nuestro algoritmo debemos visualizarlo al exterior pero surge un problema, el 8052 interpreta los datos en hexadecimal y no son los datos legibles para visualizarlo en los displays ni tampoco a la hora de buscar su equivalente de 7 segmentos ( Mirar tabla de datos de los 7 segmentos). Para ello debemos construirnos un sencillo codificador:

    DECIMAL: MOV A,#0AH

    ANL A,R3

    CJNE A,#0AH, NO_TOCAR

    MOV A,R3

    ADD A,#06H

    XCH A,R3

    NO_TOCAR: RET

    En el registro R3 se guarda el valor a convertir y se hace la AND logica con el dato 0AH. Si el valor de R3 es un 0AH entonces su equivalente seria 00D y lo hacemos sumandole el numero 6H al acumulador y despues lo llevamos todo sumado a R3. Por ejemplo: tenemos 9H minutos al aumentar los minutos no quedaria AH minutos pero le sumamos 6 y nos da 10 minutos. Asi lo hacemos con todos los digitos del reloj.

    CODIFICADOR DE DECIMAL A 7 SEGMENTOS.

    Una vez tengamos todos los datos pasados a decimal en la memoria del 8052, solo hace falta mandarlos al exterior porque seria inutil el reloj si no visualizamos los datos. Para ello, nos habiamos implementado una tabla de datos correspondientes a la excitación de las patillas de un display de 7 segmentos, la cual, va a empezar en la posicion 00h de nuestro programa. La tabla de datos va a tener un tamaño de 10 elementos que corresponden a los numeros del 0 al 9. Para que funcione correctamente, debemos llevar al DPTR el dato 00H para que sepa el 8052 que en 00H empieza nuestra tabla. Una vez hecho esto lo unico que se hace es llevar al acumulador el numero que queremos que se visualice en los displays y mediante la orden MOVC A,@A + DPTR localizamos el dato de la tabla. Ejemplo: Si llevamos el numero 8 al acumulador, entonces quedaria MOVC A,@ 8 + 00H y el dato cuyo orden es el 8 es el 255D es decir,11111111B que es lo mismo que tener todas las patillas encendidas.

    0 1 2 3 4 5 6 7 8 9

    63D,06D,91D,79D,102D,109D,125D,07D,255D,111D

    DISPLAYS ACALL NPN

    MOV A,#0F0H à Obtenemos el valor del primer digito

    ANL A,@R0 à Obtenemos el valor del primer digito

    SWAP A

    ACALL MANDAR

    ACALL NPN

    MOV A,#0FH à Obtenemos el valor del segundo digito

    ANL A,@R0 à Obtenemos el valor del segundo digito

    ACALL MANDAR

    RET

    MANDAR  MOVC A, @A+DPTR

    MOV P2,A

    RET

    Una vez que tenemos el dato que excitara a los displays, lo mandamos directamente al exterior mediante el puerto 2 cuyas patillas estan conectadas a las 8 patillas de 4 displays, en total 32 patillas. Al haber 32 patillas necesitariamos 4 puertos para visualizar la hora y los minutos pero solo disponemos de 1. En este caso se utiliza la técnica blanking (parpadeo) que consiste en apagar y encender cada uno de los displays muy rapido de modo de que a una cierta frecuencia, la retina retenga la luz de los displays y nos de la sensacion de que estan todos encendidos pero en realidad este un display encendido cada vez. Para ello se tiene que sincronizar la transmision del dato con el encendido del display correspondiente y lo hacemos con la subrutina NPN que nos recuerda a los transistores NPN por que ellos van a tener la funcion de conectar a masa los displays por el puerto 3.

    PUERTO 3

     


    SELECCIóN DE ENCENDIDO DE LOS DISPLAYS

    La selección de los displays la va hacer la subrutina NPN que va a enceder los displays a una velocidad muy alta, del orden de los MHz, alternandose los displays. Una vez que tengamos el primer dato, que va a ser el primer digito de las horas, debemos encender unicamente el primer display y cuando obtengamos el segundo datos, el segundo display. Los bits que van a enceder los displays pertenecen al puerto 3( P3.3àP3.0). A continuacion se explica el funcionamiento de la subrutina NPN:

    NPN: MOV A,R5

    MOV P3,A

    MOV P3,R4

    RR A

    MOV R5,A

    RET

    En R5 se guarda el ultimo bit correspondiente al ultimo display encendido, se manda al puerto 3 mediante el acumulador.Inmediatamente despues se apagan todos los displays y se rota el acumulador para despues guardar en R5 otra vez el ultimo display encendido. Se deben apagar inmediatamente para que otros datos no se visualicen en los displays que no les corresponde. Como al principio, R5 contiene el dato 11D=10001000, los displays los podemos conectar tanto a los primeros 4 bits del puerto 3 como a los 4bits de mas peso, porque al rotar sin carry el valor 11D vamos a obtener el mismo resultado que si rotasemos solo los primeros 4 bits que seria equivalente al dato 08D=00001000.


    Cuadro de texto: PUERTO INACTIVO

    DISPLAYS

     

    PUERTO 1

     

    PUERTO 3

     

    BOTONES

     

    ENC. DISPLAYS

     

    ALARMA

     


    ESQUEMA GLOBAL DE ENTRADA Y SALIDA.

    DIAGRAMAS DE FLUJO.

    Cuadro de texto: INICIALIZACION DE DATOS

    Cuadro de texto: CONFIGURACION  DE LA HORA Y ALARMAS

    Cuadro de texto: PUESTA EN MARCHA DEL RELOJ

    Cuadro de texto: SENAL DE ALARMA DURANTE 1 MINUTO

    Diagrama general del programa.

    Cuadro de texto: INICIO

    Cuadro de texto: Cargar tabla de datos displays 7 s.

    1 LINEA

    Cuadro de texto: Cargar direcciones de memoria

    6 LINEAS

    Cuadro de texto: Llamada a los pines de los puertos para verficar botones

    25 LINEAS

    Cuadro de texto: Inicializar datos correspondientes a la marcha del reloj

    3 LINEAS

    Cuadro de texto: Esperar retardo de un segundo via software

     19 LINEAS

    Cuadro de texto: Incrementar minutos y horas

    19 LINEAS

    Cuadro de texto: Chequeo de alarma

    22 LINEAS

    Cuadro de texto: Doble conversion de datos:
Hexa. a decimal
Dec.a 7 segmentos

    20 LINEAS

    Cuadro de texto: Mandar a los puertos los datos 6 LINEAS

    Diagrama por partes del programa.


    ESQUEMAS ELECTRICOS DEL RELOJ.


    RESUMEN DE PATILLAJE.

    1. Bit 0 del puerto 1 à Salida de alarma.

    2. Bit 1 del puerto 1 à Entrada boton 1.

    3. Bit 2 del puerto 1 à Entrada boton 2.

    4. Bit 3 del puerto 1 à Entrada boton 3.

    5. Bit 4 del puerto 1 à No usado.

    6. Bit 5 del puerto 1 à No usado.

    7. Bit 6 del puerto 1 à No usado.

    8. Bit 7 del puerto 1 à No usado.

    9. Reset à Reinicio del reloj (opcion disponible).

    10. Bit 0 del puerto 3 à Salida habilitacion display nº4.

    11. Bit 1 del puerto 3 à Salida habilitacion display nº3.

    12. Bit 2 del puerto 3 à Salida habilitacion display nº2.

    13. Bit 3 del puerto 3 à Salida habilitacion display nº1.

    14. Bit 4 del puerto 3 à * Salida habilitacion display nº4.

    15. Bit 5 del puerto 3 à * Salida habilitacion display nº3.

    16. Bit 6 del puerto 3 à * Salida habilitacion display nº2.

    17. Bit 7 del puerto 3 à * Salida habilitacion display nº1.

    18. XTAL2

    19. XTAL1

    20. Vss à Conexión a negativo.

    21. Bit 0 del puerto 2 à Salida excitación segmento A.

    22. Bit 1 del puerto 2 à Salida excitación segmento B.

    23. Bit 2 del puerto 2 à Salida excitación segmento C.

    24. Bit 3 del puerto 2 à Salida excitación segmento D.

    25. Bit 4 del puerto 2 à Salida excitación segmento E.

    26. Bit 5 del puerto 2 à Salida excitación segmento F.

    27. Bit 6 del puerto 2 à Salida excitación segmento G.

    28. Bit 7 del puerto 2 à No usado.

    29. PSEN.

    30. ALE/PROG.

    31. EA/VPP.

    32. Bit 7 del puerto 0 à No usado.

    33. Bit 6 del puerto 0 à No usado.

    34. Bit 5 del puerto 0 à No usado.

    35. Bit 4 del puerto 0 à No usado.

    36. Bit 3 del puerto 0 à No usado.

    37. Bit 2 del puerto 0 à No usado.

    38. Bit 1 del puerto 0 à No usado.

    39. Bit 0 del puerto 0 à No usado.

    40. Vcc à Conectado a positivo.

    * La salidas para habilitar los displays puede ser tanto los primeros 4 bits de puerto 3 como los 4 bits ultimos.

    MANUAL DE USUARIO.

    Una vez montado los componentes del reloj y conectado a la alimentacion, en los displays se deben visualizar 4 ceros, eso significa que se ha montado bien y el microcontrolador se ha puesto en marcha. Para configurar la hora debemos pulsar tantas veces el interruptor 1 como horas deseemos y cuando tengamos ya las horas elegidas, debemos pulsar el interruptor 2 y pulsar el interruptor 1 tantas veces como minutos deseemos. Estos dos pasos son los unicos que ha que seguir para poner la hora actual. Para configurar las 39 alarmas, debe seguir los pasos anteriores ya que los siguientes datos que introduzcamos van a ser horas y minutos correspondientes a las alarmas. Una vez hayamos introducido los minutos correspondientes a la ultima alarma programada debemos pulsar el interruptor 3 y el reloj se pondra en marcha. El reloj se pondra automaticamente en marcha si introducimos las 39 alarmas completas. Por motivos de espacio en memoria de programa, no se ha implementado un boton de reset por lo que si se hubiera introducido algun dato erroneo, se debe desconectar el reloj de la alimentacion y volverlo a conectar.

    POSIBLES APLICACIONES.

    Al tratarse de un reloj digital con multiples alarmas, su campo de aplicación es muy grande, puede utilizarse como activador de la sirena de un colegio, como dispositivo controlador de la caldera de la calefaccion asi como un reloj despertador conectado a un transformador de alimentacion.

    PRODUCTOS EN EL MERCADO.

    En el mercado existe este tipo de producto pero con un diseno totalmente distinto, en vez de displays tienen pantalla LCD y el modo de configuracion es de tipo manual o automatico. El manual consta de una rueda con dientes seleccionables marcados de 5 en 5 minutos y la duraccion de la alarma o la activacion del dispositivo depende del numero de dientes seleccionados. Tambien existen relojes digitales cuyo funcionamiento es muy parecido al nuestro pero que son mas sofisticados y precisos

    SITUACION EN EL MERCADO.

    Los relojes comercializados tienen una posicion estable en el mercado pero no tienen una marca que destaques en la demas ya que cualquier reloj puede cumplir perfectamente con su objetivo. Puede que se vendan mas los relojes de configuracion manual al ser mas faciles de entender y configurar que los de configuracion automatica pero estos ultimos, al estar compuestos por circuitos integrados, son mas dificiles que fallen frente a los otros

    PARTES DE LAS QUE CONSTA.

    Nuestro reloj digital se compone esencialmente del microcontrolador de 40 pines, 4 displays de 7 segmentos y un rele o un circuito oscilante conectado al pin de salida de la alarma. Como es logico, tambien llevara componentes electronicos como resistencias a cada una de las patillas de los displays, unos transistores para activar los displays, un 555 configurado de tal manera que nos sirva de oscilador para emitir el sonido de la alarma y un transformador de 220 a 12V para alimentar todo el reloj.

    CONDICIONES DE FUNCIONAMIENTO.

    Nuestro reloj no tiene unas condiciones de funcionamiento exigentes, no va a necesitar ningun tipo de disipacion ni de mantenimiento a menos que se deteriore o falle algun componente. Debemos tener en cuenta que los displays se van a encender y apagar a una velocidad de unos cuanto MHz por lo que los 4 transistores que activan dichos displays deben contener las siglas BF = alta frecuencia para un funcionamiento correcto.

    FUNCIONES NO IMPLEMENTADAS.

    Por problemas de espacio en memoria de programa algunas funciones de los relojes digitales actuales no se han podido implementar en nuestro chip. Dichas funciones son las siguientes:

    -No se ha podido suprimir el cero que aparece a la izquierda del 2º digito de la hora à 05:30.

    -A la hora de visualizar la hora en la parte de configuracion de horas y alarmas no vamos a ver la hora completa sino que la vamos a ver por partes. à Si queremos poner la 15:30, se vera en los displays: 15:00 cuando hayamos puesto 15, le damos al boton 2 y ponemos 30 y se visualizara 30:00. Al finalizar la parte de configuracion la hora se vera como siempre 15:30.

    -En los pines de los botones va a aparecer el fenomeno de los rebotes por lo que si pulsamos durante un instante los botones va a ser imposi-ble poder ajustar la hora, asi que se ha tenido que implementar con resistencias.

    TIEMPO DE DESARROLLO.

    Tiempo de desarrollo = 2 semanas.

    Tiempo de ejecucion = 2 dias.

    Tiempo de pruebas = 1 dia.

    DESARROLLADO POR:

    DAVID ORTEGA TARRO

    2º CURSO DE DESARROLLO DE PRODUCTOS ELECTRONICOS. J

    Votar

    Ingresar una calificación para del 1 al 10, siendo 10 el máximo puntaje.

    Para que la votación no tenga fraude, solo se podrá votar una vez este recurso.

    Comentarios de los usuarios


    Agregar un comentario:


    Nombre y apellido:

    E-Mail:

    Asunto:

    Opinión:



    Aún no hay comentarios para este recurso.
     
    Sobre ALIPSO.COM

    Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.

    Contacto »
    Contacto

    Teléfono: +54 (011) 3535-7242
    Email:

    Formulario de Contacto Online »