ATMEGA8读写DS1302原程序

上一篇 / 下一篇  2007-10-03 13:18:19 / 天气: 阴雨 / 心情: 平静 / 个人分类:AVR单片机


感谢【阿莫】的网站,给我们提供了一片交流的空间!


//*********** DS1302 驱动程序 2005/08/17整理

//接口定义
// PD5: RST
// PD6: I/O
// PD7: CLK

unsigned char AA;

/******************************************************************** 
 函 数 名:RTInputByte()
 功    能:实时时钟写入一字节
 说    明:往DS1302写入1Byte数据 (内部函数)
 入口参数:d 写入的数据 
 返 回 值:无  
 ***********************************************************************/
void RTInputByte(unsigned char  x) 

    unsigned char  i;
    for(i=0; i<8;i++)
    {
     if(x&(1<<i)) { PORTD|=(1<<6); }
     else { PORTD&=~(1<<6); } 
     
     PORTD|=(1<<7);
     PORTD&=~(1<<7);                     
    }    
}
/******************************************************************** 
 函 数 名:RTOutputByte()
 功    能:实时时钟读取一字节
 说    明:从DS1302读取1Byte数据 (内部函数)
 入口参数:无  
 返 回 值:ACC
 ***********************************************************************/
unsigned char RTOutputByte(void) 

    unsigned char i,k;   
   DDRD&=~(1<<6);   
    for(i=0; i<8; i++)
    {                
     k=(PIND&(1<<6));    //读数据,从低位开始 
      if(k) 
        AA|=(1<<i); 
      else 
        AA&=~(1<<i); 
         
      PORTD|=(1<<7);
     PORTD&=~(1<<7);   
    }    
   DDRD|=(1<<6);
    return(AA); 
}
/******************************************************************** 
 函 数 名:W1302()
 功    能:往DS1302写入数据
 说    明:先写地址,后写命令/数据 (内部函数)
 调    用:RTInputByte() , RTOutputByte()
 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 返 回 值:无
 ***********************************************************************/
void W1302(unsigned char ucAddr, unsigned char ucDa)
{
   PORTD&=~(1<<5);  // RST  to L
   PORTD&=~(1<<7);  // CLK  to L
   PORTD|=(1<<5);  // RST  to H
   
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucDa);         /* 写1Byte数据*/

   PORTD|=(1<<7); //CLK  to H
   PORTD&=~(1<<5); //RST  to L 
   
}
/******************************************************************** 
 函 数 名:R1302()
 功    能:读取DS1302某地址的数据
 说    明:先写地址,后读命令/数据 (内部函数)
 调    用:RTInputByte() , RTOutputByte()
 入口参数:ucAddr: DS1302地址
 返 回 值:ucData :读取的数据
***********************************************************************/
unsigned char R1302(unsigned char ucAddr)
{
    unsigned char ucData;   
   PORTD&=~(1<<5);  // RST  to L
   PORTD&=~(1<<7);  // CLK  to L
   PORTD|=(1<<5);  // RST  to H
    RTInputByte(ucAddr);             /* 地址,命令 */
    ucData = RTOutputByte();         /* 读1Byte数据 */
   
   PORTD|=(1<<7); //CLK  to H
   PORTD|=(1<<7);
   PORTD&=~(1<<5); //RST  to L 
    return(ucData);
}

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

我的存档

数据统计

  • 访问量: 710
  • 日志数: 5
  • 商品数: 1
  • 建立时间: 2007-10-02
  • 更新时间: 2007-10-03

RSS订阅

Open Toolbar