时钟芯片ds1302目前得到广泛的应用,但是ds1302的调试还是很有难度的。这篇文章就来说说ds1302时钟芯片的调试经验,奉上时钟芯片调试程序贴,是网上下的,我已经通过硬件测试,绝对没有问题。
ds1302时钟芯片调试经验总结
1. 在上电时,rst 必须为逻辑0 直至vcc》2.0v。同时sclk 在rst 驱动至逻辑1 状态时必须为逻辑0。
2. 数据输入是在sclk的上升沿,数据输出是在sclk的下降沿。
3. 传输方式:低位先传输。
4. 时钟运行:秒寄存器的最高位(bit7)是作为时钟控制位,当为逻辑1时,时钟停止,为0时钟运行。所以如果要时钟运行的话就必须将秒寄存器的最高位清0
5. 12/24小时模式:小时寄存器的第7位(最高位)是选择12小时制还是24小时制。当为逻辑1时选择12小时,逻辑0选择24小时。当为12小时制时,小时寄存器的第5位用来表示上午am和下午pm,逻辑1的时候表示pm,逻辑0的时候表示am。
6. 在企图对ds1302操作之前,必须将wp位清零。
7. 读写模式:有两种模式,可以单字节读写,以及连续多字节读写(burst mode)。在连续多字节读写时,即burst mode,地址是必须从地址0的0位开始的。如果对时钟操作,即clock操作,则必须连续写满8个字节。若是对ram操作,则可以不必须写满31个字节。
8. ds1302包含了实时时钟日历和31个字节的ram,这里需要注意的是实时时钟日历的8个寄存器和31个字节的ram是独立的,没有任何关系,不要混淆。31个ram字节可以做其他用途,如闹钟等。因为ds1302有电池供电,所以ram的内容不会丢失,相当于eeprom了。用户可以用来实现特别的要求。
9. 时序必须严格按照其数据手册上来。
调试时钟芯片ds1302程序
c/c++ code
#define write_second 0x80
#define write_minute 0x82
#define write_hour 0x84
#define read_second 0x81
#define read_minute 0x83
#define read_hour 0x85
#define write_protect 0x8e
//位寻址寄存器定义
sbit acc_7 = acc^7;
//管脚定义
sbit sclk = p3^5; // ds1302时钟信号 7脚
sbit dio= p3^6; // ds1302数据信号 6脚
sbit ce = p3^7; // ds1302片选 5脚
//地址、数据发送子程序
void write1302 ( unsigned char addr,dat )
{
unsigned char i,temp;
ce=0; //ce引脚为低,数据传送中止
sclk=0; //清零时钟总线
ce = 1; //ce引脚为高,逻辑控制有效
//发送地址
for ( i=8; i》0; i-- ) //循环8次移位
{
sclk = 0;
temp = addr;
dio = (bit)(temp&0x01); //每次传输低字节
addr 》》= 1; //右移一位
sclk = 1;
}
//发送数据
for ( i=8; i》0; i-- )
{
sclk = 0;
temp = dat;
dio = (bit)(temp&0x01);
dat 》》= 1;
sclk = 1;
}
ce = 0;
}
//数据读取子程序
unsigned char read1302 ( unsigned char addr )
{
unsigned char i,temp,dat1,dat2;
ce=0;
sclk=0;
ce = 1;
//发送地址
for ( i=8; i》0; i-- ) //循环8次移位
{
sclk = 0;
temp = addr;
dio = (bit)(temp&0x01); //每次传输低字节
addr 》》= 1; //右移一位
sclk = 1;
}
//读取数据
for ( i=8; i》0; i-- )
{
acc_7=dio;
sclk = 0;
acc》》=1;
sclk = 1;
}
ce=0;
dat1=acc;
dat2=dat1/16; //数据进制转换
dat1=dat1%16; //十六进制转十进制
dat1=dat1+dat2*10;
return (dat1);
}
//初始化ds1302
void initial(void)
{
write1302 (write_protect,0x00); //禁止写保护
write1302 (write_second,0x56); //秒位初始化
write1302 (write_minute,0x34); //分钟初始化
write1302 (write_hour,0x12); //小时初始化
write1302 (write_protect,0x80); //允许写保护
}
关键信息触手可及,益莱储为客户提供全天候MyER自定义管理平台
使用可参数化功能块(例如FB20)进行故障评估
中国云计算产业应用落地的进程将加快,创新模式也将无限拓展
人工智能时代GPU将成新宠?
驱动芯片LED高段位显示屏驱动VK1629适用于冰箱、空 调、家庭影院等
DS1302时钟芯片调试经验,奉上调试时钟芯片DS1302的程序
蔚来汽车宣布涨价 多款车型价格上调10000元
电源的信号完整性仿真中 Sigrity电容模型应用与管理指导
通用工业机器人的构造
将物质与传感器相结合打造安全的智能家居
英伟达将以70亿美元收购以色列芯片制造商Mellanox
智能车灯发展新趋势:AFS随动转向
国家智能传感器创新中心:致力于先进传感器技术创新
交换机的6种配置模式
几种特殊的函数宏封装方式介绍
Arm宣布将会采用Bfloat16数据类型,这种数据类型会成为主流吗?
京东智联云提高安全管理工作效率,搭建“闭环”安全运营体系
智慧消防的价值是什么,它的发展趋势将会如何
智慧灯杆是未来智慧城市的主要发展趋势
松下一体化摄像机AW-UE43/53/80的使用