/*************************************************************
文件名稱:ds12c887.c 適用范圍:時(shí)鐘芯片ds12c887的驅(qū)動(dòng)程序 *************************************************************/ #include <absacc.h> /* 命令常量定義 */ #define CMD_START_DS12C887 0x20 /* 開啟時(shí)鐘芯片 */ #define CMD_START_OSCILLATOR 0x70 /* 開啟振蕩器,處于抑制狀態(tài) */ #define CMD_CLOSE_DS12C887 0x30 /* 關(guān)掉時(shí)鐘芯片 */ /* 所有的置位使用或操作,清除使用與操作 */ #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小時(shí)模式 */ #define MASK_CLR_2412 0xfd /* 使用12小時(shí)模式 */ #define MASK_SETB_DSE 0x01 /* 使用夏令時(shí) */ #define MASK_CLR_DSE 0xfe /* 不使用夏令時(shí) */ /* 寄存器地址通道定義 */ 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ù)用來啟動(dòng)時(shí)鐘芯片工作 應(yīng)用范圍:僅在時(shí)鐘芯片首次使用時(shí)用到一次 入口參數(shù): 出口參數(shù): *************************************************************/ void StartDs12c887(void) { chRegA = CMD_START_DS12C887; } /************************************************************* 函數(shù)功能:該函數(shù)用來關(guān)閉時(shí)鐘芯片 應(yīng)用范圍:一般用不到 入口參數(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小時(shí)模式、不使用夏令時(shí) */ chCenturyChannel = 0x21; /* 設(shè)置為21世紀(jì) */ chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */ } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取秒字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetSeconds(void) { return(chSecondsChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取分字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetMinutes(void) { return(chMinutesChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取小時(shí)字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetHours(void) { return(chHoursChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取日字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetDate(void) { return(chDateChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取月字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetMonth(void) { return(chMonthChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取年字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetYear(void) { return(chYearChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來從時(shí)鐘芯片讀取世紀(jì)字節(jié) 應(yīng)用范圍: 入口參數(shù): 出口參數(shù): *************************************************************/ unsigned char GetCentury(void) { return(chCenturyChannel); } /************************************************************* 函數(shù)功能:該函數(shù)用來設(shè)置時(shí)鐘芯片的時(shí)間 應(yīng)用范圍: 入口參數(shù):chSeconds、chMinutes、chHours是設(shè)定時(shí)間的壓縮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è)置時(shí)鐘芯片的日期 應(yīng)用范圍: 入口參數(shù):chDate、chMonth、chYear是設(shè)定日期的壓縮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; /* 使能刷新 */ } |
|