搜索
bottom↓
回复: 22

SPI范例 简单访问DS1302实时时钟(RTC)的程序 公测

[复制链接]

出0入0汤圆

发表于 2005-10-24 14:54:30 | 显示全部楼层 |阅读模式
点击此处下载armok0181048.rar



只是简单的读写,用于SPI接口的学习,没有DS1302的时钟调整程序。 顶部显示的bootloader是另一个范例,不在附件中。



//M16管脚定义

#define DS1302_CE                        4        //PB4 SS 必须设为输出 ----DS1302 pin5

#define DS1302_MOSI                        5        //PB5 MOSI要串10K电阻到MISO,然后把MISO跟DS1302_IO脚短接在一起的

#define DS1302_MISO                        6        //PB6 MISO跟DS1302_IO脚短接在一起的---DS1302 pin6

#define DS1302_SCK                        7        //PB7 SCK----DS1302 pin7

#define PIN_RXD                        0        //PD0 RXD

#define PIN_TXD                        1        //PD1 TXD





写入数据前需要先去掉写保护

0x80地址的秒寄存器的第7位(CH)需要置0,震荡器才能起振



CLOCK HALT FLAG

Bit 7 of the seconds register is defined as the clock halt (CH) flag.  

When this bit is set to logic 1, the clock oscillator is stopped and the DS1302 is placed into a low-power standby mode with a current drain of less than 100nA.

When this bit is written to logic 0, the clock will start. The initial power-on state is not defined.

出0入0汤圆

发表于 2005-10-24 17:05:48 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2005-10-24 17:11:03 | 显示全部楼层
谢谢斑竹

谢谢斑竹的辛苦劳作!!!!!!!!!!!

出0入0汤圆

 楼主| 发表于 2005-10-24 17:17:11 | 显示全部楼层
补充说明

串口部分的波特率由 USART.C里面的 BAUDRATE常量 所定义,当采用7.3728MHz晶体时钟时,可以生成1200bps~115200bps之间的标准波特率

//常量定义

#define BAUDRATE                9600        //波特率



附件里面为常用的低速9600bps。

顶楼图片的高速115200bps是为了配合115200bps的Bootloader而改的。

出0入0汤圆

发表于 2005-11-7 21:14:07 | 显示全部楼层
楼主,你好。

我按照你的思路编了程序。

现在遇到问题是晶振不起震,换了很多晶振了,都不起震,开始怀疑晶振问题,可那么多都坏,不可能。

我一开始外接了电容,后来看资料不用接的,但还是不行。

我想电路应该没问题的吧。就那么几条线,1脚VCC,2、3接32.768KHZ,4脚GND,5、6、7接单片机I/O,8脚暂时没接。

今天从同学那拿了块板子,从它板子上把32.768引出来,因为线长不稳定,但时间可以跑起来,不连贯而已。所以程序应该也没问题。真不知道哪里有问题,请楼主指点一下,谢谢!

出0入0汤圆

发表于 2005-11-8 09:04:06 | 显示全部楼层
"换了很多晶振了".我也是。都是一批买的。后来换了另一家买的就对了。

出0入0汤圆

发表于 2005-11-8 12:34:35 | 显示全部楼层
请问 xiaoke 你的晶振是什么型号的?

就管子上标32768的吗?

我是杭州的,在利尔达买的,他们是做什么表的,晶振应该没问题啊。

真的搞不懂啊。郁闷!

出0入0汤圆

发表于 2005-11-14 10:09:26 | 显示全部楼层
我的也不行啊,换了两个,但都没得反映!像完全没那回事一样,像似"走不走时是我的事,不是它RTC的事"一样!

无语了

出0入0汤圆

 楼主| 发表于 2005-11-14 11:00:49 | 显示全部楼层
补充:



0x80地址的秒寄存器的第7位(CH)需要置0,震荡器才能起振

程序中没有明确说明,其实在初始化时间的时候已经做了这个动作

unsigned char INITDATE[8]={0x50,        //59秒------这里把CH置0了

                        0x59,        //59分

                        0x23,        //23时  24小时制

                        0x06,        //06日

                        0x10,        //10月

                        0x04,        //星期四

                        0x05,        //2005年

                        0x80        //写保护

                };

出0入0汤圆

发表于 2006-8-21 15:13:13 | 显示全部楼层
请问楼主:

    在DS1302.C中,

//BCD码0~7转换成汉字'一'~'日'

void decodeWEEK(unsigned char WEEK,unsigned char *pstr)

{

        unsigned char i;

        i=WEEK;

        i&=0x07;

        i=i<<1;                     

        *pstr++=sWEEK[i++];

        *pstr=sWEEK;

}

这里,为什么要左移i一位呢,我看不出来。请楼主不吝赐教!

出0入0汤圆

发表于 2006-8-21 19:54:49 | 显示全部楼层
楼主他忙别的去了.我来回答一下吧.

我是菜鸟,如果错了,高手再来给纠正哈.



我好像是看懂了,因为程序原来注释很详细的.

以下是程序原文

unsigned char sWEEK[]="错一二三四五六日";

//注意 汉字要占用2个字节的空间



左移一位就是乘2了,因为汉字是占两个字节.所以需要乘2.

亦即:

sWEEK[0],sWEEK[1]是"错"

sWEEK[2],sWEEK[3]是"一"

sWEEK[4],sWEEK[5]是"二"

以下以此类推.

参数WEEK,进到函数里面来的时候是0~7,(如注释所说)

即0,1,2,3,4,5,6,7

而作为数组下标的时候需要是0,2,4,6,8,...

所以左移了一位.

出0入0汤圆

发表于 2006-8-22 13:20:56 | 显示全部楼层
我是菜鸟,刚发完贴就看到了。

楼上说的不错,谢谢!

出0入0汤圆

发表于 2006-10-21 22:17:14 | 显示全部楼层
谢谢斑竹的辛苦劳作!!!!!!!!!!!

出0入22汤圆

发表于 2007-12-19 16:51:35 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2009-4-16 19:38:47 | 显示全部楼层
多谢了!

出0入0汤圆

发表于 2009-4-17 08:58:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-17 09:10:30 | 显示全部楼层
楼主有创意啊  我们一般都是用LCD显示时间的   从来没想过串口发送出来   用串口也是调试的时候发数据判断正确   MARK先

出0入0汤圆

发表于 2009-6-6 08:48:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-6 10:33:46 | 显示全部楼层
非常有创意

出0入0汤圆

发表于 2009-6-30 20:49:52 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-7-1 11:56:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-9 22:46:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-16 14:45:45 | 显示全部楼层
有创意啊  我们一般都是用LCD显示时间的   从来没想过串口发送出来   用串口也是调试的时候发数据判断正确
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 22:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表