1、DS1302時鐘芯片的講解
待完成?。?!
#ifndef__SPIDRIVER_H__
#define__SPIDRIVER_H__
#include
#include
#include"DELAY_FUNCTION_FELL.h"
sbitSCLK=P1^0;//位定義1302芯片的接口,時鐘輸出端口定義在P1.0引腳
sbitDATA=P1^1;//位定義1302芯片的接口,數據輸出端定義在P1.1引腳
sbitRST=P1^2;//位定義1302芯片的接口,復位端口定義在P1.2引腳
voidWrite1302(unsignedchardat);//向DS1302寫一個字節(jié)的數據(或指令)
unsignedcharRead1302(void);//從DS1302中讀一個字節(jié)的數據
voidWriteSet1302(unsignedcharCmd,unsignedchardat);//根據命令字,向1302寫一個字節(jié)數據
unsignedcharReadSet1302(unsignedcharCmd);//根據命令字,從1302讀取一個字節(jié)數據
voidDS1302_Set_Second(intsecond);//設置秒
voidDS1302_Set_Minute(intminute);//設置分
voidDS1302_Set_Hour(inthour);//設置時
voidDS1302_Set_Day(intday);//設置日
voidDS1302_Set_Month(intmonth);//設置月
voidDS1302_Set_Weekday(intweekday);//設置星期
voidDS1302_Set_Year(intyear);//設置年
voidDS1302_Init(void);//對1302進行初始化設置
intRead_DS1302_Second(void);
intRead_DS1302_Minute(void);
intRead_DS1302_Hour(void);
intRead_DS1302_Day(void);
intRead_DS1302_Month(void);
intRead_DS1302_Weekday(void);
intRead_DS1302_Year(void);
#endif
#include"DS1302_SPIdriver.h"
/*****************************************************
函數功能:向1302寫一個字節(jié)數據
入口參數:x
***************************************************/
voidWrite1302(unsignedchardat)
{
unsignedchari;
SCLK=0;//拉低SCLK,為脈沖上升沿寫入數據做好準備
delay1us(2);//稍微等待,使硬件做好準備
for(i=0;i<8;i++)//連續(xù)寫8個二進制位數據
{
DATA=dat&0x01;//取出dat的第0位數據寫入1302低位在前,高位在后
delay1us(2);//稍微等待,使硬件做好準備
SCLK=1;//上升沿寫入數據
delay1us(2);//稍微等待,使硬件做好準備
SCLK=0;//重新拉低SCLK,形成脈沖
dat>>=1;//將dat的各數據位右移1位,準備寫入下一個數據位
}
}
/*****************************************************
函數功能:根據命令字,向1302寫一個字節(jié)數據
入口參數:Cmd,儲存命令字;dat,儲存待寫的數據
***************************************************/
voidWriteSet1302(unsignedcharCmd,unsignedchardat)
{
RST=0;//禁止數據傳遞
SCLK=0;//確保寫數居前SCLK被拉低
RST=1;//啟動數據傳輸
delay1us(2);//稍微等待,使硬件做好準備
Write1302(Cmd);//寫入命令字
Write1302(dat);//寫數據
SCLK=1;//將時鐘電平置于高電平狀態(tài)
RST=0;//禁止數據傳遞
}
/*****************************************************
函數功能:從1302讀一個字節(jié)數據
入口參數:x
***************************************************/
unsignedcharRead1302(void)
{
unsignedchari,dat;
delay1us(2);//稍微等待,使硬件做好準備
for(i=0;i<8;i++)//連續(xù)讀8個二進制位數據
{dat>>=1;
if(DATA==1)//如果讀出的數據是1
dat|=0x80;//將1取出,寫在dat的最高位
SCLK=1;//將SCLK置于高電平,為下降沿讀出
delay1us(2);//稍微等待
SCLK=0;//拉低SCLK,形成脈沖下降沿
delay1us(2);//稍微等待
}
returndat;//將讀出的數據返回
}
/*****************************************************
函數功能:根據命令字,從1302讀取一個字節(jié)數據
入口參數:Cmd
***************************************************/
unsignedcharReadSet1302(unsignedcharCmd)
{
unsignedchardat;
RST=0;//拉低RST
SCLK=0;//確保寫數居前SCLK被拉低
RST=1;//啟動數據傳輸
Write1302(Cmd);//寫入命令字
dat=Read1302();//讀出數據
SCLK=1;//將時鐘電平置于已知狀態(tài)
RST=0; /





