DS1302使用(没有仔细的原理)

DS1302

对于比赛给的底层,在单字节读取最后加上SD = 0;就可以正常使用了。

数据传输

For data inputs, data must be valid during the rising edge of the clock and data bits are output on the falling edge of clock. If the CE input is low, all data transfer terminates and the I/O pin goes to a high-impedance state.

对于数据输入(写DS1302),数据必须在时钟上升沿保持有效。对于数据的输出(读DS1302),数据必须在时钟下降沿保持有效。

数据低位在前

读: DS1302的OUTPUT (涉及到单片机的对SPI总线的读写操作)

先写一个字节指令,上升沿的时候DS1302锁存数据。然后DS1302会在之后的8个CLCK输出八个字节。所以就是写一个控制字节,然后在紧接着读取一个数据字节。

void Write_SPI(char dat) //上升沿写数据,在SCL = 1时更改数据
{
    unsigned char i;
    IO = 1;
    for(i=0;i<8;i++)
    {
        IO = addr&0x01;
        SCLK = 1;
        SCLK = 0;
        addr >>= 1;
    }
    IO = 1;
}
unsigned char Read_SPI(void)//数据会在SCLK = 0时改变,所以先采样IO口,在拉低总线
{
    unsigned char temp=0,i;
    for(i=0;i<8;i++)
    {
        temp >>= 1;
        if(IO)
            dat |= 0x80;
        SCLK = 1;
        SCLK = 0;
    }
    return temp;
}
void Write_DS1302(unsigned char addr,unsigned char dat)
{
    RST = 1;
    Write_SPI(addr);
    Write_SPI(dat);
    RST = 0;
}
unsigned char Read_DS1302(unsigned char addr)
{
    unsigned char temp;
    RST = 1;
    Write_SPI(addr);
    temp = Read_SPI();
    RST = 0;
    IO = 0;	//单字节读必须加******大赛官方给的驱动加上这个就可以使用
}

在进行任何数据传输时,/RST必须被制高电平(此时允许外部读写数据)

DS1302寄存器

1550906614074

81h/80h:BIT7的CH:为1时时钟停止震荡,低功耗;为0时钟震荡。所以这一位要写0;

BF/BE: BURST模式的读和写

控制寄存器【8F/8E】:

BURST 模式:写:写控制领命BE 后从上到下在写七个字节

​ 读:写控制命令BF 后从上到下读取七个字节

	RST = 1;
	Write_Ds1302_Byte(0xBF);
	s = Read_Ds1302_Byte();
	m = Read_Ds1302_Byte();
	h = Read_Ds1302_Byte();
	RST = 0;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值