⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302读写驱动程序.txt

📁 c51源程序总结
💻 TXT
字号:
用【 小 | 中 | 大 】字体浏览 
硬件:那位师兄拉小弟一把,ds1302写不进拉 [弄月书生] [26次] 01-11-23 上午 11:22:17
org 00h
ajmp main
res bit p1.1
sdata bit p1.6
sclk bit p1.7

main:
clr res
clr sclk
nop
nop
nop
mov a,#8eh
setb res
acall out
mov a,#00
acall out
clr res
nop
mov a,#0cch
setb res
acall out
mov a,#0aah 
acall out
clr res 
nop
nop
mov a,#0cdh
setb res
acall out
acall in
clr res
mov r5,a
clr c
subb a,#0aah
jnz ww1
mov p1,#00
ww1:ajmp $
out:
mov r3,#8h
wa1:
rrc a
mov sdata,c
setb sclk
nop
clr sclk
djnz r3,wa1
ret
in:
mov r3,#8h
wa2:
setb sclk
nop
mov c,sdata
clr sclk
rrc a
djnz r3,wa2
ret
end


look here! [lezi] [32次] 01-11-23 上午 11:27:19 
/*DS1302读写驱动程序*/
#include <absacc.h>
#include <stdio.h>
#include <AT89X52.H>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
uchar idata bufT[10];

#define I_O P3_0
#define SCLK P3_1
#define  RSTL P1_3=0
#define RSTH  P1_3=1
Rst1302();
void EndWrCLK(void);
void WriteYMD_DS1302(void);
void WriteHMS_DS1302(void);
void DisWrite1302(void);
void EnWrite1302(void);
void ReadTime_DS1302(void);

void SendCom1(uchar Cmd)   /* 向DS1302发一个命令:Cmd */
{
   uchar data i,k;
   for(i=0;i<8;i++){
      k=Cmd%2;
      if(k==0x1)
          I_O=1;
      else
          I_O=0;
          SCLK=1;
      SCLK=0;
      Cmd=Cmd/2;
   }
}


void RxComT(uchar DataNum) /* 从DS1302接收数据在buf[]中,uchar1=要接收的字节数*/
{
    uchar data uc3,uc2,uco;
    for(uc3=0;uc3<DataNum;uc3++){
       uc2=0;
       for(uco=0;uco<8;uco++){
          SCLK=0;
          uc2=uc2/2;
          if(I_O==1)
             uc2=uc2+0x80;
          else
             _nop_();
              SCLK=1;
        }
       bufT[uc3]=uc2;
    }
}

Rst1302()
{
        SCLK=0;
        RSTL;
        RSTH;
}
void EndWrCLK(void)
{
    RSTL;
    SCLK=1;
}

void WriteYMD_DS1302(void)  /* 写buf[]到DS1302的时钟寄存器 */
{
        uchar i,j;
        EnWrite1302();
        i=0;
        for (j=0;j<2;j++){
           SCLK=0;RSTH;
           SendCom1(0x86+i);
           SendCom1(bufT[j]);
           EndWrCLK();
           i+=2;
       }
       i=0x8c;
       SCLK=0;
       RSTH;
       SendCom1(i);
       SendCom1(bufT[j]);
       EndWrCLK();
       DisWrite1302();

}

void WriteHMS_DS1302(void)              /*写1302时间*/
{
   uchar i,j;
   EnWrite1302();
   i=0;
   for (j=0;j<3;j++){
       SCLK=0;RSTH;
       SendCom1(0x80+i);
       SendCom1(bufT[j]);
       EndWrCLK();
       i+=2;
   }
   DisWrite1302();
}

void DisWrite1302(void)  /* DS1302的写保护 */
{
      Rst1302();
      SendCom1(0x8e);
      SendCom1(0x80);
      EndWrCLK();
}

void EnWrite1302(void)   /* DS1302的写许可 */
{
      Rst1302();
      SendCom1(0x8e);
      SendCom1(0);
      EndWrCLK();
}

void ReadTime_DS1302(void) /* 从DS1302读: 秒,分,HOUR,天,月,(星期),年=bufT[] */
{
      uchar i;
      for(i=0;i<8;i++) bufT[i]=0xff;
      Rst1302();
      SendCom1(0xbf);  /* 时钟突发摸式读 */
      RxComT(7);
      EndWrCLK();
}

main()
{
uchar i;
ReadTime_DS1302();
bufT[0]&=0x7f;
WriteHMS_DS1302();
_nop_();


} 

谢谢,我试试 [弄月书生] [1次] 01-11-23 下午 05:19:23 

谢谢,我试试 [弄月书生] [0次] 01-11-23 下午 05:19:26 
 

 
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2002 

⌨️ 快捷键说明

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