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

📄 ds12c877a.c

📁 实时时钟芯片的读写控制
💻 C
字号:
#include "regX52.H"
#include"pr/TWJ.h"

#define  ctrl                P1 
#define  DataUsb             P3

#define  DS12887RD        0x02  //p1.1		DS
#define  DS12887ALE       0x10  //p1.4	   AS
#define  DS12887WR        0x08  //p1.2
#define  DS12887CS        0x20  //p1.5


#define  SecondAddr       0
#define  MinuAddr         2
#define  HourAddr         4
#define  WeekAddr         6
#define  DateAddr         7
#define  MonthAddr        8
#define  YearAddr         9

#define  RegisterA        10
#define  RegisterB        11
#define  RegisterC        12
#define  RegisterD        13

#define  output_LowP3(tempdata)  ctrl&=(~tempdata)
#define  output_HighP3(tempdata) ctrl|=tempdata

BYTE RealTimeGroup[6];

 //////////////////////////////////////////////////////////////////////////////////////
void InitalDS12887IO(void)
 {
   //IO2DIR|=0x13ff0000;  
   //PINSEL0&=0xfffff3ff;
   //IO0DIR|=0x00000020;
   output_HighP3(DS12887CS);
   output_HighP3(DS12887WR);
   output_LowP3(DS12887RD);
   output_LowP3(DS12887ALE);	  
 }
/////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
void WriteDataToDS12887(BYTE addr,BYTE needwritedata)
 {
  

   output_LowP3(DS12887CS);

   output_HighP3(DS12887ALE);  
   //delay(20);
   DataUsb=addr;
   delay(80);
   output_LowP3(DS12887ALE);

   DataUsb=needwritedata; 
   delay(80);
   output_LowP3(DS12887WR);
   delay(80);   
   output_HighP3(DS12887WR);
   delay(80); 
   output_HighP3(DS12887CS);
 }
/////////////////////////////////////////////////////////////////////////// 
BYTE ReadDataFromDS12887(BYTE addr)
{
   BYTE tempdata;
   
//	delay(20); 
   
   output_HighP3(DS12887RD);
   output_LowP3(DS12887CS);
   delay(8); 
   output_HighP3(DS12887ALE);
   delay(8);    
   DataUsb=addr;
   delay(8); 
   output_LowP3(DS12887ALE);
   delay(8);
   DataUsb=0xff;
   output_LowP3(DS12887RD);
   delay(8);
   tempdata=DataUsb;
   output_HighP3(DS12887RD);

   output_HighP3(DS12887CS);
  return tempdata;
 } ////////////////////////////////////////////////////////////////
void InitalRegisterAB(void)
{
    WriteDataToDS12887(RegisterA,0x20);
	WriteDataToDS12887(RegisterB,0x06);
}
///////////////////////////////////////////////////////////////////////////////////////////

void GetAllRealTime()
{ 
 
  //RealTimeGroup[5]=ReadDataFromDS12887(SecondAddr);  
  //RealTimeGroup[0]=ReadDataFromDS12887(YearAddr);
  //RealTimeGroup[1]=ReadDataFromDS12887(MonthAddr);
  //RealTimeGroup[2]=ReadDataFromDS12887(DateAddr);
  RealTimeGroup[3]=ReadDataFromDS12887(HourAddr);
  RealTimeGroup[4]=ReadDataFromDS12887(MinuAddr);
  /*SBUF=RealTimeGroup[3];
   	while(!TI);
	TI=0;
  SBUF=RealTimeGroup[4];
   	while(!TI);
	TI=0;	  */

  ca[0]= RealTimeGroup[3]/10;
  ca[1]= RealTimeGroup[3]%10;
  ca[2]=RealTimeGroup[4]/10;
  ca[3]=RealTimeGroup[4]%10;
 // RealTimeGroup[5]=ReadDataFromDS12887(SecondAddr);	 
  
} 
/////////////////////////////////////////////////////////////////////////////////////////////////
void SetAllTime(BYTE temp[6])
{
  //WriteDataToDS12887(YearAddr,temp[0]);
  //WriteDataToDS12887(MonthAddr,temp[1]);
  //WriteDataToDS12887(DateAddr,temp[2]);
  WriteDataToDS12887(HourAddr,temp[3]);
  WriteDataToDS12887(MinuAddr,temp[4]);
  WriteDataToDS12887(SecondAddr,temp[5]);
} 

⌨️ 快捷键说明

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