📄 ds1307.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 + -