📄 12887.c
字号:
//-------------------------------------------------------------------
//12887驱动程序,程序定义p2.6作为芯片的片选,根据实际情况可进行修改
//程序与外部的接口是指针变量dt,可有调用程序提供
//-------------------------------------------------------------------
#include"absacc.h"
#define mca XBYTE[0xbf0a]
#define mcb XBYTE[0xbf0b]
#define mcc XBYTE[0xbf0c]
#define mcd XBYTE[0xbf0d]
unsigned char xdata *addr=0xbf00; //定义addr为基地址指针
unsigned char bdata buf;
sbit uip=buf^7;
unsigned char at[6]={6,9,7,4,2,0}; //时标寄存器地址缓冲区,依次为年月日时分秒
//----------------------------------------------------------------------------
//函数:void init_12887(void)
//功能:12887初始化函数
//----------------------------------------------------------------------------
void DS12887_init(void)
{
mca=0x2f; //时钟频率为32.768kHz,中断周期500ms
buf=mcc; //读寄存器C,清零中断请求标志
buf=mcd; //读寄存器D,使VRT=1,数据有效
mcb=0x76; //允许中断,时标为二进制码,12小时方式
}
//-------------------------------------------------------------------------
//函数:void Write_12887(unsigned char *dt)
//功能:12887写数据函数
//参数:时间缓冲区
//--------------------------------------------------------------------------
void Write_12887(unsigned char *dt)
{
unsigned char i;
mcb|=0x80; //写禁止12887命令,b寄存器最高位置1
for(i=0;i<6;i++)
*(addr+at[i])=*(dt+i);
mcb&=0x7f; //写允许12887命令使其工作,b寄存器最高位置0
}
//--------------------------------------------------------------------------
//函数:void Read_12887(unsigned char *dt)
//功能:12887读数据函数
//参数:数据读入时间缓冲区
//---------------------------------------------------------------------
void Read_12887(unsigned char *dt)
{
unsigned char i;
do{buf=mca;}while(uip); //检测芯片是否处在更新周期阶段
for(i=0;i<6;i++)
*(dt+i)=*(addr+at[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -