DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。採用三線接口與CPU進行同步通信,並可採用突發方式一次傳送多個字節的時鐘信號或RAM數據。DS1302內部有一個31×8的用於臨時性存放數據的RAM寄存器。採用普通32.768kHz晶振!RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節或多字節數據的傳送手段。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數據傳送,I/O引腳變為高阻態。上電運行時,在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數據輸入輸出端(雙向),在控制指令字輸入後的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字後的下一個SCLK脈衝的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7。SCLK始終是輸入端。
//======================================驅動
sbit SDA_1302=P1^0;
sbit SCL_1302=P1^1;
sbit RST
void send_data(unsigned char ch)
{
unsigned char i;
SCL_1302=0;
_nop_();
RST=1;
for(i=0;i<8;i++)
{
}
}
unsigned char receive_data()
{
unsigned char i,data;
SCL_1302=0;
_nop_();
RST=1;
for(i=0;i<8;i++)
{
}
SCL_1302=0;
RST=0;
return data;
}
================================================//
//=======================================應用
sbit SDA_1302=P1^0;
sbit SCL_1302=P1^1;
sbit RST=P1^2;
#define WSEC
#define RSEC
#define WMIN
#define RMIN
#define WHOU
#define RHOU
#define WDAY
#define RDAY
#define WMON
#define RMON
#define WWEEK
#define RWEEK
#define WYEAR
#define RYEAR
#define EWOK
#define EW
#define CDOK
#define CD
void delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void write_ds1302(unsigned char addr,unsigned char tempdata)
{
}
unsigned char read_ds1302(unsigned char addr)
{
}
void write_initial(void)
{
SCL_1302=0;
RST=0;
write_ds1302(EWOK,0x00);
write_ds1302(WSEC,0X00);
write_ds1302(WMIN,0X00);
write_ds1302(WHOU,0X81);
write_ds1302(WDAY,0X01);
write_ds1302(WMON,0X01);
write_ds1302(WWEEK,0X04);
write_ds1302(WYEAR,0X09);
}
void read(void)
{
DAY=read_ds1302(RDAY);
MONTH=read_ds1302(RMON);
YEAR=read_ds1302(RYEAR);
}