历史上的今天
返回首页

历史上的今天

今天是:2025年06月28日(星期六)

2020年06月28日 | 基于AVR单片机的DS1302子程序

2020-06-28 来源:eefocus

摘要: 目 的: 建立DS1302操作库 目标系统: 基于AVR单片机 应用软件: ICCAVR

/*********************************************************************         

目    的:   建立DS1302操作库

目标系统:   基于AVR单片机                                                 

应用软件:   ICCAVR                                                        

*********************************************************************/


/*01010101010101010101010101010101010101010101010101010101010101010101

----------------------------------------------------------------------

版本更新记录:


----------------------------------------------------------------------

入口参数说明:

#include "D:ICC51CmmICC.H"


#define OUT_SCK sbi(DDRD,0)

#define OUT_SIO sbi(DDRD,1)

#define OUT_RST sbi(DDRD,2)


#define IN_SIO cbi(DDRD,1)


#define SET_SCK sbi(PORTD,0)

#define SET_SIO sbi(PORTD,1)

#define SET_RST sbi(PORTD,2)


#define CLR_SCK cbi(PORTD,0)

#define CLR_SIO cbi(PORTD,1)

#define CLR_RST cbi(PORTD,2)


#define GET_SIO gbi(PIND,1)


----------------------------------------------------------------------

待定参数说明:

#define DELAY() {NOP();NOP();NOP();}


---------------------------------------------------------------------- 

对外变量说明:


----------------------------------------------------------------------

对外函数说明:


----------------------------------------------------------------------

10101010101010101010101010101010101010101010101010101010101010101010*/


#ifndef DS1302_H

#define DS1302_H


#include "D:ICC_HCmmICC.H"


#define DELAY() {NOP();NOP();NOP();NOP();NOP();NOP();}


//uint8 DS1302Second;

//uint8 DS1302Minute;

//uint8 DS1302Hour;


//uint8 DS1302Day;

//uint8 DS1302Month;

//uint8 DS1302Year;


//uint8 DS1302SecLow;

//uint8 DS1302MinLow;

//uint8 DS1302HourLow; 

//uint8 DS1302DayLow;

//uint8 DS1302MonLow;

//uint8 DS1302YearLow;

//uint8 DS1302SecHi;

//uint8 DS1302MinHi;

//uint8 DS1302HourHi;

//uint8 DS1302DayHi;

//uint8 DS1302MonHi;

//uint8 DS1302YearHi;


uint8 operData;

#define data0 (bool)operData&0x01

//#define data7 (bool)operData&0x80


/*--------------------------------------------------------------------

函数名称:DS1302写一个字节

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

void writeByte(void)

{

uint8 i;


OUT_SIO;

DELAY();

for(i=0;i<8;i++)

{

CLR_SCK;

if(data0)

SET_SIO;

else

CLR_SIO;

SET_SCK;

operData = operData>>1;

}

}

/*--------------------------------------------------------------------

函数名称:DS1302读一个字节

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

void readByte(void)

{

uint8 i;


IN_SIO;

SET_SCK;

for(i=0;i<8;i++)

{

operData = operData>>1;

CLR_SCK;

DELAY();

//delay50us(1);

if(GET_SIO)

operData |= 0x80;

SET_SCK;

}

}

/*--------------------------------------------------------------------

函数名称:DS1302充电参数

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

void setChargePrmt(void)

{

CLR_SCK;

SET_RST;

operData=0X90;

writeByte();

operData=0XA4;

writeByte();

/* the following sentence here is not indispensable,

but insert this sentence here can prevent ariseing error!

because when start operating,RST must keep low level! */

CLR_RST;

}

/*--------------------------------------------------------------------

函数名称:DS1302关写保护

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

void closeWP(void)

{

CLR_RST;

CLR_SCK;

SET_RST;

operData=0X8E;

writeByte();

operData=0X80;

CLR_SIO;

writeByte();

/* the following sentence here is not indispensable,

but insert this sentence here can prevent ariseing error!

because when start operating,RST must keep low level! */

CLR_RST; 

}

/*--------------------------------------------------------------------

函数名称:DS1302开写保护

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

void openWP(void)

{

CLR_RST;

CLR_SCK;

SET_RST;

operData=0X8E;

writeByte();

operData=0X00;

CLR_SIO;

writeByte();

/* the following sentence here is not indispensable,

but insert this sentence here can prevent ariseing error!

because when start operating,RST must keep low level! */

CLR_RST;

}

/*--------------------------------------------------------------------

函数名称:DS1302的一个完整写操作

函数功能:

注意事项:无

提示说明:无

输 入:

返 回:无

--------------------------------------------------------------------*/

void write(uint8 addr,uint8 dat)

{

CLR_RST; //before SCL change to low level, RST must keep low level

CLR_SCK;

SET_RST;


//CLR_SCK; //also ok!!!

//CLR_RST;

//SET_RST;


//CLR_RST; //error

//SET_RST;

//CLR_SCK;


operData=0X80|(addr<<1);

writeByte();

operData=dat;

writeByte();

/* the following sentence here is not indispensable,

but insert this sentence here can prevent ariseing error!

because when start operating,RST must keep low level! */

CLR_RST;

}

/*--------------------------------------------------------------------

函数名称:DS1302的一个完整读操作

函数功能:

注意事项:无

提示说明:无

输 入:

返 回:无

--------------------------------------------------------------------*/

uint8 read(uint8 cmd)

{

//CLR_RST;

CLR_SCK;

SET_RST;

operData=(cmd<<1)|0x81;

writeByte();

readByte();

/* the following sentence here is not indispensable,

but insert this sentence here can prevent ariseing error!

because when start operating,RST must keep low level! */

CLR_RST;

return(operData); 

}

/*--------------------------------------------------------------------

函数名称:DS1302读时间

函数功能:

注意事项:无

提示说明:无

输 入:

返 回:无

--------------------------------------------------------------------*/

void DS1302_getTime(uint8 *buf)

{

uint8 hourAdr=2,minuteAdr=1,secondAdr=0;


buf[0]=read(secondAdr);

buf[0]=changeHexToInt(buf[0]);


buf[1]=read(minuteAdr);

buf[1]=changeHexToInt(buf[1]);


buf[2]=read(hourAdr);

buf[2]=changeHexToInt(buf[2]);


//DS1302_speaTime();

}

/*--------------------------------------------------------------------

函数名称:DS1302读日期

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

//void DS1302_getDate(void)

//{

//

//}

/*--------------------------------------------------------------------

函数名称:DS1302拆时间

函数功能:

注意事项:无

提示说明:低层将时间拆好,方便上层调用

输 入:无

返 回:无

--------------------------------------------------------------------*/

//void DS1302_speaTime(void)

//{

// speaData(DS1302Second,2);

// DS1302SecHi=dataElem[1];

// DS1302SecLow=dataElem[0];

//

// speaData(DS1302Minute,2);

// DS1302MinHi=dataElem[1];

// DS1302MinLow=dataElem[0];

//

// speaData(DS1302Hour,2);

// DS1302HourHi=dataElem[1];

// DS1302HourLow=dataElem[0];

//}

/*--------------------------------------------------------------------

函数名称:DS1302拆日期

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

//void DS1302_speaDate(void)

//{

//

//}

/*--------------------------------------------------------------------

函数名称:DS1302设置时间

函数功能:

注意事项:无

提示说明:无

输 入:

返 回:无

--------------------------------------------------------------------*/

void DS1302_setTime(uint8 hour,uint8 minute,uint8 second)

{

uint8 hourAdr=2,minuteAdr=1,secondAdr=0;


hour=changeIntToHex(hour);

minute=changeIntToHex(minute);

second=changeIntToHex(second);


openWP();

write(hourAdr,hour);

write(minuteAdr,minute);

write(secondAdr,second);

closeWP();

}

/*--------------------------------------------------------------------

函数名称:DS1302设置日期

函数功能:

注意事项:无

提示说明:无

输 入:

返 回:无

--------------------------------------------------------------------*/

//void DS1302_setDate(uint8 year,uint8 month,uint8 day)

//{

//

//}

/*--------------------------------------------------------------------

函数名称:DS1302初始化

函数功能:

注意事项:无

提示说明:无

输 入:无

返 回:无

--------------------------------------------------------------------*/

void DS1302_init(void)

{

OUT_SCK;

OUT_SIO;

OUT_RST;

openWP();

setChargePrmt();

closeWP();

}


#endif


推荐阅读

史海拾趣

FOSLINK公司的发展小趣事

FOSLINK公司自成立以来,始终将技术创新视为企业发展的核心驱动力。在早期,公司专注于研发高性能的电子元器件,如混合积体电路(IC)和单石数位积体电路(ASIC)。通过不断的技术积累和优化,FOSLINK成功推出了多款具有行业领先地位的产品,不仅满足了市场对高质量电子元器件的需求,还引领了行业的技术进步。这一系列的创新成果,使FOSLINK在电子行业中逐渐崭露头角,赢得了众多客户的信赖和好评。

Crystal Clear Technology公司的发展小趣事

面对全球电子市场的竞争压力,Crystal Clear Technology决定加快国际化步伐。公司先后在多个国家设立研发中心和生产基地,利用当地的资源和优势,提升产品的竞争力和生产效率。同时,公司还积极参与国际展览和交流活动,与国际同行建立广泛的合作关系,为公司的发展注入了新的活力。

Amperite Co公司的发展小趣事

随着公司业务的不断发展,Crystal Clear Technology意识到单凭自身力量难以快速占领市场份额。因此,公司积极寻求与行业内外的合作伙伴建立战略合作关系。通过与知名电子设备制造商的合作,Crystal Clear Technology的显示屏产品得以广泛应用在各种电子设备上,进一步扩大了公司的业务范围和影响力。

Defense Supply Center Columbus公司的发展小趣事

在电子行业,供应链管理对于企业的运营效率至关重要。Defense Supply Center Columbus公司深知这一点,不断优化供应链管理流程。公司建立起一套高效的供应链管理系统,实现了从原材料采购、生产制造到产品销售的全程监控和管理。同时,公司还与供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量的可靠性。这些措施的实施,使得公司的运营效率得到了显著提升,降低了运营成本,提高了企业的竞争力。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

ABC Taiwan Electronics Corp成立于上世纪八十年代,起初只是一个小型电子零件加工厂。面对激烈的市场竞争和有限的资源,公司创始人凭借对电子技术的深刻理解和敏锐的市场洞察力,带领团队不断研发新产品,逐步赢得了客户的信任。通过不断积累经验和扩大规模,ABC逐渐在电子零件加工领域站稳了脚跟。

Alan Industries Inc公司的发展小趣事

随着产品技术的不断提升,Alan Industries Inc.开始积极拓展市场。公司制定了详细的市场营销策略,通过线上线下的多渠道推广,成功将产品打入国内外市场。同时,公司还注重品牌建设,通过优质的产品和服务赢得了消费者的信任和口碑。随着品牌知名度的提升,公司的市场份额不断扩大,成为电子行业中的佼佼者。

问答坊 | AI 解惑

改进电路设计规程提高可测试性

随着微型化程度不断提高,元件和布线技术也取得巨大发展,例如BGA外壳封装的高集成度的微型IC,以及导体之间的绝缘间距缩小到0.5mm,这些仅是其中的两个例子。电子元件的布线设计方式,对以后制作流程中的测试能否很好进行,影响越来越大。下面介绍 ...…

查看全部问答>

一路转多路4-20mA电流环变送器低成本应用方案

4-20mA一路转多路信号隔离放大低成本、小体积解决方案一路转多路4-20mA电流环变送器低成本应用方案  工业现场传感器输出的4-20mA信号,可以采用ISO系列隔离放大器来实现低成本、小体积信号一路转多路(一进二出、一进四出、一进八出等)的方案来实 ...…

查看全部问答>

三个裤衩了,散分

只有26分了,其他的都押宝了 呵呵…

查看全部问答>

无法生成nk.bin文件,

我按自己的要求定制的操作系统,BUILD之后不知道为什么不能够生成NK.BIN文件,有那个nk.exe文件,与生成NK.BIN文件相关的设置是什么?请各位指点一下,先谢谢各位了.(原来可以生成的,但我没有注意有哪些设置!)…

查看全部问答>

ebd9315下怎么使用CF卡?

ebd9315平台,使用wince,如何使用CF卡呢?有做过的请指教,谢谢…

查看全部问答>

vxworks6.8 QM57 EFI VGA

平台为X86,芯片组为QM57,操作系统为vxworks6.8 定制后的bsp包可以通过EFI进行bootrom的引导,之后系统启动成功。通过串口可以进行调试,但是无法通过VGA进行调试,并且VGA也无法进行输出。为何?…

查看全部问答>

版主这是什么问题25%的产品挂掉了

详情: 我的产品坏了100多个了(总共做了400个)。拿回来修,大多是单片机坏了。单片机发热。有时也能下载程序。就是不会正常工作/。用万用表量发显短路。不知道什么原因。 出厂都没问题。到客户那里运行一段时间就短路了。这是什么原因。工 ...…

查看全部问答>

一个不用IC的BUCK型开关电源

本帖最后由 dontium 于 2015-1-23 13:01 编辑 在别的网上看到的,有人现在还用着这个经典电路. 特分享给大家 …

查看全部问答>

ucos在stm32上移植碰到重复定义的错误

ucos移植问题(ucos2.86+stm32+lib3.5):提示main.o和os_core.o出现41个重复定义的错误,但是main函数里并没有定义那些东西呢?不知道为什么,请求解决,谢谢…

查看全部问答>

如何修复损坏后的文件系统?我有高招

        首先会让你输入root用户的密码。        1)出错的时候如果告诉你是哪一块硬盘的分区有问题,比如是/dev/hda3        接着用如下的命令去对付它呀:      &nb ...…

查看全部问答>