2
« en: Domingo 10 de Agosto de 2008, 20:28 »
;DS1302 CONEXIONES SON RB1 A IO RB2 A RST RB3 A SCLK
list p=16F876
radix hex
INCLUDE <P16F876.INC>
__config H'3F79'
IO EQU 1; Son los pines del puerto donde están conectadas las terminales de comunicación
RST EQU 2; Estas pueden variar según el circuito y la disposición de pines
SCLK EQU 3;
ROTA EQU 23;
ALFA EQU 24;
UNDATO EQU 25; Localidad de memoria donde se almacenará temporalmente el dato recibido del DS1302
SEGUN EQU 26; Localidad que almacena los segundos, leídos del DS1302
MIN EQU 27; Localidad que almacena los minutos, leídos del DS1302
HOR EQU 28; Localidad que almacena las horas, leídos del DS1302
DELAY EQU 29;
ORG 0
BSF STATUS,RP0
MOVLW D'207'
MOVWF SPBRG
CLRF TXSTA
CLRF TRISB
BCF STATUS,RP0
MOVLW 0XA0
MOVWF RCSTA
CLRF PORTB
;Deshabilita el Write Protect
ESCRITURA
MOVLW 0X8E ;Comando que apunta al registro de control para una escritura
CALL COMRTC ;Llama a la rutina que envía el comando hacia el DS1302
MOVLW 0X00 ;Este dato deshabilita el Write Protect para permitir futuras escrituras
CALL ENVIARTC1;Llama a la rutina que envía el dato hacia el DS1302
;***************************************************
;ESCRIBE el numero 0x35 a al registro correspondiente de los segundos del DS1302
MOVLW 0X80 ; POSICIONA LA LOCALIDAD DE LOS SEGUNDOS PARA ESCRITURA
CALL COMRTC; Llama la rutina que envía el comando
MOVLW 0X35 ;ENVIA EL DATO 0X35 A LOS SEGUNDOS
CALL ENVIARTC1; Llama a la rutina que envía el dato hacia el DS1302
;****************************************************
;ESCRIBE el numero 0x22 a al registro correspondiente de los minutos del DS1302
MOVLW 0X82 ; POSICIONA LA LOCALIDAD DE LOS MINUTOS PARA ESCRITURA
CALL COMRTC; Llama la rutina que envía el comando
MOVLW 0X22 ;ENVIA EL DATO 0X22 A LOS MINUTOS
CALL ENVIARTC1; Llama a la rutina que envía el dato hacia el DS1302
;****************************************************
;ESCRIBE el numero 0x13 al registro correspondiente de las horas del DS1302
MOVLW 0X84 ; POSICIONA LA LOCALIDAD DE LAS HORAS PARA ESCRITURA
CALL COMRTC; Llama la rutina que envía el comando
MOVLW 0X13 ;ENVIA EL DATO 0X13 A LAS HORAS
CALL ENVIARTC1; Llama a la rutina que envía el dato hacia el DS1302
BCF PORTB,RST ;Deshabilita las comunicaciones
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LECTURA
;OPERACIONES DE LECTURA
;***************************************************
;Lee el registro correspondiente de los segundos del DS1302
MOVLW 0X81 ; POSICIONA LA LOCALIDAD DE LOS SEGUNDOS PARA LECTURA
CALL COMRTC; Llama la rutina que envía el comando
CALL RECIBRTC1; Llama a la rutina que recibe el dato enviado desde el DS1302
MOVF UNDATO,W; Mueve el dato recibido a W
MOVWF SEGUN ; Guarda el dato en la variable SEGUN
;***************************************************
;Lee el registro correspondiente de los minutos del DS1302
MOVLW 0X83 ; POSICIONA LA LOCALIDAD DE LOS MINUTOS PARA LECTURA
CALL COMRTC; Llama la rutina que envía el comando
CALL RECIBRTC1; Llama a la rutina que recibe el dato enviado desde el DS1302
MOVF UNDATO,W; Mueve el dato recibido a W
MOVWF MIN ; Guarda el dato en la variable MIN
;***************************************************
;Lee el registro correspondiente de las horas del DS1302
MOVLW 0X85 ; POSICIONA LA LOCALIDAD DE LAS HORAS PARA LECTURA
CALL COMRTC; Llama la rutina que envía el comando
CALL RECIBRTC1; Llama a la rutina que recibe el dato enviado desde el DS1302
MOVF UNDATO,W; Mueve el dato recibido a W
MOVWF HOR ; Guarda el dato en la variable HOR
BSF STATUS,RP0
BSF TXSTA,TXEN
BCF STATUS,RP0
MOVF SEGUN,W
MOVWF TXREG
CALL Retardo_1
GOTO LECTURA
;DE ESTA MANERA ES COMO SE ESCRIBEN Y SE LEEN LOS REGISTROS DEL DS1302. USTED PUEDE MANIPULAR
;LOS DATOS RECIBIDOS, QUE SE HAN GUARDADO EN LA RAM, PARA MOSTRARLOS EN UN DISPLAY
FIN GOTO FIN
COMRTC MOVWF ALFA
BSF STATUS,RP0
BCF TRISB,IO ;CONFIGURA EL PUERTO COMO SALIDA
BCF STATUS,RP0
BSF PORTB,RST ;HABILITA LA COMUNICACIÓN
MOVLW 0X08
MOVWF ROTA ;ESTE ES UN CONTADOR
COMRTC1 BSF PORTB,IO ;PONE A 0 O A 1 EL PIN IO DEL PUERTO
BTFSS ALFA,0 ;DEPENDIENDO EL VALOR DEL BIT 0 DEL DATO A ENVIAR
BCF PORTB,IO
BSF PORTB,SCLK; FLANCO DE SUBIDA DE SCLK
CALL RETARDO
BCF PORTB,SCLK; FLANCO DE BAJADA DE SCLK
DECFSZ ROTA,F ;
GOTO FALTAN
RETURN
FALTAN RRF ALFA,F ;ROTA EL DATO A ENVIAR
GOTO COMRTC1
;*************************************************
;RUTINA QUE ENVIA UN DATO AL DS1302 DESPUES DEL COMANDO
ENVIARTC1
MOVWF ALFA
MOVLW 0X08
MOVWF ROTA
BSF STATUS,RP0
BCF TRISB,IO
BCF STATUS,RP0
OTRO2 BSF PORTB,IO;PONE A 0 O A 1 EL PIN IO DEL PUERTO
BTFSS ALFA,0 ;DEPENDIENDO EL VALOR DEL BIT 0 DEL DATO A ENVIAR
BCF PORTB,IO;
BSF PORTB,SCLK; FLANCO DE SUBIDA DE SCLK
CALL RETARDO
BCF PORTB,SCLK; FLANCO DE BAJADA DE SCLK
DECFSZ ROTA,F
GOTO FALTAN12
BCF PORTB,RST
RETURN
FALTAN12 RRF ALFA,F
GOTO OTRO2
;*******************************************************
;RUTINA QUE RECIBE UN DATO DESDE EL DS1302
RECIBRTC1 BSF STATUS,RP0
BSF TRISB,IO
BCF STATUS,RP0
MOVLW 0X08
MOVWF ROTA
OTRO22 BSF UNDATO,7 ;Registro donde se guarda bit a bit el dato proveniente del DS1302
BTFSS PORTB,IO
BCF UNDATO,7
BSF PORTB,SCLK
CALL RETARDO
BCF PORTB,SCLK; SEÑAL DE RELOJ
DECFSZ ROTA,F
GOTO FALTAN22
BCF PORTB,RST
RETURN
FALTAN22 BCF STATUS,C
RRF UNDATO,F
GOTO OTRO22
;.......................................................
RETARDO
CLRF DELAY
BUCLE INCF DELAY
BTFSS DELAY,5
GOTO BUCLE
RETURN
INCLUDE <RETARDOS.INC>
END