DS1302实时时钟
芯片原理图:
引脚图:
需要注意的是,VCC1跟VCC2都外接了电容,只是容量不一样,同常备用电源VCC2的电容值是VCC1电容值的100倍,这也不难理解,如果断电,VCC2将能够提供较长一段时间的电力。
VCC1(主电源)-----------过滤滤波作用
VCC2(备用电源)--------断电时放电提供电力
X1与X2引脚接上晶振以获取实时时间
各种不同的引脚有着不一样的作用,我们在这里只介绍了一些特殊引脚,如有所需,请自行查阅官方数据手册。
DS1302内部有8个寄存器,分别掌管着秒,分,时,天,星期,月,年还有一个写入保护。
我们将依次介绍,首先看原理图:
寄存器0:
“Bit7”中的“CH”位表示时钟开始计时,1表示时钟停止计时。
“Bit4~Bit6”表示秒的十位
“BIt0~Bit3”表示秒的个位
寄存器1:
“Bit4~Bit6”表示分钟的十位
“Bit0~Bit3”表示分钟的个位
寄存器2:
Bit7:
1:代表12小时制,分上午和下午
2:代表24小时制
Bit5:当表示为12小时制的时候:
0:表示上午
1:表示下午
Bit4:与BIt5一起用,表示小时的十位
寄存器7:
Bit7:写保护位,如果是1,则禁止写入数据。
数据在时钟芯片中存储形式为”BCD”码,假如我们要在数码管上显示数字“59”,那么我们将分别显示“5”和“9”在不同的数码管上,因为数据中单片机内部是二进制形式,也就是说要么是0要么是1。
我们在计算机上显示的数字其实对应的有ASCII码表值。
时序图:
上升箭头指的是DS1302
单字节写/读操作时序图:
第一个字节:通过写的方式指明对哪个寄存器进行读写操作
第二个字节:读写的数据
写操作:
单片机----》数据-----》`I/O`口----`DS1302`
读操作:
`DS1302`----》数据-----》`I/O`口----单片机
写操作:
写操作的时候单片机向I/O口发送的数据是二进制,所以要检测I/O口的电平状态,判断是低还是高
写操作是在SCLK低电平时单片机将数据放在I/O口上,当SCLK上升沿时,DS1302读取
void DS1302Write(unsigned int reg,unsigned int data)
{
unsigned char detect;
DS1302RST = 1;//只有高电平才能触发
for(detect = 0x01;detect!=0;detect<<=1)//写地址
{
if((detect®)!=0)
{
DS1302DAT = 1;
}
else
{
DS1302DAT = 0;//IO状态
}
DS1302CK = 1;
delay();
DS1302CK = 0;
delay();
}
for(detect = 0x01;detect!=0;detect<<1)//写地址
{
if((detect&data)!=0)
{
DS1302DAT = 1;//IO口状态
}
else
{
DS1302DAT = 0;
}
DS1302CK = 1;
dalay();
DS1302CK = 0;
delay();
}
}
读操作:
读操作是单片机对I/O口的状态进行判断,是单片机读取DS1302发送到I/O口的二进制数据 所以要挨个对I/O口的高低进行判断
读操作是在SCLK高电平时DS1302放数据到I/O上,将SCLK置为低电平时,单片机就可以从I/O口上读取数据
unsigned int DS1302Read(unsigned int addr)//只写入地址
{
DS1302RST = 1;//打开总开关
unsigned int detect;
unsigned int dat = 0;
for(detect = 0x01;detect!=0;detect<<=1)//写地址
{
if((detect&addr)!=0)
{
DS1302DAT = 1;
}
else
{
DS1302DAT = 0;
}
DS1302CK = 1;
delay();
DS1302CK = 0;
delauy();
}
for(detect = 0x01;detect!=0;detect<<=1)
{
if(DS1302DAT!=0)
{
dat|=detect;//
}
DS1302CK = 1;//拉高
delay();
DS1302CK = 0;//拉低完成一位发送
delay();
}
DS1302RST = 0;//总电平置低完成发送
return dat;//返回数据
}
总结:
单片机对DS1302的读写操作
其实就是单片机对I/O口状态的判断
然后进行第二条总线的拉高和拉低
上一篇:51单片机学习笔记———13.2DS1302实时时钟代码部分(1)
下一篇:51单片机学习笔记———12.1模拟法用于串口通信
推荐阅读最新更新时间:2024-11-02 20:55
设计资源 培训 开发板 精华推荐
- LT3757 的典型应用 - 升压、反激、SEPIC 和反相控制器
- 使用具有可编程电源电压的 ADXRS450 数字速率传感器和 ADuC7026 MCU 感测角速度
- LT3597EUHG 演示板、60V 三路降压型 LED 驱动器
- 217W、12V、16V、20V、125V交流转直流多路输出高清电视电源
- 基于esp01s的联网加热杯垫
- P-NUCLEO-IHM03,STM32 电机控制包,使用 FOC 算法,用于三相、低电压和低电流电机评估套件
- 小电视天气时钟
- AD8337-EVALZ,双电源同相评估套件,为 AD8337 VGA 的测试和评估提供平台
- 英集芯IP6826无线充电器
- KitKat SlimeVR PCB