| /*------------------------------------------------------------------------------------------ [文件名] Sd.c [功能] 對sd2001時鐘進行時實讀寫,并對其內(nèi)部的ram進行操作 [版本] 1.4b [作者] 鞠春陽 [最后修改時間] 2003年5月12日 [版權(quán)所有] www.mcuzb.com [sd2001資料] 請到www.mcuzb.com下載 ===========================================================================================*/ //用戶調(diào)用函數(shù) //void initSD2001Time(unsigned char year,unsigned char month,unsigned char day,unsigned char date,unsigned char hour,unsigned char minute,unsigned char second) //時鐘初始化函數(shù) 年,月,日,星期,小時,分鐘,秒 //ReadSD2001_Time() //讀時間函數(shù) 結(jié)果分別存放在全局變量 SD2001_year SD2001_month ;SD2001_day ;SD2001_date ;SD2001_hour ;SD2001_minute;SD2001_second;中</P><P>
#include "reg51.h" #include "intrins.h"
sbit SD2001_SDA= P2^1; sbit SD2001_SCL= P2^3; sbit SCLE = P1^5; sbit SDAE = P1^4;#define SomeNOP(); { _nop_(); _nop_(); _nop_();_nop_(); } unsigned char SD2001_year ; unsigned char SD2001_month ; unsigned char SD2001_day ; unsigned char SD2001_date ; unsigned char SD2001_hour ; unsigned char SD2001_minute; unsigned char SD2001_second; unsigned char LishiSRAM[7]; /*-------------------------------------------------------------------------------- 調(diào)用方式:void SD2001_I2CStart(void) ﹫2001/07/0 4 函數(shù)說明:私有函數(shù),I2C專用 ---------------------------------------------------------------------------------*/ void SD2001_I2CStart(void) { EA=0; SD2001_SCL=0; SD2001_SDA=1; SomeNOP(); SD2001_SCL=1; SomeNOP();//INI SD2001_SDA=0; SomeNOP(); //START SD2001_SCL=0; }</P><P>void I2CStartRAM(void) { EA=0; SCLE=0; SDAE=1; SomeNOP(); SCLE=1; SomeNOP();//INI SDAE=0; SomeNOP(); //START SCLE=0; } /*-------------------------------------------------------------------------------- 調(diào)用方式:void SD2001_I2CStop(void) ﹫2001/07/0 4 函數(shù)說明:私有函數(shù),I2C專用 ---------------------------------------------------------------------------------*/ void SD2001_I2CStop(void) { SD2001_SDA=0; SD2001_SCL=0; SomeNOP(); //INI SD2001_SCL=1; SomeNOP(); SD2001_SDA=1; SomeNOP();//STOP SD2001_SCL=0; EA=1; }</P><P>void I2CStopRAM(void) { SDAE=0; SCLE=0; SomeNOP(); //INI SCLE=1; SomeNOP(); SDAE=1; SomeNOP();//STOP SCLE=0; EA=1; } /*-------------------------------------------------------------------------------- 調(diào)用方式:void I2CSend(unsigned char ch) ﹫2001/07/0 5 函數(shù)說明:私有函數(shù),I2C專用 MSB ---------------------------------------------------------------------------------*/ void SD2001_I2CSendByte(unsigned char ch) { unsigned char i=8; while(i--) { SD2001_SCL=0;_nop_(); SD2001_SDA=(bit)(ch&0x80); ch<<=1; SomeNOP(); SD2001_SCL=1; SomeNOP(); } SD2001_SCL=0; // WaitAck(); } /*-------------------------------------------------------------------------------- 調(diào)用方式:void I2CSend(unsigned char ch) ﹫2001/07/0 5 |