STC单片机控制DS1302程序 (C程序)

#includereg51.h
#includeintrins.h
typedefunsignedcharbyte;
sbitsclk=p1^0;//ds1302时钟口p1.0
sbitio=p1^1;//ds1302数据口p1.1
sbitrst=p1^2;//ds1302片选口p1.2
//秒分时日月星期年
bytecodeinit[]={0x00,0x00,0x20,0x01,0x01,0x05,0x10};
bytedatanow[7];
voidds1302_initial();
voidds1302_settime(byte*p);
voidds1302_gettime(byte*p);
voidmain()
{
ds1302_initial();//初始化ds1302
ds1302_settime(init);//设置初始时间
ds1302_gettime(now);//读取当前时间
while(1);
}
/**************************************
延时x微秒(stc12c5a60s2@12m)
不同的工作环境,需要调整此函数
此延时函数是使用1t的指令周期进行计算,与传统的12t的mcu不同
**************************************/
voiddelay()
{
_nop_();
_nop_();
}
/**************************************
从ds1302读1字节数据
**************************************/
byteds1302_readbyte()
{
bytei;
bytedat=0;
for(i=0;i>=1;//数据右移一位
if(io)dat|=0x80;//读取数据
sclk=1;//时钟线拉高
delay();//延时等待
}
returndat;
}
/**************************************
向ds1302写1字节数据
**************************************/
voidds1302_writebyte(bytedat)
{
chari;
for(i=0;i>=1;//移出数据
io=cy;//送出到端口
sclk=1;//时钟线拉高
delay();//延时等待
}
}
/**************************************
读ds1302某地址的的数据
**************************************/
byteds1302_readdata(byteaddr)
{
bytedat;
rst=0;
delay();
sclk=0;
delay();
rst=1;
delay();
ds1302_writebyte(addr);//写地址
dat=ds1302_readbyte();//读数据
sclk=1;
rst=0;
returndat;
}
/**************************************
往ds1302的某个地址写入数据
**************************************/
voidds1302_writedata(byteaddr,bytedat)
{
rst=0;
delay();
sclk=0;
delay();
rst=1;
delay();
ds1302_writebyte(addr);//写地址
ds1302_writebyte(dat);//写数据
sclk=1;
rst=0;
}
/**************************************
写入初始时间
**************************************/
voidds1302_settime(byte*p)
{
byteaddr=0x80;
byten=7;
ds1302_writedata(0x8e,0x00);//允许写操作
while(n--)
{
ds1302_writedata(addr,*p++);
addr+=2;
}
ds1302_writedata(0x8e,0x80);//写保护
}
/**************************************
读取当前时间
**************************************/
voidds1302_gettime(byte*p)
{
byteaddr=0x81;
byten=7;
while(n--)
{
*p++=ds1302_readdata(addr);
addr+=2;
}
}
/**************************************
初始化ds1302
**************************************/
voidds1302_initial()
{
rst=0;
sclk=0;
ds1302_writedata(0x8e,0x00);//允许写操作
ds1302_writedata(0x80,0x00);//时钟启动
ds1302_writedata(0x90,0xa6);//一个二极管+4k电阻充电
ds1302_writedata(0x8e,0x80);//写保护
}

河北广电网络将结合5G网络等技术助力秦皇岛地区的数据产业发展
怎么设计模拟无源滤波器-2
UV-C光线如何快速有效地为手机灭菌
中国联通湖南省分公司党委书记、总经理欧阳恩山率队调研拓维信息
影响旋转花键精度的因素有哪些?
STC单片机控制DS1302程序 (C程序)
自动驾驶技术的“收官之战”:触发下一段产业赛程
华为p10价格破5000,值得入手吗?
骁龙865跑分越跑越高 那么性能真的在提升吗
表面贴片元件的手工焊接技巧
锡浆(锡膏)干了怎么办?用什么稀释?
聚积科技推出高效率降压型DC/DC转换器-MBI6661
诺基亚回归之作诺基亚6,1699的骁龙430你会买吗?
他来了 他带着全新AR驾车导航新增上线竖屏版走来了
adsl调制解调器怎么用_adsl调制解调器设置方法
瑞士不止有美食和钟表,还有极速5G
浅谈如何操作小米11隐藏技能?
宏光MINI EV 9月销量达20150辆,成为新能源汽车领域增长最快车型
E现场:迟到魅族发布会—魅族16s
将RS485温湿度传感器输出信号转化为网络信号的方案