RE:EL RELOJ ES CON PIC16F84
Publicado por
david (1 intervención) el 09/06/2006 17:35:45
LIST P=PIC16F877
INCLUDE "P16f877.ini"
RD3 EQU 0X03
CBLOCK 0X20
DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7
R1,R2,R3,R4,R5,PUNTO,CONTA,AUXW
FILA,TECLA,COD_T,COLUMNA,N_PULSOS,ANCHO_P
ENDC
ORG 0
GOTO INICIO
ORG 4
GOTO RELOJ
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
DISPLAY MOVLW 0X09
MOVWF R5
CICLO1 CLRF COLUMNA
CLRF TECLA
CLRF COD_T
MOVLW 0X20
MOVWF FSR
MOVLW 0X08
MOVWF R4
SIG_DIG MOVLW 0XFF
MOVWF PORTB
MOVF COLUMNA,W
MOVWF PORTD
MOVF FSR,W
XORLW 0X22
BTFSS STATUS,Z
GOTO OTRO_P
GOTO HAGA_P
OTRO_P MOVF FSR,W
XORLW 0X25
BTFSS STATUS,Z
GOTO N_PUNTO
HAGA_P MOVLW 0X0A
GOTO VER
N_PUNTO MOVF INDF,W
VER CALL TABLA
MOVWF PORTB
CALL VER_T
CALL RETARDO
INCF COLUMNA,F
INCF FSR,F
DECFSZ R4,F
GOTO SIG_DIG
DECFSZ R5,F
GOTO CICLO1
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
TABLA: ADDWF PCL,F
RETLW 0XC0
RETLW 0XF9
RETLW 0XA4
RETLW 0XB0
RETLW 0X99
RETLW 0X92
RETLW 0X82
RETLW 0XF8
RETLW 0X80
RETLW 0X90
RETLW 0X7F
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
RELOJ MOVWF AUXW
BTFSS INTCON,2
GOTO SALE
MOVLW 0X82
MOVWF TMR0
INCF CONTA,F
MOVF CONTA,W
XORLW 0X7D
BTFSS STATUS,Z
GOTO SALE
CLRF CONTA
INCF DIG0,F
MOVF DIG0,W
XORLW 0X0A
BTFSS STATUS,Z
GOTO SALE
CLRF DIG0
INCF DIG1,F
MOVF DIG1,W
XORLW 0X06
BTFSS STATUS,Z
GOTO SALE
CLRF DIG1
INCF DIG3,F
MOVF DIG3,W
XORLW 0X0A
BTFSS STATUS,Z
GOTO SALE
CLRF DIG3
INCF DIG4,F
MOVF DIG4,W
XORLW 0X06
BTFSS STATUS,Z
GOTO SALE
CLRF DIG4
INCF DIG6
MOVF DIG6,W
XORLW 0X0A
BTFSS STATUS,Z
GOTO REV12
CLRF DIG6
INCF DIG7
GOTO SALE
REV12 MOVF DIG6,W
XORLW 0X03
BTFSS STATUS,Z
GOTO SALE
MOVF DIG7,W
XORLW 0X01
BTFSS STATUS,Z
GOTO SALE
CLRF DIG7
MOVLW 0X01
MOVWF DIG6
SALE MOVF AUXW,W
BCF INTCON,2
RETFIE
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
RETARDO: MOVLW 0X02
MOVWF R1
BUCLA1 MOVLW 0XFF
MOVWF R2
BUCLA NOP
NOP
DECFSZ R2,F
GOTO BUCLA
DECFSZ R1,F
GOTO BUCLA1
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
VER_T MOVLW 0X04
MOVWF R1
MOVF PORTD,W
MOVWF FILA
ROTAR_F RLF FILA,F
BTFSC STATUS,C
GOTO NOTECLA
MOVF COD_T,W
MOVWF TECLA
BSF TECLA,7
NOTECLA INCF COD_T,F
DECFSZ R1,F
GOTO ROTAR_F
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
MUEVE_BUFF MOVLW 0X07
MOVWF R1
MOVLW 0X26
MOVWF FSR
SIGUE MOVF INDF,W
INCF FSR,F
MOVWF INDF
DECF FSR,F
DECF FSR,F
DECFSZ R1,F
GOTO SIGUE
INCF FSR,F
MOVF TECLA,W
CALL TABLA
MOVWF INDF
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
AJUSTE BCF INTCON,7
NOVALE MOVLW 0X00
MOVWF DIG0
MOVWF DIG1
MOVWF DIG3
MOVWF DIG4
MOVWF DIG6
MOVWF DIG7
MOVLW 0X0A
MOVWF DIG2
MOVWF DIG5
VER1 CALL DISPLAY1
BTFSS TECLA,7
GOTO VER1
BCF TECLA,7
MOVF TECLA,W
XORLW 0X02 ;ENTER
BTFSC STATUS,Z
GOTO ENTER
MOVF TECLA,W
SUBLW 0X04
BTFSC STATUS,C
GOTO VER1
MOVF TECLA,W
XORLW 0X03
BTFSC STATUS,Z
GOTO VER1
MOVF DIG6,W
MOVWF DIG7
MOVF DIG4,W
MOVWF DIG6
MOVF DIG3,W
MOVWF DIG4
MOVF DIG1,W
MOVWF DIG3
MOVF DIG0,W
MOVWF DIG1
MOVF TECLA,W
CALL TABLA1
MOVWF DIG0
MOVLW 0X50
MOVWF N_PULSOS
CALL TONO1K
GOTO VER1
ENTER MOVF DIG7,W
XORLW 0X00
BTFSS STATUS,Z
GOTO R_OTRO
MOVF DIG6,W
XORLW 0X00
BTFSC STATUS,Z
GOTO NOVALE
R_OTRO MOVF DIG7,W
SUBLW 0X01
BTFSS STATUS,C
GOTO NOVALE ;Decenas de Hora tiene un valor mayor a 1
MOVF DIG7,W
XORLW 0X01
BTFSS STATUS,Z
GOTO OTRO
MOVF DIG6,W
SUBLW 0X02
BTFSS STATUS,C
GOTO NOVALE
OTRO MOVF DIG4,W
SUBLW 0X05
BTFSS STATUS,C
GOTO NOVALE
MOVF DIG1,W
SUBLW 0X05
BTFSS STATUS,C
GOTO NOVALE ;Decenas de minuto tiene un valor mayor a 5
BSF INTCON,7;Permite nuevamente la interrupcion
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
TABLA1 ADDWF PCL,F
RETLW 0X0A
RETLW 0X0A
RETLW 0X0A
RETLW 0X0A
RETLW 0X0A
RETLW 0X09
RETLW 0X06
RETLW 0X03
RETLW 0X00
RETLW 0X08
RETLW 0X05
RETLW 0X02
RETLW 0X0A
RETLW 0X07
RETLW 0X04
RETLW 0X01
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
DISPLAY1 MOVLW 0X09
MOVWF R5
CICLO2 CLRF COLUMNA
CLRF TECLA
CLRF COD_T
MOVLW 0X20
MOVWF FSR
MOVLW 0X08
MOVWF R4
SIG_DIG1 MOVLW 0XFF
MOVWF PORTB
MOVF COLUMNA,W
MOVWF PORTD
MOVF INDF,W
CALL TABLA
MOVWF PORTB
CALL RETARDO
CALL VER_T
INCF COLUMNA
INCF FSR
DECFSZ R4
GOTO SIG_DIG1
DECFSZ R5
GOTO CICLO2
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
;Subrutina encargada de dar un tono al presionar las teclas
TONO1K MOVLW 0XA5
MOVWF ANCHO_P
GOTO TONO
TONO2K MOVLW 0X52
MOVWF ANCHO_P
TONO MOVF ANCHO_P,W
MOVWF R1
BSF PORTD,RD3
ALTO DECFSZ R1,F
GOTO ALTO
MOVWF R1
BCF PORTD,RD3
BAJO DECFSZ R1,F
GOTO BAJO
DECFSZ N_PULSOS,F
GOTO TONO
RETURN
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
;Programa Principal
INICIO: BSF STATUS,RP0
CLRF TRISB
MOVLW 0XF0
MOVWF TRISD
MOVLW 0X05
MOVWF OPCION
BCF STATUS,RP0
MOVLW 0XA0
MOVWF INTCON
MOVLW 0X82
MOVWF TMR0
CLRF CONTA
CLRF DIG0
CLRF DIG1
MOVLW 0X00
MOVWF DIG3
MOVLW 0X03
MOVWF DIG4
MOVLW 0X08
MOVWF DIG6
MOVLW 0X00
MOVWF DIG7
CICLO: CALL DISPLAY
BTFSS TECLA,7
GOTO CICLO
BCF TECLA,7
MOVF TECLA,W
XORLW 0X01 ;AJUSTE
BTFSC STATUS,Z
CALL AJUSTE
GOTO CICLO
END