//打開(kāi)DS1302
void TimeSpiOpen(void)
{
TIMECLK = 0;
TIMERST = 0;//禁止DS1302
TIMEIO= 1;//釋放數(shù)據(jù)總線
TIMERST = 1;//使能DS1302
}
//關(guān)閉DS1302
void TimeSpiClose(void)
{
TIMERST = 0;//禁止DS1302
TIMEIO= 1;//釋放數(shù)據(jù)總線
TIMECLK = 1;
}
//讀寫(xiě)DS1302
unsigned char TimeSpiReadWrite(unsigned char val)
{
unsigned char i;
ACC = val;//取8位數(shù)據(jù)
for (i = 8;i > 0; i--)
{
TIMECLK = 0;//時(shí)鐘下降沿輸入數(shù)據(jù)(DS1302讀)
_nop_();//延時(shí)
CY = TIMEIO;//接收串行數(shù)據(jù)到CY
_rrca_();//右移一位數(shù)據(jù)到CY(先存后取)
TIMEIO = CY;//發(fā)送串行數(shù)據(jù)
TIMECLK = 1;//時(shí)鐘上升沿打入數(shù)據(jù)(DS1302寫(xiě))
TIMEIO= 1;//釋放數(shù)據(jù)總線
}
val = ACC;
return val;
}
//讀DS1302字節(jié)
unsigned char TimeByteRead(unsigned char address)
{
TimeSpiOpen();//打開(kāi)DS1302
TimeSpiReadWrite(address);//寫(xiě)入DS1302命令
address = TimeSpiReadWrite(0xff);//讀入DS1302數(shù)據(jù)
TimeSpiClose();//關(guān)閉DS1302
return address;//返回?cái)?shù)據(jù)
}
//讀DS1302RAM字節(jié)
unsigned char TimeRamByteRead(unsigned char address)
{
TimeSpiOpen();//打開(kāi)DS1302
TimeSpiReadWrite((address << 1) | 0xc1);//寫(xiě)入DS1302命令
address = TimeSpiReadWrite(0xff);//讀入DS1302數(shù)據(jù)
TimeSpiClose();//關(guān)閉DS1302
return address;//返回?cái)?shù)據(jù)
}
//寫(xiě)DS1302字節(jié)
void TimeByteWrite(unsigned char address, unsigned char val)
{
TimeSpiOpen();//打開(kāi)DS1302
TimeSpiReadWrite(address);//寫(xiě)地址
TimeSpiReadWrite(val);//寫(xiě)數(shù)據(jù)
TimeSpiClose();//關(guān)閉DS1302
}
//寫(xiě)DS1302字節(jié)
void TimeRamByteWrite(unsigned char address, unsigned char val)
{
TimeSpiOpen();//打開(kāi)DS1302
TimeSpiReadWrite((address << 1) | 0xc0);//寫(xiě)地址
TimeSpiReadWrite(val);//寫(xiě)數(shù)據(jù)
TimeSpiClose();//關(guān)閉DS1302
}
//使能DS1302寫(xiě)保護(hù)
void TimeWriteEnable(void)
{
TimeByteWrite(timewriteregall, timewriteseg);//使能DS1302寫(xiě)保護(hù)
}
//開(kāi)放DS1302寫(xiě)保護(hù)
void TimeWrieDisbale(void)
{
TimeByteWrite(timewriteregall, 0);//開(kāi)放DS1302寫(xiě)保護(hù)
}
//DS1302工作開(kāi)始
void TimeWorkStart(void)
{
unsigned char val;
val = TimeByteRead(timereadseg);//讀秒數(shù)據(jù)
val &= 0x7f;//打開(kāi)晶振
TimeWrieDisbale();//開(kāi)放DS1302寫(xiě)保護(hù)
TimeByteWrite(timewriteseg, val);//打開(kāi)晶振
TimeByteWrite(tricklewrite, 0xa5);//打開(kāi)充電二極管
TimeWriteEnable();//使能DS1302寫(xiě)保護(hù)
}





