有如下:
#include "config.h"
#include "I2C.h"
#define SLA3104Mem 0x50 //不含读写位
#define SLA3104RTC 0x68
void main (void)
{
data unsigned char x,y,z,buffdatasend[0x19]={0},buffdataget[0x19]={0},temp;
I2C_Init();
/*启动RTC时钟*/
temp =0x00;
//下面的函数各参数的意义依次是:
//从机地址、从机内部子地址、子地址长度为一个字节、数据的起始地址、数据长度
I2C_Puts(SLA3104RTC,0x01,1,&temp,0x01); //RTC时钟使能
/*下面这个程序段演示了如何更改时间*/
temp =0x02;
I2C_Puts(SLA3104RTC,0x00,1,&temp,0x01); //进入时间校正模式
buffdatasend[0]=0x10;//秒
buffdatasend[1]=0x55;//分
buffdatasend[2]=0x10;//时
buffdatasend[3]=0x04;//星期
buffdatasend[4]=0x03;//日
buffdatasend[5]=0x01;//月
buffdatasend[6]=0x08;//年
I2C_Puts(SLA3104RTC,0x02,1,buffdatasend,0x07);//先把数据写入到FM3104的用户寄存器
temp =0x00;
I2C_Puts(SLA3104RTC,0x00,1,&temp,0x01); //更新时间
/*下面程序段演示了如何校正时钟*/
temp =0x04;
I2C_Puts(SLA3104RTC,0x00,1,&temp,0x01); //调整时钟的频率,写入修正系数前CAL必需为1
//先用频率计测出频率,通过查表查出修正系数,然后通过下面语句把修正系数写入到寄存器
temp =0x1F;
I2C_Puts(SLA3104RTC,0x01,1,&temp,0x01); //修正时钟的频率
temp =0x00;
I2C_Puts(SLA3104RTC,0x00,1,&temp,0x01); //校准设置CAL(4:0)不会影响到512Hz输出,用频率计来测CAL引脚的频率,其值是不变的 |