ds130.c

来自「实时时钟芯片DS1302在ATMEGA128上的C语言源代码」· C语言 代码 · 共 87 行

C
87
字号
#include <iom128.h>
#include <comp_a90.h>
#define  ds1302_RST    0x04
#define  ds1302_IO     0x02
#define  ds1302_SCLK   0x01
//写一个字节的数据到1302
void write_cmd(unsigned char cmd)
{
   unsigned char i,j;
   DDRE|=ds1302_IO;
   for(i=0;i<8;i++)
     {
       PORTE&=~ds1302_SCLK;
       j=cmd&1;
       if(j)
         PORTE|=ds1302_IO;
       else
         PORTE&=~ds1302_IO;
       PORTE|=ds1302_SCLK;
       cmd>>=1;
      }

}
//从1302中读一个字节的数据
unsigned char read_cmd(void)
 {
   unsigned char i,jj,dd;
   DDRE&=~ds1302_IO;
   PORTE|=ds1302_IO;
   for(i=0;i<8;i++)
       {
        dd>>=1;
        PORTE&=~ds1302_SCLK;
        PORTE&=~ds1302_SCLK;
        jj=PINE;
        jj&=ds1302_IO;
        PORTE|=ds1302_SCLK;
        PORTE|=ds1302_SCLK;
        if(jj==ds1302_IO)
            dd|=0x80;
        else
            dd&=~0x80;
        }

   DDRE|=ds1302_IO;//shu ru
   return dd;
}

//写数据
void write_1302(unsigned char cmd,unsigned char dd)
{
 DDRE|=ds1302_SCLK;
 DDRE|=(ds1302_RST|ds1302_IO);

 PORTE&=~ds1302_SCLK; //ds1302_SCLK=0;
 PORTE|=ds1302_RST;
 write_cmd(cmd);
 write_cmd(dd);
 PORTE&=~ds1302_SCLK;//ds1302_SCLK=0;
 PORTE&=~ds1302_RST;
 }
//读数据
unsigned char read_1302(unsigned char cmd)
{
 unsigned char dd;
 PORTE&=~ds1302_SCLK;//ds1302_SCLK=0;
 PORTE|=ds1302_RST;
 write_cmd(cmd);
 dd=read_cmd();
 PORTE&=~ds1302_SCLK;//ds1302_SCLK=0;
 PORTE&=~ds1302_RST;
 return dd;
 }
void readtime(unsigned char buf[])
{
    unsigned char year;
    buf[0] = '2';
    buf[1] = '0';

    year = read_1302(0x8d);
    buf[2] = year/16 + '0';
    buf[3] = year%16 + '0';
}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?