DS1302基于STC89C52输入输出数据

DS1302基于STC89C52输入输出数据

关于 DS1302 的详细数据与参数就不再多叙述,网上可以找到很多。我推荐这一篇文章:https://blog.csdn.net/u013184273/article/details/78843881

本文章主要是对输入输出的代码做出一些示范或者补充

简单来说,就是:
数据在SCLK上升沿时,DS1302读数据,在SCLK下降沿时,DS1302写数据

以读写秒寄存器为例

#include<reg52.h>

//具体引脚根据自身决定
sbit SCLK = P3 ^ 6 ;
sbit IO = P3 ^ 4 ;
sbit RST = P3 ^ 5 ;

//延迟函数
void delay ( int x ) {
	int y ; 
	for ( ; x > 0 ; x-- )
		for ( y = 110 ; y > 0 ; y-- ) ;
}

//初始化
void init () {
	//只有再SCLK低电平时,才能将RST置高,提前将所用接口置低电平是个不错的选择
	SCLK = 0 ;
	RST = 0 ;
	IO = 0 ;
}

//写数据
void WriteSecond ( unsigned char second ) {
	unsigned char i ;
	RST = 1 ;
	
	//先写指令
	for ( i = 0 ; i < 8 ; i ++ ) {
		//从最低位开始,将最低为放入IO口
		IO = ( 0x80 >> i ) & 0x01 ;        
		//上升沿DS1302读数据  
		SCLK = 0 ; SCLK = 1 ; delay ( 1 ) ;  
	}
	
	delay ( 1 ) ;
	
	//再写数据
	for ( i = 0 ; i < 8 ; i++ ) {
		IO = ( second >> i ) & 0x01 ;
		SCLK = 0 ; SCLK = 1 ; delay ( 1 ) ;
	}
	
	RST = 0 ;
}


unsigned char ReadSecond ( ) {
	unsigned char i , bit00 , ReadData = 0 ;
	RST = 1 ;
	
	//写指令
	for ( i = 0 ; i < 8 ; i++ ) {
		IO = ( 0x81 >> i ) & 0x01 ;
		SCLK = 0 ; SCLK = 1 ; delay ( 1 ) ;
	}
	
	delay ( 1 ) ;
	
	//读数据
	for ( i = 0 ; i < 8 ; i++ ) {
		//值得注意的是,写数据时单片机先写入,再让DS1302读取
		//读时相反,先让DS1302将数据写入IO口,再由单片机读取
		//下降沿DS1302写数据
		SCLK = 1 ; SCLK = 0 ; delay ( 1 ) ;
		//读数据
		bit00 = IO ; ReadData += ( bit00 << i ) ;
	}
	
	RST = 0 ;
	return ReadData ;
}


main () {
	unsigned char i ; 
	init () ;
	WriteSecond ( 0x31 ) ;
	i = ReadSecond () ;
}

另外还需注意,无论是单片机还是DS1302读写数据,都是从最低位开始。

另外提一点,本人也是嵌入式入门者,如有错误,欢迎指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值