文件名稱:ds12c887.c
適用范圍:時鐘芯片ds12c887的驅動程序
*************************************************************/
#include
/* 命令常量定義 */
#define CMD_START_DS12C887 0x20 /* 開啟時鐘芯片
*/
#define CMD_START_OSCILLATOR 0x70 /* 開啟振蕩器,
處于抑制狀態(tài) */
#define CMD_CLOSE_DS12C887 0x30 /* 關掉時鐘芯片
*/
/* 所有的置位使用或操作,清除使用與操作 */
#define MASK_SETB_SET 0x80 /* 禁止刷新 */
#define MASK_CLR_SET 0x7f /* 使能刷新 */
#define MASK_SETB_DM 0x04 /* 使用HEX格式
*/
#define MASK_CLR_DM 0xfb /* 使
用BCD碼格式 */
#define MASK_SETB_2412 0x02 /* 使
用24小時模式 */
#define MASK_CLR_2412 0xfd /* 使用12小時模
式 */
#define MASK_SETB_DSE 0x01 /* 使用夏令時 */
#define MASK_CLR_DSE 0xfe /* 不使用夏令時
*/
/* 寄存器地址通道定義 */
xdata char chSecondsChannel _at_ 0xdf00;
xdata char chMinutesChannel _at_ 0xdf02;
xdata char chHoursChannel _at_ 0xdf04;
xdata char chDofWChannel _at_ 0xdf06;
xdata char chDateChannel _at_ 0xdf07;
xdata char chMonthChannel _at_ 0xdf08;
xdata char chYearChannel _at_ 0xdf09;
xdata char chCenturyChannel _at_ 0xdf32;
xdata char chRegA _at_ 0xdf0a;
xdata char chRegB _at_ 0xdf0b;
xdata char chRegC _at_ 0xdf0c;
xdata char chRegD _at_ 0xdf0d;
/* 函數(shù)聲明部分 */
void StartDs12c887(void);
void CloseDs12c887(void);
void InitDs12c887(void);
unsigned char GetSeconds(void);
unsigned char GetMinutes(void);
unsigned char GetHours(void);
unsigned char GetDate(void);
unsigned char GetMonth(void);
unsigned char GetYear(void);
unsigned char GetCentury(void);
void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char
chHours);
void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear);
/*************************************************************
函數(shù)功能:該函數(shù)用來啟動時鐘芯片工作
應用范圍:僅在時鐘芯片首次使用時用到一次
入口參數(shù):
出口參數(shù):
*************************************************************/
void StartDs12c887(void)
{
chRegA = CMD_START_DS12C887;
}
/*************************************************************
函數(shù)功能:該函數(shù)用來關閉時鐘芯片
應用范圍:一般用不到
入口參數(shù):
出口參數(shù):
*************************************************************/
void CloseDs12c887(void)
{
chRegA = CMD_CLOSE_DS12C887;
}
void InitDs12c887()
{
StartDs12c887();
chRegB = chRegB | MASK_SETB_SET; /* 禁止刷新 */
chRegB = chRegB & MASK_CLR_DM | MASK_SETB_2412 \
& MASK_CLR_DSE;
/* 使用BCD碼格式、24小時模式、不使用
夏令時 */
chCenturyChannel = 0x21; /* 設
置為21世紀 */
chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取秒字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetSeconds(void)
{
return(chSecondsChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取分字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetMinutes(void)
{
return(chMinutesChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取小時字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetHours(void)
{
return(chHoursChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取日字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetDate(void)
{
return(chDateChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取月字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetMonth(void)
{
return(chMonthChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取年字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetYear(void)
{
return(chYearChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來從時鐘芯片讀取世紀字節(jié)
應用范圍:
入口參數(shù):
出口參數(shù):
*************************************************************/
unsigned char GetCentury(void)
{
return(chCenturyChannel);
}
/*************************************************************
函數(shù)功能:該函數(shù)用來設置時鐘芯片的時間
應用范圍:
入口參數(shù):chSeconds、chMinutes、chHours是設定時間的壓縮BCD碼
出口參數(shù):
*************************************************************/
void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char
chHours)
{
chRegB = chRegB | MASK_SETB_SET; /* 禁止刷新 */
chSecondsChannel = chSeconds;
chMinutesChannel = chMinutes;
chHoursChannel = chHours;
chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */
}
/*************************************************************
函數(shù)功能:該函數(shù)用來設置時鐘芯片的日期
應用范圍:
入口參數(shù):chDate、chMonth、chYear是設定日期的壓縮BCD碼
出口參數(shù):
*************************************************************/
void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear)
{
chRegB = chRegB | MASK_SETB_SET; /* 禁止刷新 */
chDateChannel = chDate;
chMonthChannel = chMonth;
chYearChannel = chYear;
chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */
}





