找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3088|回复: 2
收起左侧

RTC(rx8010sj)的读写相关代码,利用NXF8563的代码进行修改的。

[复制链接]
ID:368032 发表于 2018-7-9 16:12 | 显示全部楼层 |阅读模式
/*--------------------------------
  NXF8563初始化
--------------------------------*/
void NXF8563_init()
{
        sda=1;
        delayus();
        scl=1;
        delayus();
        _write_add(0x10,0x00);
        _write_add(0x11,0x32);
        _write_add(0x12,0x10);
        _write_add(0x13,0x10);           //周四
        _write_add(0x14,0x05);
        _write_add(0x15,0x07);
        _write_add(0x16,0x18);
}

/*--------------------------
         开始信号
--------------------------*/
void start()
{
        sda=1;
        delayus();
                scl=1;
        delayus();
        sda=0;
        delayus();
        scl=0;
        delayus();
}

/*-----------------------
        停止
-----------------------*/
void stop()   
{
        sda=0;
        delayus();
        scl=1;
        delayus();
        sda=1;
        delayus();
}

/*-----------------------
        应答
-------------------------*/
void respons()  
{
        unchar i;
        scl=1;
        delayus();
        while((sda==1)&&(i<250))i++;
        scl=0;
        delayus();
}

/*------------------------------------
           写一个字节子函数
------------------------------------*/
void write_byte(unchar date)
{
        unchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delayus();
                sda=CY;
                delayus();
                scl=1;
                delayus();
        }

        scl=0;
        delayus();
        sda=1;
        delayus();
}

/*------------------------------------
         读一个字节函数
------------------------------------*/
unchar read_byte()  
{
        unchar i,k;
        scl=0;
        delayus();
        sda=1;
        delayus();
        for(i=0;i<8;i++)
        {
                scl=1;
                delayus();
                k=(k<<1)|sda;
                scl=0;
                delayus();
        }
        return k;
}

/*--------------------------------------------------
         往一个单元里写内容函数
---------------------------------------------------*/
void _write_add(unchar address,unchar date)   
{
        start();
        write_byte(0x64);
        respons();
        write_byte(address);
        respons();
        write_byte(date);
        respons();
        stop();
}

/*----------------------------------------------
                读一个单元的内容
---------------------------------------------*/
unchar read_add(unchar address)      
{
        unchar date;
        start();
        write_byte(0x64);
        respons();
        write_byte(address);
        respons();
        start();
        write_byte(0x65);
        respons();
        date=read_byte();
        stop();
        return date;
}

/*------------------------------------------------
           向nxf8563写入时钟数据
------------------------------------------------*/
void Write8563(void)
{

        unchar i,tmp;
        for(i=0;i<8;i++)
            {                  //BCD处理
                tmp=time_buf1[i]/10;
                time_buf[i]=time_buf1[i]%10;
                time_buf[i]=time_buf[i]+tmp*16;
            }
//        write_add(0x00,0x00);                            //关闭写保护
//        write_add(0x01,0x00);                                //暂停
        _write_add(0x10,time_buf[7]);                //秒
        _write_add(0x11,time_buf[6]);                //分
        _write_add(0x12,time_buf[5]);                //时
        _write_add(0x13,time_buf[4]);                //周
        _write_add(0x14,time_buf[3]);                //日
        _write_add(0x15,time_buf[2]);                //月
        _write_add(0x16,time_buf[1]);                //年
//        write_add(0x00,0x00);                        //打开写保护
}

/*-----------------------------------------
   读出时钟数据
----------------------------------------*/
void read8563()   
{
        time_buf[7]=read_add(0x16);                //秒
        time_buf[6]=read_add(0x15);                //分
        time_buf[5]=read_add(0x14);                //时
        time_buf[4]=read_add(0x13);                //周
        time_buf[3]=read_add(0x12);                //日
        time_buf[2]=read_add(0x11);                //月
        time_buf[1]=read_add(0x10);                //年

        //time_buf1[7]=time_buf[1]%16+(time_buf[1]/16)*10;
        //time_buf1[6]=(time_buf[2]&0x1f)%16+((time_buf[2]&0x1f)/16)*10;
        //time_buf1[5]=(time_buf[3]&0x3f)%16+((time_buf[3]&0x3f)/16)*10;
        //time_buf1[3]=(time_buf[4]&0x3f)%16+((time_buf[4]&0x3f)/16)*10;
        //time_buf1[2]=(time_buf[5]&0x7f)%16+((time_buf[5]&0x7f)/16)*10;
        //time_buf1[1]=(time_buf[6]&0x7f)%16+((time_buf[6]&0x7f)/16)*10;
        //time_buf1[7]=(time_buf[7]&0x07)%16+((time_buf[7]&0x07)/16)*10;

}


回复

使用道具 举报

ID:368032 发表于 2018-7-9 16:14 | 显示全部楼层
本代码刚测试通过
回复

使用道具 举报

ID:399111 发表于 2020-6-13 14:23 | 显示全部楼层
你这不能用啊,,能把全部的上传看下吗,我测试了,显示55
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表