Programación Específica > Microcontroladores
Ayuda Reloj 16f877
kilopondio:
Todo muy lindo Daniel...pero en donde metiste la direccion del dispositivo que en el caso del DS1307 es 0xD1 y 0XD0????.
¿Cómo sabes cuando es lectura o escritura sin estos códigos?.
Bye!.
Kilo
maxi:
Hola a todos:
Mi nombre es Maximiliano Olivera estoy trabajando en un proyecto y estoy utilizando un Real Time Clock, el DS1337, mi problema es que no lo puedo hacer funcionar por interrupciones, es decir puedo leer los registros del integrado pero hacieno sucesivas lecturas. Lo que yo necesito es que el RTC interrumpa al PIC cada 1 minuto para que este lea los registros del reloj y actualize los registros en el PIC. Si alguien tiene alguan idea para ayudarme estare agradecido. Mi direccion de correo es mjolivera@yahoo.com
Saludos.
Maximiliano Olivera
pichone:
--- Cita de: "piolex" --- y alguien sabe como conectar el pic16f877 con uun ds1302?
programacion assembler
--- Fin de la cita ---
Estmados amigos estoy teniendo problemas para conectar el reloj ds1307 con el PIC f877... si bien estudié el asm del pic f84 no pude.. supongo hay alguna diferencia. Si alguno de Ustedestiene algún dato de interés me será de utilidad como así algún asm de referencia.
Muchas Gracias
kenshinkof:
;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
kenshinkof:
EL PASADO PROGRAMA QUE PUSE ES PARA MANDAR LOS SEGUNDOS POR SERIAL A 300BSP PERO EN EL CICLO DE LECTURA PUEDES USAR LAS VARIABLES DE HOR MIN Y SEGUN PARA ALTERARLO COMO TU QUIERAS.
A TAMBIEN RETARDO.INC ES EL SIGUIENTE
;........................................................................
R_ContA equ 20
R_ContB equ 21
R_ContC equ 22
Retardo_1
clrf R_ContA
bug incf R_ContA
clrf R_ContB
bug2 incf R_ContB
clrf R_ContC
bug3 incf R_ContC
btfss R_ContC,7
goto bug3
btfss R_ContB,7
goto bug2
btfss R_ContA,4
goto bug
return
;COPIALO EN NOTE PAD GUARDALO COMO RETARDOS.INC Y PEGALO EN MPAST SUITE
Navegación
[*] Página Anterior
Ir a la versión completa