⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds12887.c

📁 本C原程序是C51编写的美国Dallas公司推出的跨越2000年的时钟芯片DS12887/DS12C887的驱动程序
💻 C
字号:
//AT89C52与DS12887驱动
#include <absacc.h>
#include <reg52.h>
#define  uchar unsigned char
#define  MCA XBYTE[0xff0a]   /* 寄存器A */
#define  MCB XBYTE[0xff0b]    /* 寄存器B */
#define  MCC XBYTE[0xff0c]    /* 寄存器C */
#define  MCD XBYTE[0xff0d]    /* 寄存器D */
//#define  HOUR XBYTE[0xff05]    /* 时报警 */
sbit uip_bit=ACC^7;

uchar idata dt[6]={05,7,21,11,11,25}; /* 99/4/5 11:11:25 */            
uchar at[6]={9,8,7,4,2,0};   /* 年、月、日、时、分、秒 */

uchar xdata *addr=0xff00;   /* 片选地址 */

void initstat(void) {    /* 初始化函数 */
  MCA=0x2f;        /* 时钟频率为32.768kHz,中断周期500ms */
  ACC=MCC;         /* 读寄存器C,清零中断请求标志 */
  ACC=MCD;         /* 读寄存器D,使VRT=1,数据有效 */
  MCB=0x72;        /* 允许中断,时标为BCD码,24小时方式 */
  HOUR=0xff;       /* 每小时闹钟中断 */
  EA=1;        /* 开中断 */
  EX0=1;
}
void wMC(void) {      /* 写时标函数 */
  uchar i;
  MCB=0x80;        /* 使SET=1 */
  for(i=0;i<=6;i++)     /* 置时标初值 */
   *(addr+at[i])=dt;
}
void rMC(void) {      /* 读时标函数 */
  uchar i;
  do {ACC=MCA;} while(uip_bit);  /* 判UIP位 */
  for(i=0;i<6;i++)     /* 读时标寄存器的值 */
   dt[i]=*(addr+at[i]);
}
void main(void) {     /* 主函数 */
   wMC();
   initstat();
   rMC();
   while(1);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -