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

📄 ds1302.c

📁 该程序用来测试89C51与IDE硬盘的接口
💻 C
字号:
//DS1302时钟芯片驱动程序

#include <reg51.h>

//下面是引脚连接关系
sbit clock_dat=P1^0;
sbit clock_clk=P1^1;
sbit clock_clk=P1^2;


sbit a0=ACC^0;
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;



void clock_out(unsigned char dd) {
	ACC=dd;
	clock_dat=a0;clock_clk=1;clock_clk=0;
	clock_dat=a1;clock_clk=1;clock_clk=0;
	clock_dat=a2;clock_clk=1;clock_clk=0;
	clock_dat=a3;clock_clk=1;clock_clk=0;
	clock_dat=a4;clock_clk=1;clock_clk=0;
	clock_dat=a5;clock_clk=1;clock_clk=0;
	clock_dat=a6;clock_clk=1;clock_clk=0;
	clock_dat=a7;clock_clk=1;clock_clk=0;
}
unsigned char clock_in(void) {
	clock_dat=1;
	a0=clock_dat;
	clock_clk=1;clock_clk=0;a1=clock_dat;
	clock_clk=1;clock_clk=0;a2=clock_dat;
	clock_clk=1;clock_clk=0;a3=clock_dat;
	clock_clk=1;clock_clk=0;a4=clock_dat;
	clock_clk=1;clock_clk=0;a5=clock_dat;
	clock_clk=1;clock_clk=0;a6=clock_dat;
	clock_clk=1;clock_clk=0;a7=clock_dat;
	return(ACC);
}
unsigned char read_clock(unsigned char ord) {
	unsigned char dd=0;
	clock_clk=0;
	clock_rst=0;
	clock_rst=1;
	clock_out(ord);
	dd=clock_in();
	clock_rst=0;
	clock_clk=1;
	return(dd);
}
void write_clock(unsigned char ord,unsigned char dd) {
	clock_clk=0;
	clock_rst=0;
	clock_rst=1;
	clock_out(ord);
	clock_out(dd);
	clock_rst=0;
	clock_clk=1;
}


/*注意事项:
1.每次上电,必须把秒寄存器高位(第7位)设置为0,时钟才能走时。
2.如果需要写入数据和时钟日历信息,必须把“写保护”寄存器设置成为0,方法入下:
	write_clock(0xc1|0x7,0);
3.使能“慢速充电”,方法如下:
	write_clock(0xc1|0x8,0xaa);
*/

void main(void) {
	unsigned char address,d;
//调用方法:
//DS1302内部分为32字节RAM和8字节时钟日历数据
//读内部RAM 0:
	address=0;
	d=read_clock(0xc0|address);
//读内部RAM 1:
	address=1;
	d=read_clock(0xc0|address);

//写内部RAM 0,写入5:
	address=0;d=5;
	write_clock(0xc1|address,d);
//读内部RAM 1,写入123:
	address=1;d=123;
	d=read_clock(0xc1|address,d);

//=================================

	
//读内部时钟日历数据0:秒:
	address=0;
	d=read_clock(0x80|address);
//读内部时钟日历数据1:分:
	address=1;
	d=read_clock(0x80|address);

//写内部时钟日历数据0:秒,写入03秒
	address=0;d=3;
	write_clock(0x80|address,d);
}



/*
	内部时钟日历地址图,始终日历用BCD码储存
	0:秒
	1:分
	2:小时
	3:日期
	4:月份
	5:星期
	6:年
	7:写保护寄存器
	8:慢速充电寄存器
*/








⌨️ 快捷键说明

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