You are on page 1of 9

R E L O J

P R O G R A M A B L E

Este es un proyecto bastante completo, con el que aprendemos a manejar los DISPLAY y también los TIMER

e

INTERRUPCIONES

EXTERNAS

 

del

Microcontrolador.

Muy útil para contadores o activar o desactivar algún 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.

D I A G R A M A

D E L

C I R C U I T O

El circuito a continuación funciona con display ánodo común, como notaras la alimentación del display

proviene

del

puerto

0

y

el

puerto

2

es

control

el

de

activación

la

de

display.

los

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 cátodo 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

habilitar los cátodos y

así

seleccionar

luego el ULN2003, para los

 

display

;******************************************************************* RELOJ DIGITAL AJUSTABLE DE 6 DISPLAY ; ; se creo un programa capas de mostrar

;******************************************************************* 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 interrupción 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

; led de velocidad de segundos

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

r1,44h

cjne

r1,#4,salir

mov

r1,45h

cjne

r1,#2,salir

mov

44h,#0

mov

45h,#0

SALIR:

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

r1,44h

cjne

r1,#4,salirex1

mov

r1,45h

cjne

r1,#2,salirex1

mov

44h,#0

mov

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:

 

MOV R7,#0FAH

MOV R6,#01H

BUC:

DJNZ R7,BUC

MOV R7,#0FAH

DJNZ R6,BUC

NOP

RET

END