Sei sulla pagina 1di 9

RELOJ PROGRAMABLE

Este es un proyecto bastante completo, con el que aprendemos a manejar los DISPLAY y tambin los TIMER
e
INTERRUPCIONES
EXTERNAS
del
Microcontrolador.
Muy til para contadores o activar o desactivar algn equipo con este reloj, o tal vez incluso programar y
activar una bomba (bueno es broma no te lo tomes en serio), puede servir como cronometro o
temporizador.

DIAGRAMA DEL CIRCUITO


El circuito a continuacin funciona con display nodo comn, como notaras la alimentacin del display
proviene del puerto 0 y el puerto 2 es el control de la activacin de los display.
En caso de que la luminosidad del mismo no sea lo suficientemente claro (fuerte) si no opaco, lo puedes
arreglar usando un buffer en el puerto 0, un 74LS245 y un ULN2003 en el ctodo de los display, es decir el
puerto 2 pero recuerda que este ULN2003 es inversor as que debes de modificar el programa, caso
contrario de veras agregar un negador 74LS04 y luego el ULN2003, para habilitar los ctodos y as
seleccionar
los
display

;*******************************************************************
;
RELOJ DIGITAL AJUSTABLE DE 6 DISPLAY
; se creo un programa capas de mostrar en 6 displays las horas minutos
; y segundos y de programas a traves de pulsadores los minutos y la hora
; mientras el segundero sigue corriendo la configuracion como los puertos

; a utilizar estan descritos en las definciones y el diagrama a continuacion


; descrito :
;
el puerto cero deve tener una red de resistencias de 10k
;
cristal de 11.0592mhz
;
microcontrolador AT89c51/52/55
; se utilizan las interrupciones externas cero y uno en flanco de bajada
; *******************************************************************
;*
Creado por Raul Alejandro Quispe Larico CELULAR 72039662
;*
Reservados todos los derechos
; *******************************************************************

;------- definicion de puertos


display EQU
P0
;-------interrupcion del reset
ORG 0000H
AJMP programa_principal
;-------rutina para la interrupcion 0
ORG 0003H
acall antireb
acall cero
RETI
;-------rutina de interrupcion del timer 0
ORG 000BH
ACALL INTERRUPCION
reti
;-------Rutina para la interrupcin 1
ORG 0013H
acall antireb
acall uno
reti

;------Programa principal
ORG 30h
programa_principal:
;guarda los numeros a mostrar en el display
MOV 50H,#3FH
MOV 51H,#06H
MOV 52H,#5BH
MOV 53H,#4FH
MOV 54H,#66H
MOV 55H,#6DH
MOV 56H,#7DH
MOV 57H,#07H
MOV 58H,#7FH
MOV 59H,#6FH
; el 3f es para controlar q sea un segundo se
; inicializa en cero
MOV 3FH,#00H
; puerto 2 para controlar que display esta prendido
; se prenden con cero
MOV P2,#0ffH
; memorias 40,41 son para los segundos
MOV 40H,#00H
MOV 41H,#00H
; memorias 42,43 son para los minutos
mov 42h,#00h
mov 43h,#00h
; memorias 44,45 son para las horas
mov 44h,#00h
mov 45h,#00h
; todos inician en cero
;------- configuracion del timer 0 para la interrupcion de 10ms
SETB EA
SETB ET0
MOV TMOD,#01H
MOV TH0,#0DBH
MOV TL0,#0FFH
SETB TR0
;------- configuracion de interrupciones externas

; habilitadas por flabnco de bajada


SETB P3.2
SETB P3.3
SETB EX0
SETB EX1
SETB IT1
SETB IT0

;------- bucle principal


; se muestra aqui constantemente los datos en los displays
PRINCIPAL:
MOV A,40H
ADD A,#50H
MOV R0,A
mov a,@r0
MOV display,a
clr P2.0
LCALL DELAY
setb P2.0

MOV A,41H
ADD A,#50H
MOV R0,A
mov a,@r0
MOV display,a
clr P2.1
LCALL DELAY
setb P2.1

MOV A,42H
ADD A,#50H
MOV R0,A
mov a,@r0
MOV display,a
clr P2.2
LCALL DELAY
setb P2.2

MOV A,43H
ADD A,#50H
MOV R0,A
mov a,@r0
MOV display,a
clr P2.3
LCALL DELAY
setb P2.3

MOV A,44H
ADD A,#50H
MOV R0,A
mov a,@r0
MOV display,a
clr P2.4
LCALL DELAY
setb P2.4

MOV A,45H
ADD A,#50H
MOV R0,A
mov a,@r0
MOV display,a
clr P2.5
LCALL DELAY
setb P2.5

AJMP PRINCIPAL

;------- interrupcion del timer 0


INTERRUPCION:
INC 3FH
MOV R1,3FH
CJNE R1,#64H,SALIR

CPL P2.7
MOV 3FH,#00H
; segundos
INC 40H
MOV R1,40H
CJNE R1,#0AH,SALIR
MOV 40H,#00H
INC 41H
MOV R1,41H
CJNE R1,#06h,SALIR
MOV 41H,#00H
; minuto
INC 42H
MOV R1,42H
CJNE R1,#0AH,SALIR
MOV 42H,#00H
INC 43H
MOV R1,43H
CJNE R1,#06H,SALIR
MOV 43H,#00H
; hora
INC 44H
MOV R1,44H
CJNE R1,#0aH,verificar
MOV 44H,#00H
INC 45H
MOV R1,45H
CJNE R1,#03H,verificar
MOV 45H,#00H
ajmp salir
verificar:
mov
cjne
mov
cjne
mov
mov
SALIR:

r1,44h
r1,#4,salir
r1,45h
r1,#2,salir
44h,#0
45h,#0

; led de velocidad de segundos

MOV TH0,#0DBH
MOV TL0,#0FFH
ret
;------- interrupcion externa CERO
CERO:
INC 44H
MOV R1,44H
CJNE R1,#0aH,verificar
MOV 44H,#00H
INC 45H
MOV R1,45H
CJNE R1,#03H,verificarEX1
MOV 45H,#00H
ajmp salirex1
verificarEX1:
mov
cjne
mov
cjne
mov
mov

r1,44h
r1,#4,salirex1
r1,45h
r1,#2,salirex1
44h,#0
45h,#0

salirex1:
ret
;------- interrupcion externa UNO
UNO:
INC 42H
MOV R1,42H
CJNE R1,#0AH,SALIRex0
MOV 42H,#00H
INC 43H
MOV R1,43H
CJNE R1,#06H,SALIRex0
MOV 43H,#00H
salirex0:
ret

;------- DELAY del antirebotes


antireb:
MOV R3,#0AH
Sal0: MOV R4,#0AH
Sal1: MOV R5,#0aH
Sal2: DJNZ R5,Sal2
DJNZ R4,SAL1
DJNZ R3,SAL0
RET
;------ DELAY para mostrar en los displays
DELAY:

BUC:

MOV R7,#0FAH
MOV R6,#01H
DJNZ R7,BUC
MOV R7,#0FAH
DJNZ R6,BUC
NOP
RET
END

Potrebbero piacerti anche