ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:391.06KB ,
资源ID:8870859      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8870859.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ds1302详细设计方案.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ds1302详细设计方案.docx

1、ds1302详细设计方案DS1302设计方案1.DS1302简介:DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。各引脚的功能:Vcc1:主电源;Vcc2:备份电源。当Vcc2V

2、cc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟,输入,控制数据的输入与输出; I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。2.硬件设计3.基本原理 DS1302是一款实时时钟芯片,就是一种控制时钟的芯片。一旦初始化后,它就会像我们常用的手表一样计数时间。DS1302内部有多个寄存器,存放在这些我们需要获取的时间数据。所以对要1302的操作,最终就是如何访问DS1302的寄存器,

3、如何向DS1302写入数据和读出数据。如图 是DS1302单字节写操作的时序图,第一个字节是“访问寄存器的地址” ,第二字节是“要写入的数据”。 在写操作的时候,都是“上升沿有效”,即不管是“地址字节”还是“数据字节”,都是在SCLK的上升沿被采集的。(数据都是从最低位开始发送至最高位结束)如图是 DS1302 芯片读操作的时序图。 大家可能发现,读操作基本上和写操作的时序图差不多, 区别的地方就是在第二个字节时 “读的数据” 的动作。 第二字节读数据开始时, SCLK 信号都是 “下降沿有效” 。(第一节数据是从 LSB 开始输出,第二节数据是从 LSB 开始读入)细心的朋友可能发现,不管是

4、读操作还是写操作,CE信号都是处于高电平状态的,所以在对DS1302进行读写操作前都要拉高CE信号开始,操作结束后拉低CE信号结束。 读和写操作,都是先发送一个字节的“访问寄存器的地址”。这些寄存器地址格式如上图所示:Bit 7 固定。注:为“1”Bit 6 表示是访问寄存器本身,还是访问 RAM 空间。注:为“1”表示访问RAM,为“0”表示访问寄存器本身Bit 5-1 表示是寄存器或者RAM 空间的地址。注:表示具体的寄存器或者RAM地址;跟bit6相关Bit 0 表示是访问寄存器本身是写操作,还是读操作。注:为“1”表示读操作;为“0”表示写操作上图为DS1302各个寄存器的地址组成,比

5、如,秒寄存器:高四位(bit7 除外) ,表示“秒的十位” ;低四位表示“秒的个位” 。其他的寄存器的地址组成也是如此。但是,“秒寄存器” “时寄存器” “控制寄存器” (最后两行)比较特别 。秒寄存器的最高位(BIT7) , 如果写入 “逻辑 0” DS1302 芯片就开始启动, 反之就关闭; 时寄存器的最高位 (BIT7 ,表示了“逻辑1是12小时进制”“逻辑 0是 24 小时进制”,推荐24小时进制的表示方式; 控制寄存器的最高位(BIT7) ,如果写入“逻辑 0”表示关闭写保护;写入“逻辑 1” 表示打开写保护。所以,每当要变更寄存器的内容之前,就要关闭写保护。因为秒寄存器的最高位控制

6、着DS1302芯片是否工作,所以配置寄存器时秒寄存器的配置都是留在最后才配置的。4.实验任务和现象任务:运用DS1302实现对时间的计时,用数码管显示分、秒。现象:数码管左边两位显示从DS1302中读出的分钟数据,右边两位显示读出的秒数据。注:因为数码管模块我们直接copy了动态数码管显示的程序,所以数码管的小数点一直处于常亮状态。5.设计思路本次的实验,我们采用建立多个module,最后在顶层文件调用实现任务要求。首先先介绍一下工程的层次组成 在 ds1302_module.v。此模块包含两个基本模块,cmd_control_module.v和function_module.v。 funct

7、ion_module:此模块中包含两个基本函数,即“写字节函数”和“读字节函数”。下图为该模块的元件模型:Start_Sig1:0是该模块的起始信号。Words_Addr 和 Write_Data ,即“写字节操作”中的“第一字节”和“第二字节”数据。Read_Data 和 Access_Done_Sig 分别是返回的“读出数据”和“完成信号” 。DS1302_CE、DS1302_CLK,DS1302_IO:分别连接到DS1302的对应管脚。这里重点强调一下DS1302_IO:输入输出口,但是同一时刻只能是输出或者输入。如图是IO口的硬件设计:要使 IO 输出,必须拉高isOut,Data_O

8、ut 的数据就会输出。要使 IO 为输入,需要拉低isOut,三态门会输出高阻态将“输出”截止 ,从IO口输入的数据就会Data_In输入。DS1302_CLK:参考数据手册,我们选取频率为500KHz的时钟。在function_module中其他的变量:i :指示着执行步骤; rData 用来暂存数据; rSCLK 用来驱动 DS1302_CLK;rRST 用来驱动 DS1302_CE ; rSIO 用来驱动 DS1302_IO 的输出,isOut 用来控制 IO口的方向;isDone 是完成标志,同时用来反馈完成信息。在这个模块中完成了DS1302_CLK的配置、写操作和读操作。写操作:步

9、骤 0 的时候,对 rData,rSCLK,rRST,isOut等寄存器进行初始化,这一步一定要做。步骤1-16之中,将“第一个字节数据”,即“访问寄存器地址字节” 发送出去。在时钟下降沿设置数据,时间上升沿锁存数据。步骤17 将rData 设置为“第二个字节数据”,即“写入的数据”。发送数据和发送地址的时序一样。不再重复。步骤 34,对rRST拉低,以示“写字节操作”已经结束。步骤 35-36 反馈完成信号。读操作:步骤 0 :对 rData,rSCLK,rRST ,isOut 等寄存器进行初始化。步骤 1-16 之中, 将“第一个字节数据”,即“访问寄存器地址字节”发送出去。这时的数据锁存

10、发生在时间的上升沿。步骤 17 设置IO为输入,即将isOut设置为 “0”。 步骤 18-33 之间是“读取一个字节数据”,该动作时时间的下降沿,对 SIO 信后读取数据。注:DS1302 芯片,数据的传输都是从LSB 开始到 MSB 结束。步骤 35 :rRST 的拉低,以示“读字节数据”操作已经结束。然后恢复 IO 口为输出,即拉高 isOut 寄存器,然后产生一个完成信号。从 DS1302 芯片读取的数据会暂存在 rData 这个寄存器,然后该寄存器会驱动 Read_Data 信号线。cmd_control_module:此模块中包含两个基本函数,即“写字节函数”和“读字节函数”。下图

11、为该模块的元件模型:Words_Addr 和Write_Data 的( rAddr 和 rData )暂存寄存器。换句话说,rAddr 寄存器是用来驱动Words_Addr 信号,rData 寄存器是用来驱动 Write_Data 信号。在8位Start_Sig的位宽之中,Start_Sig7.3是写操作,反之Start_Sig2.0是读操作。在 DS1302 芯片的时序中“写操作”的第一个字节需要“访问寄存器的地址”,第二个字节是“写数据”。在执行 rAddr 和 rData 寄存器值的赋值。如在 8b1000_0000的时候,是“关闭写保护”的操作,就是要往“控制寄存器” 写入“数据 8h

12、00”。即对rAddr和rData赋值2b10, 5d7, 1b0和8h00。再举一个例子,当 Start_Sig 等价于 8b0100_0000 的时候,即表示对“时寄存器”,“写入数据” 。这时候对 rAddr 赋予早已经预定好的值,即 2b10,5d2,1b0 。至于rData 被赋予的值,是从上层发来的 Time_Write_Data。当Start_Sig2.0 是表示 “读操作”,在DS1302芯片的时序中, 读操作只需要写入“第一字节数据”,第二字节数据是从 DS1302 读来的。 举例: 如当 Start_Sig 等价于 8 b0000_0001 是表示从“秒寄存器读出数据”,所

13、以关于这个操作 rAddr 被赋予 2b10, 5d0,1b1 。该模块的具体操作中:i 寄存器表示执行步骤,rRead 寄存器是读出数据的暂存寄存器, isStart 寄存器是用于驱动 Access_Start_Sig,即是对 function_module控制的寄存器。假设一个情况,当 Start_Sig 等价于 8b0000_0001 的时候,这表示“从秒寄存器读取数据” 。 在同一个瞬间 rAddr 会被赋予相关的值, 然后读操作条件就会成立,就会完成一次的“读字节数据”的操作。当完成一次性的“读字节数据” ,读取到的数据就会被暂存在 rRead 寄存器,最后反馈一个完成信号。以示上一

14、层模块“一次性的读数据操作”已经完成。Start_Sig7:0:状态表ds1302_module:只是对以上两个模块的例化,不多做解释。seg_module: 该模块我们是直接copy以前的seg程序,只是做了简单修改,请参考以前的程序和方案。最后看看,顶层模块DS1302.v:该模块例化了ds1302_module.v 和seg_module.v。根据执行步骤i的值有:0:关闭写保护,亦即发送命令 8b1000_0000;1:变更时寄存器,亦即发送命令 8b0100_0000;2:变更分寄存器,亦即发送命令 8b0010_0000;3:变更秒寄存器,亦即发送命令 8b0001_0000;4:读取秒寄存器的值,即发送命令8b0000_0001。将读取的数据高四位和低四位分别送给右边两个数码管的驱动信号线。5:读取分寄存器的值,即发送命令8b0000_0010。将读取的数据高四位和低四位分别送给左边两个数码管的驱动信号线。然后跳回步骤4,最后程序一直在步骤4和5之间循环,不停的读取秒和分。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1