?? clock-1302.c
字號:
/*=========================================================
* 開發環境:Keil uVision3 *
* 軟件名稱: *
* 開發日期:2007/1/10 *
* 開 發 者:LPC *
=========================================================*/
/*加入頭文件*/
#include<W77C32.h> //W77E58頭文件
#include<intrins.h> //
#include<stdio.h> //
#include<stdlib.h> //
#include<TYPE.H> //聲明定義
#include<OUTTYPE.H> //聲明字庫
#include<INCLUDES.H> //聲明所有子函數
//=======================================================//
/*****************實時時鐘函數開始************************/
//=======================================================//
/*=========================================================
函數名:DS1302_EN()
功能:時鐘芯片使能函數
入口參數:無
出口參數:無
=========================================================*/
void DS1302_EN(void)
{
DS1302_CS=0; //釋放時鐘芯片
DS1302_CLK=0; //時鐘芯片使能時時鐘信號必須為低
DS1302_CS=1; //時鐘芯片使能
}
/*=========================================================
函數名:DS1302_UN()
功能:時鐘芯片釋放函數
入口參數:無
出口參數:無
=========================================================*/
void DS1302_UN(void)
{
DS1302_CLK=1; //釋放時鐘
DS1302_CS=0; //釋放時鐘芯片
}
/*=========================================================
函數名:DS1302_ReadByte()
功能:時鐘芯片讀字節函數
入口參數:無
出口參數:讀出數據(1字節)
說明:讀出數據在時鐘下降沿
=========================================================*/
Uchar DS1302_ReadByte(void)
{
Uchar i,TByte; //聲明變量
for(i=0;i<8;i++)
{
TByte>>=1; //接收數據右移1位
DS1302_CLK=0; //時鐘低
if(DS1302_IO)
{
TByte|=0x80; //第一位置高
}
else
{
TByte&=0x7F; //第一位拉低
}
DS1302_CLK=1; //時鐘高
}
return TByte; //返回讀出數據
}
/*=========================================================
函數名:DS1302_WriteByte()
功能:時鐘芯片寫字節函數
入口參數:讀出數據(1字節)
出口參數:無
說明:數據在CLK上升沿寫入
=========================================================*/
void DS1302_WriteByte(Uchar TByte)
{
Uchar i; //聲明變量
for(i=0;i<8;i++)
{
DS1302_CLK=0; //拉低時鐘
if(TByte&0x01)
{
DS1302_IO=1; //寫入數據位放在數據口
}
else
{
DS1302_IO=0; //寫入數據位放在數據口
}
DS1302_CLK=1; //輸出數據
TByte>>=1; //數據右移移位
}
}
/*=========================================================
函數名:DS1302_WriteTime()
功能:向時鐘芯片寫數據函數
入口參數:寫入地址(1字節)、寫入數據/命令(1字節)
出口參數:無
=========================================================*/
void DS1302_WriteTime(Uchar Addrs,Uchar Con_Dat)
{
DS1302_EN(); //時鐘芯片使能
DS1302_WriteByte(Addrs); //寫寄存器地址
DS1302_WriteByte(Con_Dat); //寫指令/數據
DS1302_UN(); //釋放時鐘芯片
}
/*=========================================================
函數名:DS1302_ReadTime()
功能:讀出時鐘芯片數據函數
入口參數:寫入地址(1字節)
出口參數:讀出數據(1字節)
=========================================================*/
Uchar DS1302_ReadTime(Uchar Addrs)
{
Uchar r; //聲明變量
DS1302_EN(); //時鐘芯片使能
DS1302_WriteByte(Addrs); //寫寄存器地址
r=DS1302_ReadByte(); //讀出數據
DS1302_UN(); //釋放時鐘芯片
return r; //返回數據
}
/*=========================================================
函數名:DS1302_ReadTimeBurst()
功能:連續讀出時鐘芯片數據函數
入口參數:無
出口參數:無(讀出數據(9字節))
=========================================================*/
void DS1302_ReadTimeBurst(void)
{
Uchar i; //聲明臨時變量
DS1302_EN(); //時鐘芯片使能
DS1302_WriteByte(0xBF); //發送連續讀指令
for(i=0;i<8;i++)
{
Time[i]=DS1302_ReadByte(); //讀出數據
}
DS1302_UN(); //釋放時鐘芯片
}
/*=========================================================
函數名:DS1302_WriteTimeBurst()
功能:連續寫入時鐘芯片時鐘數據函數
入口參數:無
出口參數:無
=========================================================*/
void DS1302_WriteTimeBurst(void)
{
Uchar i; //聲明臨時變量
DS1302_EN(); //時鐘芯片使能
DS1302_WriteByte(0xBE); //發送連續寫指令
for(i=0;i<8;i++)
{
DS1302_WriteByte(Time[i]); //寫入數據
}
DS1302_UN(); //釋放時鐘芯片
}
/*=========================================================
函數名:DS1302_Init()
功能:時鐘芯片初始化函數
入口參數:無
出口參數:無
=========================================================*/
void DS1302_Init(void)
{
Uchar Sd; //聲明變量
Sd=DS1302_ReadTime(0x81); //讀秒狀態寄存器
if(Sd&0x80)
{
DS1302_WriteTime(0x8E,0x00); //DS1302寫使能
DS1302_WriteTime(0x80,0x00); //寫起始秒數據
DS1302_WriteTime(0x82,0x00); //寫起始分數據
DS1302_WriteTime(0x84,0x09); //寫起始時數據
DS1302_WriteTime(0x86,0x01); //寫起始日數據
DS1302_WriteTime(0x88,0x05); //寫起始月數據
DS1302_WriteTime(0x8A,0x04); //寫起始周數據
DS1302_WriteTime(0x8C,0x08); //寫起始年數據
DS1302_WriteTime(0x90,0xAA); //配置充電寄存器
DS1302_WriteTime(0x8E,0x80); //關閉DS1302寫使能
}
}
//=======================================================//
/*****************實時時鐘函數結束************************/
//=======================================================//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -