原创 c51之DS12887

2007-3-19 20:42 3786 3 3 分类: MCU/ 嵌入式


DS12887C(转贴(dhd0)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />



/*************************************************************
文件名称:ds<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />12c887.c
适用范围:时钟芯片ds12c887的驱动程序
*************************************************************/   
#include <absacc.h>

/*
命令常量定义 */
#define CMD_START_DS12C887     0x20            /*
开启时钟芯片
*/
#define CMD_START_OSCILLATOR 0x70            /*
开启振荡器,
处于抑制状态 */
#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;

/*
函数声明部分 */
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);

/*************************************************************
函数功能:该函数用来启动时钟芯片工作
应用范围:仅在时钟芯片首次使用时用到一次
入口参数:
出口参数:
*************************************************************/   
void StartDs12c887(void)
{
    chRegA = CMD_START_DS12C887;
}

/*************************************************************
函数功能:该函数用来关闭时钟芯片
应用范围:一般用不到
入口参数:
出口参数:
*************************************************************/   
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;            /*
使能刷新 */
}

/*************************************************************
函数功能:该函数用来从时钟芯片读取秒字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetSeconds(void)
{
    return(chSecondsChannel);
}

/*************************************************************
函数功能:该函数用来从时钟芯片读取分字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetMinutes(void)
{
    return(chMinutesChannel);
}

/*************************************************************
函数功能:该函数用来从时钟芯片读取小时字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetHours(void)
{
    return(chHoursChannel);
}

/*************************************************************
函数功能:该函数用来从时钟芯片读取日字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetDate(void)
{
    return(chDateChannel);
}
/*************************************************************
函数功能:该函数用来从时钟芯片读取月字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetMonth(void)
{
    return(chMonthChannel);
}

/*************************************************************
函数功能:该函数用来从时钟芯片读取年字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetYear(void)
{
    return(chYearChannel);
}

/*************************************************************
函数功能:该函数用来从时钟芯片读取世纪字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetCentury(void)
{
    return(chCenturyChannel);
}    

/*************************************************************
函数功能:该函数用来设置时钟芯片的时间
应用范围:
入口参数:chSecondschMinuteschHours是设定时间的压缩BCD
出口参数:
*************************************************************/   
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;            /*
使能刷新 */
}

/*************************************************************
函数功能:该函数用来设置时钟芯片的日期
应用范围:
入口参数:chDatechMonthchYear是设定日期的压缩BCD
出口参数:
*************************************************************/   
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;            /*
使能刷新 */
}     

(
文章推荐人:电池)

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条