📄 ds1302.c
字号:
#include <at89x52.h>
#include <intrins.h>
#define uchar unsigned char
#define dd _nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();
//*******DS1302管脚定义*******
sbit DS_RESET=P2^6; //复位
sbit DS_IO=P2^5; // IO
sbit DS_CLK=P2^4; //时钟
//***************************
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC2=ACC^2;
sbit ACC3=ACC^3;
sbit ACC4=ACC^4;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
sbit ACC7=ACC^7;
//************函数声明**********
void w_1302 (uchar add,uchar dat); //对指定的寄存器写数据,add寄存器地址,dat数据
uchar r_1302 (uchar add); //读指定的寄存器数据,返回值为十进制数
void init_ds1302 (void);
//向DS1302写入控制字及数据
void w_1302 (uchar add,uchar dat)
{
ACC=add;
DS_CLK=0;
DS_RESET=1;
dd;
DS_IO=ACC0;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC1;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC2;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC3;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC4;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC5;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC6;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC7;
DS_CLK=0;
dd;
DS_CLK=1;
dd;
//*********
ACC=dat;
DS_IO=ACC0;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC1;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC2;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC3;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC4;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC5;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC6;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC7;
DS_CLK=0;
dd;
DS_CLK=1;
dd;
DS_RESET=0;
DS_CLK=0;
dd;
}
//读DS1302数据
uchar r_1302 (uchar add)
{
uchar a,b,k;
DS_CLK=0;
DS_RESET=1;
ACC=add;
DS_IO=ACC0;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC1;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC2;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC3;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC4;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC5;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC6;
DS_CLK=0;
dd;
DS_CLK=1;
DS_IO=ACC7;
DS_CLK=0;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
dd;
//************
ACC0=DS_IO;
DS_CLK=1;
dd;
DS_CLK=0;
ACC1=DS_IO;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
ACC2=DS_IO;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
ACC3=DS_IO;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
ACC4=DS_IO;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
ACC5=DS_IO;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
ACC6=DS_IO;
dd;
DS_CLK=1;
dd;
DS_CLK=0;
ACC7=DS_IO;
dd;
DS_RESET=0;
DS_CLK=0;
dd;
k=ACC;
a=k/16;
b=k%16;
k=a*10+b;
return (k);
}
//DS1302初始化操作
void init_ds1302 (void)
{
w_1302 (0x8e,0x00); //禁止写保护
w_1302 (0x80,0x00); //写秒
w_1302 (0x82,0x00); //写分
w_1302 (0x84,0x12); //写时
w_1302 (0x86,0x01); //写日
w_1302 (0x88,0x01); //写月
w_1302 (0x8c,0x09); //写年
w_1302 (0x8a,0x04); //写周日
w_1302 (0x90,0xaa); //打开充电二级管 二个二级管串联一个4K电阻
w_1302 (0x8e,0x80); //允许写保护
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -