时钟芯片DS1302和MCS51单片机的接口程序C51

发布者:EtherealBeauty最新更新时间:2018-01-22 来源: eefocus关键字:时钟芯片  DS1302  MCS51  单片机  接口程序 手机看文章 扫描二维码
随时随地手机看文章

#pragma small
#include
#include

/********************************************
* DS1302 PIN Configuration *
********************************************


sbit DS_CLK = P1^6
sbit DS_IO = P1^5;
sbit DS_RST = P1^4;


/********************************************
* Shift Data from Mcu in DS1302 *
********************************************/

void DS_Shift_In(unsigned char bIn)
{
unsigned char i;

for( i=0;i<8;i++ )
{
DS_CLK = 0; /* low logIC level */
if( bIn&0x01 ) DS_IO = 1; /* change data */
else DS_IO = 0; /* LSB first */
bIn = bIn>>1; /* next bit */
DS_CLK = 1; /* raising edge in */
_nop_(); /* delay */
_nop_();

}

/********************************************
* Shift Data from DS1302 to MCU *
********************************************/
unsigned char DS_Shift_Out(void)
{
unsigned char i, bData;

DS_IO=1; /* release DS_IO */ 
for( i=0;i<8;i++ )
{
DS_CLK = 1; /* high logic level */
_nop_(); /* delay */
_nop_();
DS_CLK = 0; /* failing edge data removed */
_nop_(); /* delay */
_nop_();
bData = bData>>1; /* store data */
if( DS_IO ) bData = bData|0x80 ;

return (bData);
}

/********************************************
* Read One Byte from DS1302 to MCU *
* Written in 25/10,2000. HIT *
* cr: Read Command * 
* 0x81-Read Second: CH XXX,XXXX(BCD) *
* 0X83-Read Minute: 0 XXX,XXXX(BCD) * 
* 0X85-Read Hour: 12/24 0 A/P x,xxxx * 
* 0X87-Read Date: 00 XX,XXXX(BCD) * 
* 0X89-Read Month: 000 X,XXXX(BCD) * 
* 0X8B-Read Week: 00000 XXX(BCD) * 
* 0X8D-Read Year: xxxx XXX(BCD) * 
********************************************/
unsigned char DS_Read( unsigned char cr )
{
unsigned char dd=0;

DS_RST = 0; /* initializing */
_nop_(); 
DS_CLK = 0; /* SCLK low logic level */
_nop_();
DS_RST = 1; /* EnabLED */

DS_Shift_In( cr ); /* Write Command Byte */
dd = DS_Shift_Out(); /* Read Data */

DS_RST=0; /* DISAbled */
DS_CLK=1; 
return ( dd );
}

/*********************************************
* Read One Byte from DS1302 to MCU *
* Written in 25/10,2000. HIT *
* ord: Write Command,dd-data for writting* 
* 0x80-Write Second: CH XXX,XXXX(BCD) *
* 0X82-Write Minute: 0 XXX,XXXX(BCD) * 
* 0X84-Write Hour: 12/24 0 A/P x,xxxx * 
* 0X85-Write Date: 00 XX,XXXX(BCD) * 
* 0X86-Write Month: 000 X,XXXX(BCD) * 
* 0X8a-Write Week: 00000 XXX(BCD) * 
* 0X8c-Write Year: xxxx XXX(BCD) * 
*********************************************/

void DS_Write(unsigned char ord,unsigned char dd)
{
DS_RST = 0;
_nop_();
DS_CLK = 0;
_nop_();
DS_RST = 1; /* Enable */
DS_Shift_In( ord ); /* Write Command */
DS_Shift_In( dd ); /* Write Data */
DS_RST = 0;
DS_CLK = 1;
}

/*********************************************
* Set DS1302 CLOCk Value *
* Written in 25/10,2000. HIT *
* dt[6]-dt[0]: Week,Year,Month,Date * 
* Hour,Minute,Second * 
*********************************************/

void DS_SetClock(unsigned char dt[7])
{
DS_Write(0x8E,0); /* Disabled Write Protect */
DS_Write(0x80,0x80); /* Disabled Clock */

DS_Write(0x8a,dt[6]); /* Week Day BCD */ 
DS_Write(0x8c,dt[5]); /* Year : BCD */ 
DS_Write(0x88,dt[4]); /* Month : BCD */ 
DS_Write(0x86,dt[3]); /* Date : BCD */ 
DS_Write(0x84,dt[2]); /* Hour(24) BCD */ 
DS_Write(0x82,dt[1]); /* Minute : BCD */ 
DS_Write(0x80,dt[0]&0x7F); /* Second : BCD */
/* MSB:0 Enabled Clock */ 
DS_Write(0x8E,0x80); /* Enabled Write Protect */
}

/*********************************************
* Read DS1302 Clock Value *
* Written in 25/10,2000. HIT *
* dt[6]-dt[0]: Week,Year,Month,Date * 
* Hour,Minute,Second * 
*********************************************/

void DS_ReadClock(unsigned char dt[7])
{
dt[6]=DS_Read(0x8b); /* Week */ 
dt[5]=DS_Read(0x8d); /* Year */ 
dt[4]=DS_Read(0x89); /* Month */ 
dt[3]=DS_Read(0x87); /* Date */ 
dt[2]=DS_Read(0x85)&0x3F; /* Hour */ 
dt[1]=DS_Read(0x83)&0x7F; /* Minute */ 
dt[0]=DS_Read(0x81)&0x7F; /* Second */
}


关键字:时钟芯片  DS1302  MCS51  单片机  接口程序 引用地址:时钟芯片DS1302和MCS51单片机的接口程序C51

上一篇:实用单片机电子钟的制作
下一篇:51读写串行EEPROM芯片at2402程序(C)

推荐阅读最新更新时间:2024-03-16 15:53

单片机程序的一些习惯
对于一些状态的集合,尽可能使用enum而不是#define 来定义。 如: enum {OFF = 0, ON = 1}; 远比 #define OFF 0 #define ON 1 好。 两种写法编译的效果是一样的,但是写程序及看程序的人员来说感觉就不一样了。用enum定义时,可以觉得OFF与ON是一个集合,有相关性(且可减少程序中#define的定义)。但用#define定义时,完全可认为OFF与ON不相干。特别是在程序中#define定义过多时,查找并理解它的意思都是一个痛苦。(如:uc/os,看见它的一大堆#define都头大,要完全明白那一堆定义都得花不少时间) 第二,程序中少用 #if #ifdef
[单片机]
恩智浦发布适用于AUTOSARTM和非AUTOSAR的汽车实时驱动程序(RTD)软件
恩智浦半导体(NXP Semiconductors N.V.,纳斯达克股票代码:NXPI)发布的实时驱动程序(RTD)软件,为带有Arm® Cortex®-M或Cortex-R52内核的所有S32汽车处理器提供支持,恩智浦履行承诺,解决了汽车软件开发的成本和复杂性问题。RTD是S32软件支持平台中的多个新产品之一,通过一系列旨在简化AUTOSAR和非AUTOSAR应用开发的生产级安全合规型软件驱动程序,为新推出的S32K3和现有S32K1/S32G系列提供支持。使用通用代码库和软件API有助于最大程度提高处理器平台之间的软件重复利用率,而在芯片价格中包含生产许可费能够扩大大众市场开发人员对AUTOSAR的访问。 随着现代汽车向
[汽车电子]
恩智浦发布适用于AUTOSARTM和非AUTOSAR的汽车实时驱动<font color='red'>程序</font>(RTD)软件
单片机系统等的硬件调试方法
1、首先是焊接的顺序问题。当初板子做好以后,我一口气就把所有的元件焊上去了,这样对于没有调试过的板子,就很难找到原因。所以焊接的顺序很重要,应该是应该按功能划分的器件进行焊接,顺序是功能部件的焊接--调试(OK)--另一功能部件的焊接,这样容易找到问题的所在。 2、如果在调试按功能划分的器件上出现问题,可以按以下步骤进行: 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确(注意,命令字的顺序很重要,前些日子调试INTEL e28F640这款
[单片机]
计算机近距离无线数据采集系统设计
  引言   针对某医疗装置中的人体生理信号采集和传输问题,本文设计了计算机近距离无线数据采集系统。采用 Nodic公司的nRF2401作为无线收发核心器件。系统由一台PC、无线数据接收模块和无线数据采集发射模块组成。无线数据发射模块以C8051F021单片机为处理核心,采用单片机内部的12位ADC对现场的模拟信号进行采集和发送;无线数据接收模块以C8051F021单片机作为处理核心,接收与发射模块由nRF2401无线收发芯片完成,采用MAX5591实现12位D/A转换,采用 RS-485总线与PC进行通信,它负责现场数据的接收和初步处理,并转发给PC以供显示和监控,同时将数字量转换为模拟量,供示波器显示;PC有良好的人机界面,利
[测试测量]
8051单片机抢答器C程序
#include REG51.h /****************************************************************** * 自定义Macro *******************************************************************/ //编码的均为反向编码 #define CLEAR 0x7f //定义清空的反码 #define LED_BEGIN 0x01 // 定义开始时数码管的显示 #define LED_FOUL 0x38 // 犯规后显示字母 F ,数码管编码 #define LED_
[单片机]
基于ATT7022A和AVR单片机的无功补偿控制器设计
以三相电能专用计量芯片ATT7022A和一种高性能低功耗的AVR单片机atmega128为核心,设计一种无功补偿控制器。该控制器能实时测量电网的电流电压值、有功功率、无功功率、功率因数等参数,根据实际情况,准确的控制电容器的投切,能有效的提高线路功率因数、较少损耗,改善电网质量。 在工业和生活用电负载中,阻感负载占有很大的比例。异步电动机、变压器、荧光灯等都是典型的阻感负载。异步电动机和变压器所消耗的无功功率在电力系统所提供的无功功率中占有很高的比例。电力系统中的电抗器和架空线等也消耗一些无功功率。阻感负载必须吸收无功功率才能正常工作,这是由其本身的工作性质决定的。最合理的方法就是在这些感性设备附近及线路适当位置并联电容器
[单片机]
基于ATT7022A和AVR<font color='red'>单片机</font>的无功补偿控制器设计
Spansion针对汽车推Traveo™ MCU 家族,紧扣最新行业标准
如今汽车电子的发展趋势是怎样的?就这个问题,Spansion公司微控制器与模拟业务部门市场部营销总监王钰介绍到,汽车的模型库的开发工具会越来越重视,从人机界面HMI来联想,对于图形控制的芯片的需求越来越多,从过去的2维的图形控制芯片,到现在三维图形控制芯片,以及越来越多的客户追求高清显示,所有的这些都需要图形控制芯片来完成;另外汽车对环境的保护要求越来越高,EV和HEV会是整个汽车行业发展趋势;所有的EVHEV其中最关键最核心的技术就是电源控制和电机系统,以及低功耗,这个是对所有的车载的芯片所要求的一个最基本的参数。另外,还有一个比较大的趋势就是多核系统管理会越来越普遍,特别是在目前的生产里面,双核系统会是将来的主流,特别是在
[单片机]
以80C51单片机为例讲述单片机如何运行
前言 要想理解单片机是如何运行程序的,首先需要了解单片机的组成。本文以80C51单片机为例,给大家讲一讲程序在单片机中是如何运行的。 单片机的组成 8051单片机的内部硬件结构包括: 中央处理器CPU:它是单片机内部的核心部件,决定了单片机的主要功能特性,由运算器和控制器两大部分组成。 存储器:8051单片机在系统结构上采用了哈佛型,将程序和数据分别存放在两个存储器内,一个称为程序存储器,另一个为数据存储器在物理结构上分程序存储器和数据存储器,有四个物理上相互独立的存储空间,即片内ROM和片外ROM,片内RAM和片外RAM。 定时器/计数器(T/C):8051单片机内有两个16位的定时器/计数器,每个T/C既可以设置成计数方式
[单片机]
以80C51<font color='red'>单片机</font>为例讲述<font color='red'>单片机</font>如何运行
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved