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 ComentarioCategoría:
Apuntes y MonografÃas >
Electrónica >
Material educativo de Alipso relacionado con
Reloj digital con alarmas programalesPROCESO DE CONTROL DE CAMBIOS GUIADO POR LA ARQUITECTURA DEL SOF: RESUMEN, INTRODUCCION, SOFTWARE CONFIGURATION MANAGEMENT , SOFTWARE ARCHITECTURE , PROPUESTA, CONCLUSIONES, TRABAJOS FUTUROS , BIBLIOGRAFIA.Confeccion de graficos: Convenios: comunica incumplimiento del acuerdo. solicita sea rescindido.se nombre martillero.: Enlaces externos relacionados con
Reloj digital con alarmas programales
0001000100100100111110100100010001000100101001010100100101010010011000101001001010100010101010101001010101001010010101001010101001010100101010010101010101001010101010101000010001001001001111101001000100010001001000101001001010101010010101001001010100100100101010101010010101010010100101010010101010010101001010100101010101010010101010101010000100010010010011111010010001000100010010001010010010101010100101010010010101001001001010101010100101010100101001010100101010100101010010101001010101010100101010101010100001000100100100111110100100010001000100100010100100101010101001010100100101010010010010101010101001010101001010010101001010101001010100101010010101010101001010101010101000010001001001001111101001000100010001001000101001001010101010010101001001010100100100101010101010010101010010100101010010101010010101001010100101010101010010101010101010000100010010010011111010010001000100010010001010010010101010100101010010010101001001001010101010100101010100101001010100101010100101010010101001010101010100101010101010100001000100100100111110100100010001000100100010100100101010101001010100100101010010010010101010101001010101001010010101001010101001010100101010010101010101001010101010101000010001001001001111101001000100010
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