>
首 页文章中心单片机论坛电脑援救中心杀毒软件下载电子元件速查集成电路速查客户留言下载中心商品展示频道繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国单片机网 -> 单片机讲座 -> 文章内容 退出登录 用户管理
栏目导航
· 经典软件 · 单片机讲座
· 电源技术 · 称重技术
· 硬件与电路 · 资料下载
· 淘宝商品 · 轻松一刻
· 金华电大资讯 · 胡老师招生
· l
热门文章
· [图文] 本站承接单片..
· 金华广播电视大学(金..
· 关于金华广播电视大..
· 关于金华广播电视大..
· [组图] 三极管s8050管..
· [组图] 9014三极管管..
· [组图] 三极管9012引..
· [组图] 中央广播电视..
· [组图] 三极管9013管..
· [组图] 万用表的使用..
相关文章
· DS1302时钟芯片显示..
· 基于DS18B20温度传感..
· [组图] 基于MCU和DSP..
· ds1302汇编程序(推..
· 实时时钟DS1302程序..
· 实时时钟模块DS1302..
· DS1302的读写程序(..
· 时钟芯片DS1302程序..
· [组图] 实时时钟电路..
· DS18B20测温(C语言..
DS1302 在ATmega8下的应用程序(C语言)
作者:本站  来源:www.chinadpj.com  发布时间:2008-5-15 20:56:22  发布人:admin

减小字体 增大字体

DS1302  ATmega8下的应用程序(C语言)

     最近总是看到关于DS1302访问的问题,以下程序是我在网上搜到并修改过的,已经在ATmega8下验证通过,请添加相应的头文件。

_NOP();在ina90.h中

注意:端口设置为输出之后,操作完毕要改回为输入,以免造成DS1302或者AVR损坏。

(我遇到的是DS1302非常的烫手,不过都没有坏,运气而已)。

程序原来应用在C51上,原作者我已经找不到署名了,很是抱歉。

 

 

 

/*********定义DS1302访问使用的端口******************/
#define Wait1us _NOP();

#define T_CLK_1 PORTD |= (1 << PD2) //CLK 1
#define T_CLK_0 PORTD &= ~(1 << PD2) //CLK 0

#define T_IO_1 PORTD |= (1 << PD3) //I/O OUT 1
#define T_IO_0 PORTD &= ~(1 << PD3) //I/O OUT 0

#define R_IO (PIND & (1 << PIND3)) //读取IO值

#define T_RST_1 PORTD |= (1 << PD4) //RST 1
#define T_RST_0 PORTD &= ~(1 << PD4) //RST 0

#define IO_OUT DDRD |= (1 << PD3) //设置I/O为输出
#define IO_IN {DDRD &= ~(1 << PD3); PORTD &= ~(1 << PD3);} //设置I/O为输入,不需要上拉电阻

void SetByte(unsigned char DSAdree);
unsigned char GetByte(void);
void WriteDataToDS1302(unsigned char DSAdree, unsigned char DSData);
unsigned char ReadDataDS1302(unsigned char DSAdree);

/***************初始化************/

void InitDS1302(void)
{
 DDRD |= ((1 << PD2) | (1 << PD4)); //设置PD2,PD4为输出
 T_CLK_0;
 T_RST_0;
 WriteDataToDS1302(0x8E, 0x0);  //写保护关闭
 Sec = ReadDataDS1302(0x81);
 WriteDataToDS1302(0x80, (Sec & 0x7F));  //设置运行位
 WriteDataToDS1302(0x90, 0xAB);  //启用电池充电,双二极管,8K电阻。
 WriteDataToDS1302(0x8E, 0x80);  //写保护开启
}

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

函 数 名:SetByte()
功    能:向DS1302写入1Byte数据
输入参数:DSAdree 写入的数据
返 回 值:无 

***********************************************************************/
void SetByte(unsigned char DSAdree)
{
    unsigned char i;
    DS = DSAdree;
 IO_OUT; //设置端口为输出
    for(i = 8; i > 0; i --)
    {
        if (DS & 0x1)
  {
   T_IO_1;
  }
  else
  {
   T_IO_0;
  }
  T_CLK_1;
  Wait1us;
        T_CLK_0;
        DS = DS >> 1;
    }
 IO_IN; //修改端口为输入,注意此项关键,否则可能烧毁DS1302
}
/********************************************************************

函 数 名:GetByte()
功    能:从DS1302读取一字节
输入参数:无 
返 回 值:一个字节

***********************************************************************/
unsigned char GetByte(void)
{
    unsigned char i;
 IO_IN; //设置端口为输入
 DS = 0;
    for(i = 8; i > 0; i --)
    {
        DS = (DS >> 1);
  if (R_IO)
  {
   DS |= 0x80;
  }
        T_CLK_1;
  Wait1us;
        T_CLK_0;
    }
    return (DS);
}
/********************************************************************

函 数 名:WriteDataToDS1302()
功    能:向DS1302写入数据
调    用:InputByte() , GetByte()
入口参数:DSAdree: DS1302地址, DSData: 要写的数据
返 回 值:无

***********************************************************************/
void WriteDataToDS1302(unsigned char DSAdree, unsigned char DSData)
{
    T_RST_0;
    T_CLK_0;
    T_RST_1;
    SetByte(DSAdree); // 地址,命令
    SetByte(DSData); // 写1Byte数据
    T_CLK_1;
    T_RST_0;
}
/********************************************************************

函 数 名:ReadDataDS1302()
功    能:读取DS1302某地址的数据
调    用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据

***********************************************************************/
unsigned char ReadDataDS1302(unsigned char DSAdree)
{
    unsigned char DSData;
    T_RST_0;
    T_CLK_0;
    T_RST_1;
    SetByte(DSAdree);             // 地址,命令
    DSData = GetByte();         // 读1Byte数据
    T_CLK_1;
    T_RST_0;
    return(DSData);
}


/*****************DS1302访问函数定义结束*************************************/

[本站www.chinadpj.com(中国单片机网),摘自:http://blog.21ic.com/user1/2750/archives/2006/33503.html ;]
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2009 www.chinadpj.com. All Rights Reserved. 浙ICP备06040125号
Powered by:NewAsp SiteManageSystem Version 2.1 SP1 1030