📄 ds1302.c
字号:
#include <reg51.h>
#include <stdio.h>
typedef unsigned char byte;
sbit ds_clk=P1^1;
sbit ds_io =P1^2;
sbit ds_rst=P1^3;
#define WRITE_ENABLE() write_ds1302(7,0x00)
#define WRITE_DISABLE() write_ds1302(7,0x80)
#define CHARGE_ENABLE() write_ds1302(8,0xAA)
#define CLOCK_START() write_ds1302(0,read_ds1302(0)&0x7F)
void write_ds1302(byte adr, byte val) {
byte i;
ds_clk = 0;
ds_rst = 0;
ds_rst = 1;
adr = (adr << 1) | 0x80; // 1 ram/ck a4 a3 a2 a1 a0 rd/wr
for (i=8;i;i--) {
ds_io = (adr&0x01)?1:0;
ds_clk = 1;
ds_clk = 0;
adr >>= 1;
}
for (i=8;i;i--) {
ds_io = (val&0x01)?1:0;
ds_clk = 1;
ds_clk = 0;
val >>= 1;
}
ds_rst = 0;
ds_clk = 1;
}
byte read_ds1302(byte adr) {
byte i,val;
ds_clk = 0;
ds_rst = 0;
ds_rst = 1;
adr = (adr << 1) | 0x81; // 1 ram/ck a4 a3 a2 a1 a0 rd/wr
for (i=8;i;i--) {
ds_io = (adr&0x01)?1:0;
ds_clk = 1;
ds_clk = 0;
adr >>= 1;
}
ds_io = 1; // pull high
for (i=8;i;i--) {
val>>=1;
if (ds_io) val|=0x80;
ds_clk = 1;
ds_clk = 0;
}
ds_rst = 0;
ds_clk = 1;
return val;
}
code byte RTCC_INIT[]={
//ss mm hh DD MM WW YY
0x80,0x59,0x23,0x01,0x01,0x07,0x02
};
void main(void) {
byte i;
byte buf[7];
WRITE_DISABLE();
for (i=0;i<7;i++) write_ds1302(i,RTCC_INIT[i]);
CLOCK_START();
while (1) {
for (i=0;i<7;i++) buf[i]=read_ds1302(i);
for (i=0;i<7;i++) printf("%02bX ",buf[i]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -