⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1307.c

📁 ds1307,picc 时钟芯片的读写程序
💻 C
字号:

#include	 <pic.h>
#include	"delay.c"
//#include	"i2c.c"
//#include	"i2c.h"
#include 	"usart.c"



unsigned char time[7];	
// time format:
// time[6]---year
// time[5]---month
// time[4]---date
// time[3]---day
// time[2]---hour
// time[1]---minute
// time[0]---second


//void i2c_idle();
//void i2c_init();
//void write();
//void read();
//void wrtacktest();

void nop(void)
{
asm("NOP");

}
void i2c_init(void)
{
  TRISC3=1;      // set SCL pin as input
  TRISC4=1;      // set SDA pin as input
  SSPCON = 0x38;     // set I2C master mode
  SSPCON2 = 0x00;
  SSPADD = 19;    // 50k at 4Mhz clock  FOSC/(4 * (SSPADD + 1))

  STAT_CKE=1;      // Data transmitted on falling edge of SCK  
  STAT_SMP=1;      // disable slew rate control  低速100k
  SSPIF=0;      // clear SSPIF interrupt flag
  BCLIF=0;      // clear bus collision flag
}

void wrtacktest(void)
{
   while(!SSPIF);
   SSPIF=0;

}

void i2c_idle(void)
{
   while(STAT_RW);
   ZERO=0;
   while(ZERO)
     {
       SSPCON2&0x1f;
     }

}


void i2c_write_time(void)
{
    int i;
    i2c_idle();
    SEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0xd0;
    wrtacktest();
    while(STAT_BF);
    SSPBUF=0x0;
    wrtacktest();
    while(STAT_BF);

    for(i=0;i<7;i++)
      {
         SSPBUF=time[i];
         wrtacktest();
      }
    PEN=1;
	while(!SSPIF);
    SSPIF=0;
    DelayUs(20); 
}

void i2c_read_time(void)
{
    static volatile unsigned int i;
    i2c_idle();
    SSPIF=0;
    SEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0Xd0;
    wrtacktest();
    SSPBUF=0;
    wrtacktest();
    
    i2c_idle();
    SSPIF=0;
    RSEN=1;
    while(!SSPIF);
    SSPIF=0;
    SSPBUF=0Xd1;
    wrtacktest();

      
    for(i=0;i<7;i++)
       {
          RCEN=1;
          while(!SSPIF);
          time[i]=SSPBUF;
          while(!SSPIF);

          SSPIF=0;
          if(i>=6) 
              {
                ACKDT=1;
              }
          else     
              {
                ACKDT=0;
              }
          ACKEN=1;
          while(!SSPIF);
          SSPIF=0;
       }
   
    PEN=1;
    while(!SSPIF);
    SSPIF=0;
DelayUs(20); 
}
     







void main(void)
{


 int i;
 INTCON=0;	// purpose of disabling the interrupts.
 i2c_init();
 init_comms();	// set up the USART - settings defined in usart.h

time[6]=0x1;
time[5]=0x2;
time[4]=0x3;
time[3]=0x4;
time[2]=0x5;
time[1]=0x6;
time[0]=0x7;



	


i2c_write_time();
	DelayMs(240);

 while(1)
 	{ 

	i2c_read_time();
  	 
 	for( i=6;i>=0;i--)
	{
	printf("%x--",time[i]);
	}
	printf("|\n\r");
	  
 
	DelayMs(240);
	DelayMs(240);
	DelayMs(240);
	DelayMs(240);

  	}
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -