在51单片机上使用DS1302

1、硬件电路
SCLK、IO、RET三个口都要接上拉电阻,在这里插入图片描述2、程序
SCLK、IO、RET三个口都要接上拉电阻,实验中SCLK接P0.3,I/O接P0.4,RET接P0.5
在这里插入图片描述
根据DS1302的时序图,往DS1302中写数据时,RST先要有一个上升沿。所以初始化时把RET和SCLK全部设置为0。
//==========================================
// DS1302初始化
//==========================================
void Ds1302_Init(void)
{
CE = 0; //RST脚置低
SCLK = 0; //SCK脚置低
Ds1302_Write_Byte(WRITE_SECOND,0x00); //开始
}
然后启动读字节,让RST有一个上升沿。
void Ds1302_Write_Byte (uchar addr, uchar dat)
{
uchar i;
CE = 1;
//写入目标地址:addr
addr = addr & 0xFE; //最低位置零
for (i = 0; i < 8; i ++)
{
if (addr & 0x01)
{
DIO = 1;
}
else
{
DIO = 0;
}
SCLK = 1;
SCLK = 0;
addr = addr >> 1;
}
//写入数据:d
for (i = 0; i < 8; i ++)
{
if (dat & 0x01)
{
DIO = 1;
}
else
{
DIO = 0;
}
SCLK = 1;
SCLK = 0;
dat = dat >> 1;
}
CE = 0;; //停止DS1302总线
}
3、遇到的问题
时钟显示为2000-00-00,引脚没接好,短路了
时钟显示为初始时间,不走了,首先看晶振是否是32.7k的,然后更换电容6p或者30p的都行。

4、总程序(时间显示在128*64的LCD屏幕上):
#include <c8051f410.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int i;
/LCD管脚设置*/
sbit RS=P1^3;
sbit RW=P1^4;
sbit EN=P1^5;
sbit PSB=P1^6;
sbit RET=P0^7;
//sfr16 TMR2RL = 0xca;// 定时器2重载值这里采用的是定时器2的16位自动重载
//sfr16 TMR2 = 0xcc;// 定时器2计数值
//sfr16 ADC0 = 0xbd;// P35 ADC0的采样值
#define SYSCLK 24500000 // 内部晶振频率为24.5MHz
#define BAUDRATE 115200 // 串口通讯波特率为115200
void SYSCLK_Init (void)
{
OSCICN = 0x84; // 内部振荡器不分频为24.5MHz P138
RSTSRC = 0x04; // 复位源寄存器 时钟丢失检测器标志置1
CLKSEL = 0x00;
}
void delay_50us(uint t)
{
uchar i=2;
while(t–)
while(i–);
}
vo

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值