📄 ds12887.c
字号:
#include <absacc.h>
#include <reg51.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]={99,4,5,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<=9;i++) /* 置时标初值 */
*(addr+at[i])=dt[i];
}
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 + -