Autor Tema: comunicacion entre un pic16f877 y ds1307  (Leído 4290 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado robertopic

  • PIC10
  • *
  • Mensajes: 7
comunicacion entre un pic16f877 y ds1307
« en: 08 de Julio de 2010, 18:04:10 »
Por fa si alguien me puede ayudar a conseguir el codigo en assembler para la comunicacion entre un pic16f877 y ds1307 por fa lo necesito
« Última modificación: 08 de Julio de 2010, 18:37:44 por un Moderador, Razón: cambiar el titulo por uno adecuado »

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: AYUDA
« Respuesta #1 en: 08 de Julio de 2010, 18:34:31 »
Hola amigo, prueba con este código, debes analizarlo y adaptarlo a tu necesidad

saludos.
Código: [Seleccionar]


title ¨ MANEJO DEL RELOJ SRIAL DS1307¨

list  p=16f873a

;registros de proposito especifico

dir_ind equ 00
tmr0 equ 01
pc equ 02
status equ 03
fsr equ 04
porta equ 05
portb equ  06
portc equ 07
eedata equ 08
eeadr equ 09
pclath equ 0a
intcon equ 0b
pir1 equ 0c

;==============================================================================

;registros de configuracion

trisa equ 05
trisb equ 06
trisc equ 07
pie1 equ 0c
;=====================================================================

;registros de proposito general

cblock h'20'
conta1, respaldo, respaldo_b, respaldo_a
seg_uni, seg_dec, minu_uni, minu_dec, hora_uni, hora_dec
dia_semana, dia_uni, dia_dec, mes_uni, mes_dec, año_uni, año_dec
endc
;==============================================================================

;bit de registro status

c equ 00
z equ 02
rp0 equ 05

w equ 00
f equ 01

sda equ 07
scl equ 06

;==============================================================================
org 00
goto inicio
;==============================================================================
;==============================================================================
inicio bsf status,rp0
movlw b'00111111'
movwf trisb
bcf status,rp0
;=============

movlw h'ff'
movwf portb

clrf respaldo
;==============================================================================
call conf_DS1307
call leer_DS1307
goto $-1
;==============================================================================
;==============================================================================
tiempo_I2C movlw d'11' ;TIEMPO DE 100 Us PARA LA COMUNICACION
movwf conta1 ;I2C

nop
decfsz conta1,f
goto $-2

nop
return
;=======================================================
stop bsf portb,scl ;STOP
call tiempo_I2C
bsf portb,sda
call tiempo_I2C

return
;=======================================================
start bcf portb,sda ;START
call tiempo_I2C
bcf portb,scl
call tiempo_I2C

return
;=======================================================
pulso_ack bcf portb,sda ;PULSO DE ACK
call tiempo_I2C
bsf portb,scl
call tiempo_I2C
bcf portb,scl
call tiempo_I2C

return
;=======================================================
env_dat_I2C movwf respaldo

movlw d'8'
movwf respaldo_b

otro_bit_sda rlf respaldo,f
btfss status,c
bcf portb,sda
btfsc status,c
bsf portb,sda

call tiempo_I2C
bsf portb,scl
call tiempo_I2C
bcf portb,scl
call tiempo_I2C

decfsz respaldo_b,f
goto otro_bit_sda

call tiempo_I2C
bcf portb,sda
return
;=======================================================
lee_dat_I2C bcf intcon,7 ;SE CONFIGURA SDA COMO ENTRADA
bsf status,rp0
bsf trisc,sda
bcf status,rp0

movlw d'8'
movwf respaldo_b

lee_otro_sda call tiempo_I2C
bsf portb,scl
call tiempo_I2C

btfss portb,sda
bcf status,c
btfsc portb,sda
bsf status,c

bcf portb,scl

rlf respaldo,f
decfsz respaldo_b,f
goto lee_otro_sda
;=============
call tiempo_I2C

bsf status,rp0 ;SE CONFIGURA SDA COMO ENTRADA
bcf trisc,sda
bcf status,rp0
bsf intcon,7

movf respaldo,w
return
;==============================================================================
;==============================================================================
conf_DS1307 call start
;=============
movlw b'11010000' ;CONFIGURACION DS1703
call env_dat_I2C
;=============
call pulso_ack
;=============
clrw
call env_dat_I2C ;DIRECCION DONDE EMPIEZAN LOS DATOS
;============= ;DEL RELOJ
call pulso_ack
;=============
swapf seg_dec,w
iorwf seg_uni,w
call env_dat_I2C ;SE ENVIA EL DATO DE SEGUNDOS
;=============
call pulso_ack
;=============
swapf minu_dec,w
iorwf minu_uni,w
call env_dat_I2C ;SE ENVIA EL DATO DE MINUTOS
;=============
call pulso_ack
;=============
swapf hora_dec,w
iorwf hora_uni,w
call env_dat_I2C ;SE ENVIA EL DATO DE LAS HORAS
;=============
call pulso_ack
;=============
movf dia_semana,w ;SE ENVIA EL DATO DE DIA SEMANA
call env_dat_I2C
;=============
call pulso_ack
;=============
swapf dia_dec,w
iorwf dia_uni,w
call env_dat_I2C ;SE ENVIA EL DATO DE LOS DIAS DEL MES
;=============
call pulso_ack
;=============
swapf mes_dec,w
iorwf mes_uni,w
call env_dat_I2C ;SE ENVIA EL DATO DE MES
;=============
call pulso_ack
;=============
swapf año_dec,w
iorwf año_uni,w
call env_dat_I2C ;SE ENVIA EL DATO DE AÑO
;=============
call pulso_ack
;=============
movlw b'00000000' ;SE ENVIA EL DATO DE PULSO DE SALIDA
call env_dat_I2C
;=============
call pulso_ack
;=============
call stop

return
;=======================================================
;=======================================================
leer_DS1307 call start
;=============
movlw b'11010000' ;CONFIGURACION DS1703
call env_dat_I2C
;=============
call pulso_ack
;=============
clrw
call env_dat_I2C ;DIRECCION A PARTIR DE LA CUAL VA A EMPEZAR
;============= ;LA LECTURA
call pulso_ack
;=============
call stop
;===========================
call tiempo_I2C

call start

movlw b'11010001' ;CONFIGURACION DS1703
call env_dat_I2C
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DE LOS SEGUNDOS

movwf seg_uni
bcf respaldo,7
swapf respaldo,w
movwf seg_dec
movlw h'0f'
andwf seg_uni,f
andwf seg_dec,f
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DE LOS MINUTOS

movwf minu_uni
swapf respaldo,w
movwf minu_dec
movlw h'0f'
andwf minu_uni,f
andwf minu_dec,f
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DE LAS HORAS

movwf hora_uni
swapf respaldo,w
movwf hora_dec
movlw h'0f'
andwf hora_uni,f
andwf hora_dec,f
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DEL DIA DE LA SEMANA
movwf dia_semana
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DE LOS DIAS DEL MES

movwf dia_uni
swapf respaldo,w
movwf dia_dec
movlw h'0f'
andwf dia_uni,f
andwf dia_dec,f
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DEL MES

movwf mes_uni
swapf respaldo,w
movwf mes_dec
movlw h'0f'
andwf mes_uni,f
andwf mes_dec,f
;=============
call pulso_ack
;=============
call lee_dat_I2C ;SE LEE EL DATO DEL AÑO

movwf año_uni
swapf respaldo,w
movwf año_dec
movlw h'0f'
andwf año_uni,f
andwf año_dec,f
;=============

call stop

return
;==============================================================================

end

Desconectado robertopic

  • PIC10
  • *
  • Mensajes: 7
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #2 en: 08 de Julio de 2010, 19:01:47 »
alguna otra ayuda

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #3 en: 08 de Julio de 2010, 20:22:57 »
hola robertopic, no se que es lo que buscas especificamente con el ds1307, pero el ejemplo del amigo Diego se ve bastante completito y comentado como para que te sirva de guia.

Si no danos algunos datos mas como para ayudarte mas.

Saludos
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado robertopic

  • PIC10
  • *
  • Mensajes: 7
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #4 en: 09 de Julio de 2010, 19:24:45 »
si el codigo esta completo pero me podrian pasar otro para tener mas material de apoyo

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #5 en: 09 de Julio de 2010, 19:46:06 »
Hola amigo, acá te dejo un par de links que te van a servir.
Te recomiendo que utilices el buscador que hay mucho material en el foro.

http://www.todopic.com.ar/foros/index.php?topic=13282.0

http://www.todopic.com.ar/foros/index.php?topic=5979.0

http://www.todopic.com.ar/foros/index.php?topic=24756.0
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado robertopic

  • PIC10
  • *
  • Mensajes: 7
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #6 en: 09 de Julio de 2010, 20:18:25 »
muy bueno tu aporte flacoclau! pero si alguien mas me podria ayudar con mucho gusto sera recibido. Gracias!

Desconectado robertopic

  • PIC10
  • *
  • Mensajes: 7
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #7 en: 10 de Julio de 2010, 14:42:46 »
por favor alguna otra ayuda se lo sabria agradecer. Gracias

Desconectado robertopic

  • PIC10
  • *
  • Mensajes: 7
Re: comunicacion entre un pic16f877 y ds1307
« Respuesta #8 en: 10 de Julio de 2010, 14:52:51 »
si alguien me pudiera pasar codigo y el diseño en proteus para poder simularlo. Gracias