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

📄 rtc8025.c

📁 epson时钟芯片驱动程序,keil c调试通过,SPI总线方式
💻 C
字号:
//设备地址 0110 010x  x=0写,x=1读

#include "reg52.h"
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int

/*******************************************************************/
void wr_tdata(uchar *dtaddr,uchar start_addr,uchar wrcount);
void rd_tdata(uchar *dtaddr,uchar start_addr,uchar rdcount);

/*******************************************************************/
sbit scl	= P1^0;
sbit sda	= P1^1;

union timeu
{
	uchar timearr[7];
	struct
	{
		uchar second;
		uchar minute;
		uchar hour;
		uchar week;
		uchar day;
		uchar month;
		uchar year;
	}times;
}time;

uchar timecontrol[2];

/*******************************************************************/
void delay(void)
{ _nop_();
  _nop_();
  _nop_();
}

void bstart(void)
{ scl=0;
  delay();
  sda=1;
  delay();
  scl=1;
  delay();
  sda=0;
  delay();
  scl=0;
}

void bstop(void)
{ scl=0;
  delay();
  sda=0;
  delay();
  scl=1;
  delay();
  sda=1;
  delay();
  scl=0;
  delay();
}

void wbyte(uchar aa)
{ uchar i;
  for(i=0;i<8;i++)
  { aa<<=1;
    scl=0;
    delay();
    sda=CY;
    delay();
    scl=1;
    delay();
  }
  scl=0;
  delay();
  scl=1;
  delay();
  scl=0;
}

uchar rbyte(void)
{ uchar i,k=0;
  for(i=0;i<8;i++)
  { scl=0;
    delay();
    scl=1;
    delay();
    k=k<<1;
    if (sda) k++;
  }
  scl=0;
  delay();
  sda=1;
  delay();
  scl=1;
  delay();
  return(k);
}

/**************************************************/
void wr_tdata(uchar *dtaddr,uchar start_addr,uchar wrcount)
{
	uchar i;
	bstart();
	wbyte(0x64);
	wbyte(start_addr<<4);
	for(i=start_addr;i<start_addr+wrcount;i++)
		wbyte(*dtaddr++);
	bstop();
}

/**************************************************/
void rd_tdata(uchar *dtaddr,uchar start_addr,uchar rdcount)
{
    uchar i;
	bstart();
	wbyte(0x64);
	wbyte(start_addr<<4);
	for(i=start_addr;i<start_addr+rdcount;i++)
	{
		bstart();
		wbyte(0x65);
		*(dtaddr++)=rbyte();
	}
	bstop();
}

/*******************************************************************/
void main()
{
	timecontrol[0]=0x20;
	timecontrol[1]=0x20;
	wr_tdata(timecontrol,0x0e,2);
	time.times.second=0x25;
	time.times.minute=0x10;
	time.times.hour=0x16;
	time.times.week=0x03;
	time.times.day=0x27;
	time.times.month=0x04;
	time.times.year=0x05;
	wr_tdata(time.timearr,0x00,7);

        while(1)
        {
	rd_tdata(time.timearr,0x00,7);
        _nop_();
        }
}

⌨️ 快捷键说明

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