基于光伏发电的自动跟踪系统的设计方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于光伏发电的自动跟踪系统的设计方案
跟踪系统设计方案
2.1控制方法的确定
2.1.1该领域现有的控制方法
太阳电池方阵的发电量与入射角有关,光线与太阳电池方阵平面垂直时发电量最大,改变入射角,发电量明显下降。
基本原理与结构:由两台电动机和减速机分别构成方位角转动机构和高度角转动机构,光电传感器置放大,与太阳电池板方阵平面垂直安装。
随着光线方向的细微改变,传感器失衡,引起系统输出信号产生偏差,当这一输出信号达到一定幅度时,方向开关电路启动,执行机构开始进行纠正,使光电传感器重新达到平衡,即太阳能电池板方阵平面与光线成90度角而停止转动,完成一次调整周期。
如此不断调整,时刻沿着太阳的运行轨迹追随太阳,构成一个闭路负反馈系统,实现了跟踪。
该系统不需设定基准位置,跟踪器永不迷失方向。
系统设有防杂光干扰及夜间停止跟踪电路,并附有手动控制开关,以方便调试[4]。
系统结构如图2-1所示。
阴天或太阳被云层遮挡时,光线很弱,发电量极小,跟踪将无意义,系统会自动停止跟踪。
即使天边某处透出相对较亮的光线,跟踪器也不会被误导跟踪,实现了防杂光干扰。
云散日出时,自动跟踪器即时响应,找到太阳,跟踪到位。
傍晚光线消失,已不能发电,传感器会发出信号,夜间停止电路启动,并转回到,转动机构上下终点共设 4个限位开关,以防万一出轨。
图2-1 双轴光伏发电自动跟踪系统结构框图
跟踪器所用传感器有三种:方位和仰角太阳传感器,风力传感器,日光开关。
太阳传感器是把聚光电池阵列法线偏离太线的角度信号转变为电信号的装置,它是跟踪系统的重要部件,在很大程度上决定跟踪的精度。
太阳传感器测量太阳的方位,如有偏向,通过驱动电机的运转使电池阵列对准太阳。
风力传感器采用感应式器件,当风力达到一定强度(如
8级风)时,控制器控制仰角驱动电机转动,使阵列向水平方向运行,直到阵列受力最小为止。
在这种状况下,仰角驱动电机,不受方位太阳传感器控制[5]。
日光开关也是采用光敏器件,使白天太阳能电池阵列受方位太阳传感器控制而运转;夜间,阵列不受方位太阳传感器控制,而仅受日光开关控制向向运行,即阵列返回到早晨初始位置。
2.2本课题设计方法的提出
2.2.1单轴与双轴自动跟踪系统的比较
双轴自动跟踪系统是目前研究开发使用的系统,它的跟踪效果好,可提高发电量,是一种非常有前途的方法,但适用于较大型的太阳能发电系统中。
我国部分地区的无跟踪光伏系统,太阳能发电效率较低[6]。
针对这一实际情况需采用合理的方法进行改善,此方法必须满足低成本,高可靠性,高性价比。
单轴自动跟踪系统和固定式光伏发电系统相比跟踪效果好,结构简单且费用较低。
鉴于以上谈到的太阳能发电自动跟踪系统的原理与基本方法,对双轴自动跟踪系统进行了一定的改进,设计出具有很好性能价格比的单轴自动跟踪系统,同时也满足实际需要。
太阳能电池板与地面水平面南北方向成φ角,此高度角可手动进行调整。
东西方位角通过单片机控制系统进行自动跟踪,始终追随太阳的东西方位,使太阳能电池保持较大的发电功率[7]。
后面部分有详细的设计容,这里就不具体介绍了。
2.2.2设计目标和设计要求
课题设计目标:根据太阳辐射能的特点、光伏电池的特性以及地球与太阳的运动规律,实现对太阳能方位角的跟踪。
经查询相关资料知道地区地理位置,东经:118°33′,北纬:39°24′。
φ——当地的地理纬度
ω——当时的太阳时角,其计算公式为 ︒
⨯-=15)12(S T ω (2.2)
式中Ts (0-24h )为每日时间,时角上午为正,下午为负。
根据2.2式可得时间与时角的关系如表2-3
课题设计要求:所设计的单轴太阳自动跟踪系统的核心部分是单片机,需设计合理的程序近而对电机进行控制,适时改变电池板的角度。
表2-3 时间与时角关系
第3章自动跟踪的硬件系统设计
3.1硬件设计方案
国外目前已有了很多光伏电站。
太阳能发电在我国多采用传感器跟踪式的系统,发电成本还很高,不利于跟踪系统的推广与发展。
提高发电效率是降低成本的捷径,本文设计的太阳能电池自动跟踪系统,使太阳能电池板始终对着太阳,保持最大的发电效率,具有成本低等优点,有较好的推广应用价值[8]。
太阳能电池是依靠太辐射能而产生电能的器件,同样的一块太阳能电池板由于放置的角度不同,所接受的光辐射能就不同,产生的电能就不同。
因此为了提高太阳能电池电能的产量,可以让太阳能板自动的随着天空中太阳的方位角的变化而实现跟踪。
如下是单轴太阳方位角跟踪系统。
太阳自动跟踪系统主要分为机械部分和控制部分。
机械部分主要由电池板支架,底座和直流电机构成,控制部分驱动电机,可以使电池板在东西方向上的0~180度自由旋转。
控制部分主要由软件算法构成具有成本低,智能化程度高,扩展性强等优点。
高度角可以手动进行调整。
太阳跟踪系统的支撑结构常见的有框架式、轴架式和旋转台式三种。
前两种形式是将光伏阵列安装在可进行太阳时角跟踪的轴向移动固定框架或轴架上。
其特点是结构简单、价格便宜、安装方便。
适用于支撑单轴跟踪的小功率光伏阵列,可额外附带简单的季节性仰角调节功能。
旋转台式形式是一个较大的可进行时角跟踪的旋转台上安装可进行仰角跟踪的光伏阵列,它适用于支撑大功率的双轴跟踪光伏阵列,其缺点是结构复杂,造价较高。
本设计考虑到高性价比采用轴架式[9]。
本文设计的单轴自动跟踪电路主要包括单片机控制单元和电机驱动电路,如图3-1所示。
图3-1 自动跟踪控制电路结构框图
3.2硬件原理图及工作原理
系统的硬件原理图如图3-2所示。
工作原理:通过将实时时钟芯片的时间按顺序送入单片机并与设定值作比较后确定系统工作,即每天早上6点到晚上6点使跟踪系统工作。
单片机通过电机驱动电路控制电机转动。
当到了晚上6点后,自动跟踪系统停止工作,单片机控制电机转回初始位置,即使太阳能电池板到达初始位置。
单片机AT89S8252作为主控制芯片,主要起按设定时间自动给出控制信号以接通电机驱动电路而使电机按需要转动[13]。
在硬件连接上,分别以P0.0-P0.3口输出接电机驱动电路J4-J7,驱动电路的J0-J3分别接电机的A-D,每7.2分钟单片机P0口按设定程序控制电机顺时针转动1.8o,实现对太阳的跟踪。
图3-2 工作原理电路图
3.3实时时钟
本系统利用时钟芯片DS1302读取和写入实时数据,用与定时控制系统工作的启动。
DS1302是美国DALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信。
实时时钟/日历电路提供秒、分、时、日日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定,采用24 或12 小时格式。
DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线:(1)RES 复位,(2) I/O 数据线,(3) SCLK(串行时钟)时钟/RAM 的读/写数据以一个字
节或多达31 个字节的字符组方式通信。
RST 接在P1.0上,高电平时,选中该芯片,可对其进行操作。
串行数据线I/O 与串行时钟线SCLK 分别接在RXD 和0INT 上,所有单片机地址、命令及数据均通过这两条线传输[10]。
DS1302采用双电源系统供电,VCC1在双电源系统中提供主电源,在这种运用方式下VCC2连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。
DS1302由两者中的较大者供电。
当VCC1大于VCC2+0.2V 时,VCC1给DS1302供电。
当VCC1小于VCC2时,DS1302由VCC2供电。
下面将主要的性能指标作一综合:
● 实时时钟具有能计算2100 年之前的秒、分、时、日、日期、星期、月、年的能力还有闰年调整的能力
● 31 8 位暂存数据存储RAM
● 串行I/O 口方式使得管脚数量最少 ● 宽围工作电压2.0~ 5.5V
● 工作电流电压2.0V 时,小于300mA
● 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式 ● 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配 ● 简单3 线接口 ● 与TTL 兼容Vcc=5V
● 可选工业级温度围-40 +85 管脚配置如图3-2
图3-3 DS1302管脚配置
GND X2X1Vcc2
X1 X2 ——32.768KHz 晶振管脚
GND ——地
RST ——复位脚
I/O ——数据输入/输出引脚
SCLK ——串行时钟
Vcc1,Vcc2 ——电源供电管脚
3.4单片机控制单元
图3-4 AT89S8252管脚配置
本文的自动跟踪系统的设计采用AT89S8252,是基于以下原因:
部含有看门狗定时器(WDT),能满足无人值守条件下自恢复运行系统运行状态的要求
片带有8KB的FLASH程序存储器和2KB的E2PROM数据存储器,不需要进行存储器扩展,有利于提高系统的稳定性
性价比高,资源充足
工作电压围宽:4.0~6.0V的工作电压,便于交直流供电,能在一定程度上抵御电源的波动干扰,降低对电源的要求。
关于AT89S8252的管脚介绍:
1.89S8252 有 4个8位并行输入输出I/O接口:P0口、P1口、P2口、P3口(共32线),用于并行输入或输出数据。
①.P0口:P0.0-P0.7统称为P0口,当不接外部存储器与不扩展I/O接口时,P0口为地址数据分时复用口,它分时提供8位地址总线和8位双向数据总线。
②.P1口:P1.0-P1.7统称为P1口,可作为准双向I/O接口使用。
对EPROM编程和进行程序验证时,P1口接收输入的低8位地址。
③.P2口:P2.0-P2.7统称为P2口,一般作为准双向I/O接口。
当接有外部存储器或扩展I/O接口且寻址围超过256个字节时,P2口用于高8位地址总线送出高8位地址,对EPROM编程和进行程序验证时,P2口接收输入的高8位地址。
④.P3口:P3.0-P3.7统称为P3口,它为双功能口,可以作为一般的准双向I/O接口,也可以将每1位用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能[11]。
P3口的第2功能见下表3-5。
表3-5 P3口的第2功能表
所以单片机89S52的P0口作为与电机驱动电路的接口用。
2.控制信号或与其它电源复用引脚RST/VPD,ALE/PROG,PSEN和EA/VPP等4种形式。
①. RST/VPD(9脚):RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。
当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机回复到初始状态。
②. ALE/PROG(30脚):当访问外部存储器时,ALE (允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P0口的低8位地址,以便空出P0.0–P0.7引脚线去传送随后而来的片外存储器读写数据。
在不访问外部存储器时,ALE端仍以上述不变的频率,周期性地出现正脉冲信号,可作为对外输出的时钟脉冲或用于定时目的。
③. PSEN(29脚):片外程序存储器读选通信号输出端,低电平有效。
当从外部程序存储器读取指令或常数期间,每个机器周期PSEN两次有效,以通过数据总线口读回指令或常数。
当访问外部数据存储器期间,PSEN信号将不出现。
④. EA/VPP( 31脚):EA为访问外部程序存储器控制信号,低电平有效。
当该端保持高电平时,单片机访问片程序存储器。
若超出该围时,自动转去执行外部程序存储器的程序。
当EA端保持低电平时,无论片有无程序存储器,均只访问外部程序存储器。
⑤.电源引脚Vcc和Vss
Vcc (40脚 ):电源端为+5V
Vss(20脚):接地端
⑥.时钟电路引脚XTAL1和XTAL2
XTAL2(18脚):接外部晶体和微调电容的一端;在89S52片它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体的固有频率。
若采用外部时钟电路时,该引脚输入外部时钟脉冲。
要检查片振荡电路是否正常工作时,可用示波器查看XTAL2端是否有脉冲信号输出。
XTAL1(19脚):接外部晶体和微调电容的另一端;在片它是振荡电路反相放大器的输入端。
在采用外部时钟时,该引脚必须接地。
3.5电机驱动电路
利用AT89S8252的P0.0-P0.3端口,编制程序输出脉冲信号 ,改变输出脉冲的电平,达到使电动机正转、反转和停转之目的[12]。
其驱动电路如图3-6,J0-J3与步进电机顺序连,既J0连到A点,J1连到C点,J2连到B点,J3连到D点(参阅图3-7所示混合式步进电机绕组示意图)。
J4-J7与P0口P0.0-P0.3顺序连接。
J8接电源正极,J9接电源负极。
混合式步进电机功率较大,而单片机各引脚的驱动能力不够,所以要借助三极管来做驱动。
图3-6 混合式步进电机绕组
图3-7 混合式步进电机驱动电路
3.6步进电机
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在国民经济各个领域都有应用。
本设计采用42BYGH1.8o两相步进电机,其技术参数和技术规格见表3-8。
表3-8 电机技术参数和技术规格
步进电机是一种将电脉冲转化为角位移的执行机构。
当步进驱动器接受到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。
现在比较常用的步进电机有反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。
本设计采用混合式步进电机,它集合了永磁式和反应式的特点。
它又分为两相和五相:两相步进角一般为1.8o,而五相步进角一般为0.72o。
本设计采用两相步进脚。
步进电动机转动原理是:转动方向是通过通电的顺序来控制的,以四相单四拍为例:按A→B→C→D →A次序通电时,为正转;按A→D→C→B→A次序通电时,为反转。
四相步进电机的脉冲分配表如表3-9
表3-9 四相单四拍脉冲分配表(共阳)
第4章自动跟踪的软件件系统设计
4.1软件设计方案
根据本课题的设计任务及系统的硬件结构,系统的软件设计方案如下:
单片机软件设计包括:跟踪系统主程序设计;中断服务程序设计;电机驱动程序设计。
其软件程序见附录。
单片机主程序主要完成系统初始化,主程序流程如图4-1所示。
图4-1 主程序流程图
4.3中断服务程序设计
实时时钟每天早上8点,下午6点各报警一次,使单片机中断打开。
单片机通过引脚P0.0-P0.3电平的变化,驱动电动机转动。
单片机控制每7.2分钟引起,进入电机驱动转动程序。
流程图如图4-2所示。
图4-2 中断服务程序流程图
4.4电机驱动程序设计
电机驱动程序流程图如图4-3。
图4-3 电机驱动程序流程图
第五章结论与建议
本课题是针对我国部分地区的无跟踪光伏系统,太阳能发电效率低的实际问题,以解决发电效率低为目标,将单轴光伏发电自动跟踪系统应用到无跟踪系统的替代系统中。
在充分考虑单轴自动跟踪系统的特点这一基础上,设计了系统的硬件和软件。
该系统成本低,可靠性高,性价比高,单轴光伏发电自动跟踪系统和固定式光伏发电自动跟踪系统相比较,单轴自动跟踪系统跟踪效果好,结构简单且费用较低。
本课题的主要研究工作与结论:
(1)采用单轴光伏发电自动跟踪系统作为无跟踪系统的替代系统,既解决了发电效率低的问题,又解决了原来的双轴自动跟踪系统造价高,结构复杂,维护困难等问题。
;
(2)通过对单轴光伏发电自动跟踪系的研究,针对无跟踪光伏系统在应用中存在的问题,设计了系统的总体构成和硬件的解决方案。
系统使用了实时时钟芯片DS1302采用串行通讯方式,只需二条线即可与单片机通讯,同时体积仅仅是其它同种时钟芯片的1/4,且片均含RAM,可增加系统的RAM,它的时钟校准也较为容易,采用专用晶振器,无需调整即可达到国家要求的时钟误差标准。
本文的自动跟踪系统的设计采用AT89S8252,是基于以下原因:部含有看门狗定时器(WDT),能满足无人值守条件下自恢复运行系统运行状态的要求,片带有8KB的FLASH程序存储器和2KB的E2PROM数据存储器,不需要进行存储器扩展,有利于提高系统的稳定性性价比高,资源充足工作电压围宽:4.0~6.0V的工作电压,便于交直流供电,能在一定程度上抵御电源的波动干扰,降低对电源的要求。
(3)本自动跟踪系统体积小、功耗低、成本低、抗干扰能力强,便于推广应用,研究开发具有可扩展性,为进一步开发其它光伏式自动跟踪系统,创造了良好的开端。
本文以单片机作为主要控制芯片,根据预设的程序,通过I/O口与驱动电路共同控制步进电机的转动,从而使电机带动太阳能电池板转动,使之与太线垂直,进而提高太阳能电池发电效率。
由于时间、知识等的原因,只对单轴太阳能自动跟踪系统的基本功能进行了研究,我国目前的无跟踪光伏系统,太阳能发电效率较低。
针对这一情况,对双轴太阳能自动跟踪系统进行了一定的改进,设计出单轴自动跟踪系统,这种方法与双轴太阳能自动跟踪系统相比,系统结构和控制原理更加简单,成本大大降低,满足课题的要求。
希望以此作为以后研发的台阶,在研究上能更进一步。
本课题在某些方面未能开展更深入的研究。
为了进一步提高系统的性能,扩大其适用围,提出以下改进意见:
(1) 仅仅满足我国部分地区的太阳能发电效率低的需不够的,在实际的应用中,还希望能够融合其它的信息,将单轴光伏发电的自动跟踪系统和其它信息一起采集、处理,在今后的研究工作中,加强与之关联的技术的研究也是非常必要的,给应用带来极大的方便,满足我国大部分地区太阳能发电的各种要求;
(2)进一步完善与各种传感器的接口电路,以适应不同的检测环境的监测;
(3)软件程序有待于进一步改善,使用执行时间更短的一些算法,从而可以增加电路的采样数,使得最后的测试结果更加接近于真值;
(4)后期数据处理规化问题,需在软件上加以考虑,以适应不同用户、不同行业的需求。
参考文献
[1] ABDALLAH S. Two axes sun-tracking system with PLC control[J]. Energy Conversion and Management, 2004,45: 1931-1939.
[2] 薛建国. 基于HYM8563和单片机的低功耗太阳电池自动跟踪系统设计[J]. 工程学院学报(自然科学版), 2005(2):113-116.
[3]金焕,中华,汪征宏.光伏方阵最佳倾角的计算[J].新能源,2000年2期
[4]仁贤.光伏系统的可靠性分析[J].太阳能.2001年1期
[5]王雪文,王洋等.太阳能电池板自动跟踪系统的设计[J].西北大学学报,第34卷第2期
[6]庭金,余洁磊.地面用光伏电源系统设计[J].太阳能,2000年1期
[7]郭忠文.光伏发电自动跟踪系统[D].太阳能,2004年 1期工业大学硕士学位论文
[8]许洪华,边莉等.小型独立光伏实时数据采集检测系统[J].可再生能源,2003年6期
[9]玉文.21世纪我国太阳能利用发展趋势[J].中国电力,第33卷第9期
[10]金焕,亮,焕等.太阳能发电系统的最佳化设计[J].能源工程,2003年5期
[11]兴峰,志封等.光伏发电的最大功率跟踪算法研究[J].可再生能源,2005年1期
[12]广弟,朱月秀,王秀山等.单片机基础[M].:航空航天大学,2005
[13]育才等. ATMEL新型AT89S52系列单片机及其应用[M].:清华大学,2005
致
经过几个月的忙碌和工作,本次毕业论文设计已经接近尾声,作为一个本科生的毕业
论文,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及周围同学们的支持,想要完成这个设计是难以想象的。
在论文写作过程中,得到了秀宏老师的亲切关怀和耐心的指导。
她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我,让我受益匪浅。
从课题的选择到设计的最终完成,老师都始终给予我细心的指导和不懈的支持。
在设计其间,老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,除了敬佩秀宏老师的专业水平外,她的治学严谨和科学研究的精神也是我永远学习的榜样,并将对我今后的学习和工作产生积极的影响。
在此谨向老师致以诚挚的意和崇高的敬意。
在论文即将完成之际,我很激动,从开始进入课题到论文的顺利完成,得到了程辉老师的热心帮助,实训基地孟师傅对我的鼓励,同时还有许多可敬的师长、同学、朋友给了我无言的支持,在这里请接受我诚挚的意!最后我还要感培养我长大含辛茹苦的父母,你们!
最后我要感机电科学与工程系的各位老师对我四年来的培养,以及我的母校——科技师学院四年来对我的栽培。
附录:
附录一:单片机控制电机程序
ORG 0003H
AJMP MAIN
ORG 000BH; T0中断矢量
AJMP SERVE
ORG 0100H
MAIN: MOV SP,#60H;设置堆栈指针
MOV TMOD,# 01H; T0设为模式1
MOV TH0,#03CH; T1计时初值(定时约100ms) MOV TL0, #0B0H
MOV R0,#03CH;循环次数(60)
MOV R1,#048H;循环次数(72)
MOV R2,#064H;循环次数(100)电机转动步数
MOV P0, #11110111B
MOV R3, #11111110B
MOV R4, #11111101B
MOV R5, #11111011B
MOV R6, #11110111B
MOV 30H,#064H
SETB EA;开中断
SETB ET0; T0中断允许
SETB TR0;启动T1
HERE: SJMP $
SERVE:
MOV TH0,#03CH; T1重装初值(定时约100ms)
MOV TL0,#0B0H
DJNZ R0, LOOP1
MOV R0,# 03CH;重置循环次数(60)
DJNZ R1, LOOP1
MOV R1,# 048H;重置循环次数(72)
MOV R7, R3
MOV P0, R3
MOV R3, R4
MOV R4, R5
MOV R5, R6
MOV R6, R7
MOV R0,# 048H;重置循环次数(72)
DJNZ R2,LOOP1
LOOP5:
MOV R7,R6
MOV P0,R6
MOV R6,R5
MOV R5,R4
MOV R4,R3
MOV R3,R7
ACALL YANSHI
DJNZ 30H,LOOP5
MOV 30H,#0064H
MOV R2,# 064H;重置循环次数(100)RETI
LOOP1:
RETI
YANSHI: MOV 31H,#00AH
LOOPOF: MOV 32H, 0AFH
LOOPOF1: MOV 33H,05H
XHDOF: DJNZ 33H, XHDOF
DJNZ 32H,LOOPOF1
DJNZ 31H, LOOPF
RET
END
附录二:时钟初始化程序
#include <reg51.h>
#include <intrins.h>
sbit SCL2=P1^0;//SCL2定义为P1口的第0位脚
sbit SDA2=P1^1;//SDA2定义为P1口的第1位脚
sbit RST = P1^2; // DS1302片选脚
unsigned char l_tmpdate[8]={0x00,0x06,0x03,0x18,0x0c,0x07,0x06,0};code unsigned char
write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
code unsigned char
read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
void delay();//延时子函数,5个空指令
void Write_Ds1302_byte(unsigned char temp);
void Write_Ds1302( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302 ( unsigned char address );
void Read_RTC(void);//read RTC
void Set_RTC(void);//set RTC
void main(void) //入口函数
{
Set_RTC(); //芯片初始化
while (1) {
Read_RTC();
l_tmpdate[2]= //这个就是要的小时数据
}
}
void delay(void) //空5个指令
{
unsigned char i=10;
while (i)
i--;
}
void Write_Ds1302_Byte (unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++) //循环8次写入数据
{
SCL2=0;
SDA2=temp&0x01;//每次传输低字节
temp>>=1;//右移一位
SCL2=1;
}
}
/********************************************************/
void Write_Ds1302( unsigned char address,unsigned char dat ) {
RST=0;
_nop_();
SCL2=0;
_nop_();
RST=1;
_nop_(); //启动
Write_Ds1302_Byte(address);//发送地址
Write_Ds1302_Byte(dat);//发送数据
RST=0;//恢复
}
/********************************************************/ unsigned char Read_Ds1302 (unsigned char address)
{
unsigned char i,temp=0x00;
RST=0;
_nop_();
SCL2=0;
_nop_();
RST=1;
_nop_();
Write_Ds1302_Byte(address);
for (i=0;i<8;i++) //循环8次读取数据
{
if (SDA2)
temp|=0x80;//每次传输低字节
SCL2=0;
temp>>=1;//右移一位
SCL2=1;
}
RST=0;
_nop_();//以下为DS1302复位的稳定时间
RST=0;
SCL2=0;
_nop_();
SCL2=1;
_nop_();
SDA2=0;
_nop_();
SDA2=1;
_nop_();
return (temp);//返回
}
/********************************************************/
void Read_RTC(void) //读取日历
{
unsigned char i,*p;
p=read_rtc_address;//地址传递
for(i=0;i<7;i++) //分7次读取年月日时分秒星期
{
l_tmpdate[i]=Read_Ds1302(*p);
p++;
}
}
/********************************************************/ void Set_RTC(void) //设定日历
{
unsigned char i,*p,tmp;
for(i=0;i<7;i++){
tmp=l_tmpdate[i]/10;
l_tmpdate[i]=l_tmpdate[i]%10;
l_tmpdate[i]=l_tmpdate[i]+tmp*16;
}
Write_Ds1302(0x8E,0X00);
p=write_rtc_address;//传地址
for(i=0;i<7;i++) //7次写入年月日时分秒星期
{
Write_Ds1302(*p,l_tmpdate[i]);
p++;
}
Write_Ds1302(0x8E,0x80);
}。