打印

请高手们帮我看哈DS1302的问题

[复制链接]
1403|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
YACHL882828|  楼主 | 2011-4-25 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, ce, AD, WRITE, AC
#include<reg52.h>
#include<ds1302.h>
#define uchar unsigned char
#define uint unsigned int
//ds1302pin
sbit SCLK=P3^6;
sbit SDA=P3^4;
sbit CE=P3^5;
void delayms()
{; ;}
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
void WB(uchar tem)
{uchar i;
ACC=tem;
for(i=0;i<8;i++)
{SDA=ACC0;
  SCLK=1;
  ACC=ACC>>1;
  SCLK=0;
   }
    }
uchar RB()
{uchar i;
  for(i=0;i<8;i++)
   {ACC7=SDA;
SCLK=1;
ACC=ACC>>1;
SCLK=0;
   }
return ACC;
       }
void WBD(uchar addr2,uchar datas)
{ACC=addr2;
  CE=0;
  SCLK=0;
  CE=1;
  WB(ACC);
  ACC=datas;
  WB(ACC);
  CE=0;
  }
uchar RBD(uchar addr1)
{uchar tem1,tem3;
  tem3=addr1;
  CE=0;
  SCLK=0;
  CE=1;
  WB(tem3);
  SDA=1;
  tem1=RB();
  CE=0;
  return tem1;
   }
void initial(void)
{CE=0;
  delayms();
  SCLK=0;
  delayms();
  WBD(0x8e,0x00);
  WBD(0x90,0xa6);
   }
/*
uchar bdata WRITEDATA;  //写入数据包括数据也包括命令
uchar bdata WRITEDATA1;
uchar bdata READDATA;//读数据包括寄存器的任何值
sbit IBIT=WRITEDATA^0; //写入数据的第一位
sbit IBIT1=WRITEDATA1^0;
sbit OBIT=READDATA^7; //读出数据的第一位
//SINGLE BYTE WRITE
void BYTEWRITE(uchar addr,uchar datas)
{uchar i,j;
WRITEDATA=addr;
CE=0;
SCLK=0;
CE=1;
for(i=0;i<8;i++)
  {SDA=IBIT;
  // delayms();
   SCLK=1;
   //delayms();
   WRITEDATA=WRITEDATA>>1;
   SCLK=0;
  //
   }
   WRITEDATA1=datas;
  for(j=0;j<8;j++)
  {SDA=IBIT1;
//  delayms();
   SCLK=1;
   WRITEDATA1=WRITEDATA1>>1;
   SCLK=0;
  // delayms();
   }
   CE=0;
   delayms();
   CE=1;
   //SCLK=1;//
    }
//SINGLE BYTE REA
uchar BYTEREAD(uchar addr1)
{uchar k,n;
WRITEDATA=addr1;
CE=0;
SCLK=0;
CE=1;
for(k=0;k<8;k++)
  {SDA=IBIT;
   //delayms();
   SCLK=1;
   WRITEDATA=WRITEDATA>>1;
   //delayms();
   SCLK=0;
   //
   }
   SDA=1;
   for(n=0;n<8;n++)
    {//delayms();
  OBIT=SDA;
  READDATA=READDATA>>1;
  SCLK=1;
  //delayms();
  SCLK=0;
// delayms();
  }
// SCLK=1;
  CE=0;
//  
     return READDATA;
   }
   //初始化initial
void ds1302initial()
{uchar ds1302st;
  CE=0;
  delayms();
  SCLK=0;
  delayms();
  ds1302st=BYTEREAD(0xc1);
  if(ds1302st!=0x55)
{ BYTEWRITE(0x8e,0x00);
   BYTEWRITE(0x90,0xa6);
   BYTEWRITE(0xc0,0x55);
  }
   }
//res1302
void rest1302()
{  CE=0;
  delayms();
  SCLK=0;
  delayms();
  } */

相关帖子

沙发
lackan| | 2011-4-26 00:10 | 只看该作者
uchar RB()
{uchar i;
  for(i=0;i<8;i++)
   {ACC7=SDA;
SCLK=1;
ACC=ACC>>1;
SCLK=0;
   }
这里的ACC移位应该放在循环的开头吧?它实际移位次数应该是7次而已吧~

使用特权

评论回复
板凳
YACHL882828|  楼主 | 2011-4-26 09:56 | 只看该作者
谢谢了,我找了好久一直没能找到,非常的谢谢

使用特权

评论回复
地板
ayb_ice| | 2011-4-26 10:30 | 只看该作者
在C里不要直接使用ACC

使用特权

评论回复
5
lackan| | 2011-4-26 22:23 | 只看该作者
确实,在c里面最好不要用ACC。。。

使用特权

评论回复
6
原野之狼| | 2011-4-26 22:26 | 只看该作者
有没有谁去考究下使用ACC是谁在什么时候出于什么情况原创的~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

35

帖子

1

粉丝