ds13x7.h

Ir a la documentación de este archivo.
00001 #ifndef __DS13X7_H__
00002 #define __DS13X7_H__
00003 
00004 /*
00005   This code is free software; you can redistribute it and/or modify
00006    it under the terms of the GNU General Public License as published by
00007    the Free Software Foundation; either version 2, or (at your option)
00008    any later version.
00009    
00010    This code is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013    GNU General Public License for more details.
00014 */
00015 
00028 #ifndef FOSC_HZ
00029         #define FOSC_HZ 4000000
00030 #endif
00031 
00036 #include <i2c.h>
00037 
00038 #define ADRe_ds13x7     0xd0    /* adresse I2C de l'esclave DS1307 en écriture, R/W =0*/
00039 #define ADRl_ds13x7     0xd1    /* dirección I2C del esclavo DS1307 en lectura R/W =1*/
00040 
00051 byte ds13x7_write(byte *temps,byte reg,byte n)
00052 {
00053         byte i,x;
00054         i2c_start();                            //début de trame
00055         x =i2c_write_with_ack(ADRe_ds13x7);     //adresse I2C en écrture du DS1307
00056         if (!x) x=i2c_write_with_ack(reg);      //si acquittement OK à 0 positionner 
00057                                                 //le pointeur de registre à reg
00058         for (i=0;i<n;i++)                       //écrire n registres
00059         if (!x) x=i2c_write_with_ack(temps[reg+i]);     //si l'acquittement est à zéro continuer 
00060         i2c_stop();     //fin de trame
00061         return x;       //si pas d'acquittement affiché erreur d'acquittement
00062 }
00063 
00073 byte ds13x7_read(byte *temps, byte reg, byte n)  
00074 {
00075     byte x,i,tmp;
00076     i2c_start();                        //début de trame
00077     x=i2c_write_with_ack(ADRe_ds13x7);  //adresse I2C en écrture du DS1307
00078     if (!x) x=i2c_write_with_ack(reg);  //positionner le pointeur de registre à reg
00079     if(!x) {                            //si acquittement OK à 0 
00080         i2c_restart();                  //relancer une trame
00081         x=i2c_write_with_ack(ADRl_ds13x7);      //adresse I2C en lecture du DS1307
00082         if (!x) {                               //si acquittement OK à 0
00083             for (i=1;i<n;i++) 
00084                 temps[reg+i-1]=i2c_read_with_ack(0) ;   //lit les registres jusqu'à n-1
00085             temps[reg+n-1]=i2c_read_with_ack(1) ;       //lit le dernier registres reg+n
00086         }
00087     }
00088     i2c_stop();                         //fin de trame
00089     return x;   
00090 }
00091 
00092 
00093 #endif

Generado el Thu Jan 8 00:55:37 2009 para pic-gcc-library por  doxygen 1.5.1