Programa de reloj del microcontrolador
temporizadorT EQU 0Ch; tecla de menú para entrar/salir del estado de configuración
tecla de desplazamiento izquierdaL 46h; >rightR EQU 47h; tecla de desplazamiento hacia la derecha
upU EQU 19h; tecla de aumento
downD EQU 1dh; tecla de disminución
d_off EQU 16H; mostrar/ Cerrar
llamar EQU 44H;Operación de inicialización de tecla de calendario DS1302
K_on BIT P3.0;Salida de alarma
LED1 BIT P3.3
LED2 BIT P3.4
LED3CLK BIT P3.5 ;DS1302
LED4IO BIT P3.7
PRIMERA BIT P3.1
SEGUNDO EQU 60H
;60H seg
;61H min
;62H Hora
;63H Día
;64H Mes;65H DÍA
;66H Año
;6Ah Minuto de alarma desde 00(1302)
;6BH Hora de alarma desde 01(1302) )
******************************
ORG 0000H
INICIO AJMP
ORG 0003H
LJMP S_INT ;IRF
ORG 000BH ;200Us
LJMP P_INT ;
ORG 001BH ;pantalla LED <
PANTALLA LJMP
;********************* ***** ***** ;programa principal
ORG 0030H
INICIO: CLR RST
MOV SP,#2AH
SETB 05H
CLR 06H
SETB 07H
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
SETB 0DH
CLR 0EH
CLR 0EH
CLR 0FH
CLR PRIMERO.
CLR 0FH
CLR 10H
CLR 11H
MOV R2,#00H ;
MOV R3, #00H ;
MOV TMOD,#12H
MOV TL1,#0e5H ;espera
MOV TH1,#0BeH
MOV TH0 ,#3FH 200uS 3f
MOV TL0,#3FH
SETB ET0
SETB ET1
SETB PT0
SETB TR0
SETB TR1
SETB IT0 ;
SETB EX0 ;
CLR PX0 ;LCALL SET1302 ;Inicializar
MOV R1,#0C1H ;Tomar el parámetro de sincronización de 1302
llamar a T_6061
MOV 6AH,A ;
MOV R1,#0C3H p>
llamar a T_6061
p>
ACALL T_6061
MOV 6BH,A ;H
MOV 61H,#0
MOV 62H,#0
SETB EA
sjmp $
;****************** *********** **** **
DISPLAY: PUSH ACC
PUSH PSW
MOV TL1,#0e0H Cuánto tiempo esperar para que se muestre (20 ms)
MOV TH1,#0b0H
MOV dptr,#tab1
JB 0EH,DIS2
JB 0FH,DIS3
JB 10H,DIS4
JB 11H,DIS5
JNB 0DH,D_OUT
JNB 08H,D_GO ; la pantalla de sincronización parpadea
JNB 07H,D_ OUT
D_G MOV DPTR,#TAB1
MOV A,62H
ANL A, #0FH
MOV B,A
MOV A,62H
SWAP A
ANL A, #07H
MOVC A,@A+ DPTR
MOV P1 ,A
CLR LED1
LCALL DL2M
SETB LED1
MOV A,B
MOVC A, @A+DPTR
MOV C,07H
MOV según 7,C ;seg. parpadea
MOV P1,A
CLR LED2
LCALL DL2M
SETB LED2
MOV dptr,# tab2 ; Voltear lista de campos LED
MOV A,61H
ANL A,#0FH
MOV B,A
MOV A, 61H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV C,07H
MOV según 6,C ;El segundo indicador parpadea
p>MOV P1,A
CLR LED3CLK
LCALL
DL2M
SETB LED3CLK
MOV dptr,#tab1
MOV A,B
MOVC A,@A+DPTR
MOV C,06H
cpl c
MOV acc.7, C ;Indicador de alarma
MOV P1,A
CLR LED4IO
LCALL DL2M
SETB LED4IO
D_OUT: SETB TR1
POP PSW
POP ACC
RETI
;************************
DIS2: AJMP DIS_2
p>
DIS3: AJMP DIS_3
DIS4: AJMP DIS_4
DIS5: AJMP DIS_5
;*** ** ****** *********
DIS_2:MOV dptr,#tab1
MOV 6FH,62H
ACALL BCD_HEX
MOV B,#10
DIV AB
MOVC A,@A+ DPTR
MOV P1,A
CLR LED1
p>
LCALL DL2M
SETB LED1
MOV A, B
MOVC A, @A+DPTR
MOV P1 ,A
CLR LED2
LCALL DL2M
SETB LED2
SETB TR1
POP PSW
POP ACC
RETI
;*************** *******
DIS_3:MOV DPTR, #TAB2
MOV 6FH,61H
ACALL BCD_HEX
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED3CLK
LCALL DL2M
SETB LED3CLK
MOV A,
MOV DPTR,#TAB1
MOVC A,@A+ DPTR
MOV P1,A
CLR LED4IO
LCALL DL2M
SETB LED4IO
SETB TR1 p>
POP PSW
POP ACC
p>
RETI
;*************** ***********
DIS_4:MOV dptr,#tab1 ;Mostrar alarma configurada
JNB 07H,D4_OUT parpadea en la pantalla
MOV A,6BH
MOV B,#0AH
DIV AB
DIV AB
p>
MOVC A,@A+DPTR
MOV P1,A
CLR LED1
LCALL DL2M
SETB LED1
MOV A, B
MOVC A,@A+DPTR
MOV P1,A
<p>CLR LED2
LCALL DL2M
SETB LED2
D4_OUT:SETB TR1
POP PSW
POP ACC
RETI
;************************
DIS_5: MOV DPTR,#TAB2
JNB 07H,D5_OUT ;Parpadeando al mostrar
MOV A,6AH ;Mostrar la puntuación de alarma establecida
MOV A,6AH ;Mostrar la configuración Puntuación de alarma
DIS_OUT.
MOV B,#0AH
DIV AB
MOVC A,@A+DPTR p >
MOV P1,A
CLR LED3CLK
LCALL DL2M
SETB LED3CLK
MOV DPTR, #TAB1 p >
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED4IO
LCALL DL2M
SETB LED4IO
D5_OUT: SETB TR1
POP PSW
POP ACC
RETI
p >
;******************************
DL2M: MOV 43H,#14H ; LED(2ms)
DL2: MOV 44H, #14H
DL2: MOV 44H, #14H
SETB LED4IO
D5_OUT.
DL1: NOP
NOP
DJNZ 44H,DL1
DJNZ 43H,DL2
RET p>
RET
p>
;************************ El temporizador lee la hora de 1302 y determina si el tiempo de alarma ha expirado***** **
P_INT: PUSH ACC
PUSH PSW
INC R2 p>
CJNE R2,#250D,P_OUT
MOV R2,#00H
INC R3
CJNE R3,
MOV R2,#00H
INC R3
CJNE R3, #10D,P_OUT
MOV R3,#00H
CPL 07H
MOV P1,#0FFH
p>
ACALL R_1302
SALIDA:JNB 06H,P_OUT
MOV A,6BH
MOV B,#10
DIV AB
SWAP A
AÑADIR A,B
CJNE A, 62H, PP_OUT
MOV A,6AH
MOV B,#10
DIV AB
SWAP A
ADD A,B
CJNE A,61H,PP_ OUT
SETB 08H ; Indicador de llegada de tiempo
MOV C,07H
cpl c
MOV K_ON,C
P_OUT:POP PSW
PO
P ACC
RETI
PP_OUT: SETB K_ON
CLR 08H
POP PSW
POP ACC p>
p>
RETI
;************************ Se ha recibido la señal del control remoto* ***********
S_INT: CLR EA
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
PUS 02H
PUS 03H
MOV R6,#10D ;
SB: ACALL YS1
JB P3.2 ,SALIR
DJNZ R6, SB
JNB P3.2, $
ACALL YS2
p>
JB P3.2,SALIR
MOV R1,#1AH
MOV R2,#4D
PP: MOV R3,#8D;
JJJ: JNB P3 .2,$
ACALL YS1
MOV C,P3.2
JNC UUU
JB P3.2,$
p>
UUUU:MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJJJ
DJNZ R3,JJJJ
INC R3,JJJJ
DJNZ R3,JJJJ
DJNZ R3,JJJJ
INC R1
DJNZ R2,PP
;------------------ ---------------- ---
MOV A,1AH ;
XRL A,#40h Determinar si el valor de 1AH; es igual a la dirección inferior de 8 bits del control remoto (40h)
JNZ EXIT
MOV A,1bH
XRL A,#0bfh ; Determine si la dirección alta de 8 bits es correcta (0bfh)
JNZ EXIT
MOV A,1CH
CPL A
XRL A,1DH ; Compare el valor de 1CH con el recíproco del valor de 1DH.
1DH; compare los valores de 1CH y 1DH si son diferentes, no son válidos y se descartan (verifique si los datos son precisos)
JNZ EXIT
ACALL DO.
SALIR: SETB EA
POP 03H
POP 02H
POP DPL
POP DPH
POP PS
POP A
POP A
POP A
POP PS
POP PSW
POP ACC
RETI
;------------------- -retraso-------- ---------------
YS1: MOV 70H, #16D ;Retraso 1
D1 : MOV 71H, #21D
DJNZ 71H,$
DJNZ 70H,D1
RET
YS2: MOV 70H,#09D ;retardo 2
D2: MOV 71H, #220D
DJNZ 71H,$
DJNZ 70H, D2
RET
;----- ---------------------------------------- ---------- --
TAB: DB 00H, 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H Mesa con pantalla de tubo digital LED. Tabla de visualización de tubo digital LED TAB1 Tabla de valores de clave de control remoto TAB (no utilizada)
;TAB1: DB 3FH, 11H, 5EH, 5BH, 71H, 6BH, 6FH, 19H, 7FH, 7bH, 77H, 7CH ,39H,5EH,79H,71H
tab1:DB 0C0H,0F9H.0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0a7h,0a1h,86h,8EH
TAB2: DB 0c0H,0f9H,64H,70H,59H,52H,42H; tabla de códigos de segmentos LED Flip-Flop
;0CH es el indicador de configuración.
0DH es la marca de visualización completa, 0EH es la marca de hora para la pantalla, 0FH es la marca de minutos para la pantalla
; 10H es la marca de hora de alarma para la pantalla, 11H es la marca de minutos de alarma para la pantalla; pantalla
; Agregar función de silencio del despertador
; silencio-10h, temporizador-0eh, izquierda-46h, derecha-47h, arriba-19h, abajo-1dh
D MOV A,1CH
CJNE A,#TIMERT,REDO ;El código no es una clave de configuración/salida
JNB 0CH,SET1 ;Sí, entonces ingresa
CLR 0CH ;Sí, ya está adentro, luego salga
SETB 0DH ;Restaurar la visualización normal.Restaurar la visualización normal
CLR 0EH
CLR 0FH
CLR 10H
CLR 11H
RET
SET1:SETB 0CH
SETB 0EH
CLR 0DH
CLR 0FH
CLR 10H
CLR 11H
RET
ROJO CJNE A ,#MUTEM,REDO1 ;no es una clave de configuración para manejar REDO1,2,3,4...
LJMP MUTE ;MUTE?
REDO1: CJNE A,#D_OFF,DO_SET2
LJMP DIS_OFF ; Cerrar pantalla
DO_SET2:JB 0CH,SET2; Configuración del tiempo de procesamiento
RET
SET2: CJNE A,# UPU,SET2A
LJMP INC1 ;+ más(^)
SET2A: CJNE A,#DOWND,SET2B
LJMP DEC2 ;- menos
SET2B: CJNE A,#RIGHTR ,SET2C
LJMP DERECHA ;DERECHA desplazamiento a la derecha(>)
SET2C:CJNE A,#LEFTL,SET2D LJMP IZQUIERDA ;IZQUIERDA desplazamiento a la izquierda (<)
SET2D: CJNE A,#RECALL,SET2EXT;Inicializar DS1302
LJMP SET1302
SET2EXT:RET
;- -------------------- ---------------------Cª-------- -------------
INC1: JB 0EH,INCH
JB 0FH.INCM
JB 10H,INC_H p>
JB 11H,INC_M
RET
INC_H: INC 6BH ;incremento de hora de alarma
MOV A,6BH
CJNE A,#24D,INCH3
MOV 6BH, #0 #60D,INCH4
MOV 6AH,#0
INCH4:MOV R1,#0C0H
MOV R0,6AH
ACALL SETONE ;
RET
INCH:;INC 62H ;
>MOV 6FH, 62H
MOV 6FH.62H
ACALL BCD_HEX
INC A
CJNE A,#24D,INCH1 p>
p>
MOV A,#0
INCH1:MOV 6FH,A
ACALL HEX_BCD
MOV 62H,A
MOV R1,# 84H
MOV R0,62H
ACALL SETONE ;
RET
INCM: INC 61H ;
MOV 6FH,61H
ACALL BCD_HEX
INC A
ACALL SETONE ;
MOV 6FH,61H
INC A
ACALL_HEX_BCD
MOV 61H,A
MOV R1,#82H
MOV R0,61H p>
ACALL SETONE;
RET
;-------------------------- -------- ---DEC---------------------
DEC2:JB 0EH,DECH
JB 0FH,DECM
JB 10H,DEC_H
JB 11H,DEC_M
RET
DECH: MOV 6FH,62H
ACALL BCD_HEX
DEC A
CJNE A,#0FFH,DECH1
MOV A,#23
DECH1:MOV 6FH,A
ACALL HEX_BCD
MOV 62H,A
MOV R1,#84H
MOV R0,62H
ACALL SETONE
RET
DECM: MOV 6FH,61H
ACALL BCD_HEX
DEC A p>
CJNE A,#0FFH,DECM1
MOV A,#59
DECM1:MOV 6FH,A
ACALL HEX_BCD
MOV 61H,A
MOV R1,#82H
MOV R0,61H
ACALL SETONE
RET
DEC_H:DEC 6BH
MOV A,6BH
CJNE A,#0FFH,DECH3
MOV 6BH,#23D
DECH3:MOV R1, #0C2H
MOV R0,6BH
ACALL SETONE
RET
DEC_M: DEC 6AH p>
MOV A,6AH
CJNE A,#0FFH,DECH4
MOV 6AH,#59D
DECH4:MOV R1,#0C0H
MOV R0,6AH
ACALL SETONE
RET
;--------------- ------- ----------DERECHO--------------------------
DERECHA: JB 0
EH,DERECHA1
JB 0FH,DERECHA2
JB 10H,DERECHA3
JB 11H,DERECHA4
RET ;DESPLAZAMIENTO A LA DERECHA
DERECHA1: CLR 0EH
SETB 0FH
RET
DERECHA2: CLR 0FH
SETB 10H
RET
DERECHA3: CLR 10H
SETB 11H
RET
DERECHA4: CLR 11H
SETB 0EH
RET
;--------------------------------IZQUIERDA -----------------------
IZQUIERDA: JB 0EH,IZQUIERDA1
JB 0FH,IZQUIERDA2
JB 10H,LEFT3
JB 11H,LEFT4
RET ;desplazamiento a la izquierda
LEFT1: SETB 11H
CLR 0EH
RET
IZQUIERDA2: SETB 0EH
CLR 0FH
RET
IZQUIERDA3: SETB 0FH
CLR 10H
RET
IZQUIERDA4: AJUSTE 10H
CLR 11H
RET
; ----------------------------------MUDO--------------
MUTE: setb k_ON
CPL 06H ;MUTE
CLR 08H
RET
;---- ---- ------- --------------DISPLAY APAGADO--------
DIS_OFF:CLR ET1
CPL 05H
JNB 05H,REDORE
SETB ET1
REDORE: RET
;----- -- ---- ------------------------------- Inicialización 1302
SET1302: CLR RST; enero 1, 2002 12:00:00
p>CLR LED3CLK
MOV SEGUNDO,#0
MOV 61H,#0 <
MOV 62H,#18;
MOV 63H,#1
MOV 64H,#1
MOV 65H,#1
MOV 66H,#2
SETB RST
MOV A, #8EH
LCALL R_BIT
MOV A,
MOV A, #00H
LCALL R_BIT
SETB LED3CLK
CLR RST
MOV R0, #SECOND
MOV R7, #7
MOV R1, #80H
SET1302A.CLR PRIMERO
CLR LED3CLK
SETB PRIMERO
MOV A,R1
p>
LCALL R_BIT
MO
V A,@R0
LCALL R_BIT
INC R0
INC R1
INC R1
SETB LED3CLK
CLR RST
DJNZ R7, SET1302A
CLR RST
CLR LED3CLK
sETB LED3CLK
nop
CLR RST
nop
clr led3clk
SETB RST
MOV A,# 90H
LCALL R_BIT
MOV A,#10100101B; configuración del cargador
LCALL R_BIT
SETB LED3CLK
CLR RST
CLR LED3CLK
SETB RST
MOV A, #8EH
LCALL R_BIT
MOV A ,#80H
LCALL R_BIT
SETB LED3CLK
CLR RST
RET
;--- - ----------------- Leer una RAM ------
T_6061: CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
LCALL W_BIT
SETB LED3CLK
CLR PRIMERO
RET
;--------------------------
R_ 1302: MOV R0,#SEGUNDO
MOV R7,#7
MOV R1,#81H
R_1302A: CLR PRIMERO
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
LCALL W_BIT
LCALL W_BIT
p>
MOV @R0,
INC R0
INC R1
INC R1
SETB LED3CLK
CLR RST
DJNZ R7,R_1302A
RET
;------------ ------R_BIT ------------------
R_BIT:MOV R4,#8
R_BIT1: RRC A
MOV LED4IO,C
SETB LED3CLK
CLR LED3CLK
DJNZ R4,R_BIT1
RET p>
;- ------------------W_BIT-----------------------
W_BIT : MOV R4,#8
W_ BIT1:MOV C,LED4IO
RRC A
SETB LED3CLK
CLR LED3CLK
DJNZ R4,W_BIT1
RET
;------------------- ------- ---- ---
------------------
BCD_HEX:
MOV A,6FH
ANL A,#0FH
MOV B,A
MOV A,6FH
MOV 6FH,B
SWAP A
ANL A ,#0FH
MOV B,#0AH
MUL AB
AÑADIR A,6FH
;MOV 6FH,A p >
RET
HEX_BCD:
MOV A,6FH
MOV B,#10
DIV AB
CAMBIAR A
AÑADIR A,B
;MOV 6FH,A
RET
;----- Escriba una dirección: R1 es la dirección, R0 son los datos ----------
SETONE: CLR LED3CLK
CLR RST
CLR LED3CLK
NOP
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A, #00H
LCALL R_BIT
SETB.LED3CLK
CLR RST
CLR LED3CLK
NOP
CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
MOV A, R0
LCALL R_BIT
NOP
SETB LED3CLK
CLR RST
NOP p>
CLR RST
CLR LED3CLK
SETB RST <
MOV A, #8EH
LCALL R_BIT
MOV A,#80H
LCALL R_BIT
SETB LED3CLK
CLR RST
RET.