导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教各位:有关51单片机读取DS1302的一个程序?[zqingping]

 *第41192篇: 请教各位:有关51单片机读取DS1302的一个程序?

  
楼 主:zqingping 2006年6月8日08:18
 请教各位:有关51单片机读取DS1302的一个程序?
有关51单片机读取DS1302的一个程序:
为什么读不出DS1302中的数据?

#include   <AT89X51.H>   
#define write_second  0x80     
#define write_minute  0x82
#define write_hour    0x84

#define read_second  0x81
#define read_minute  0x83
#define read_hour  0x85

#define write_conreg  0x8e

sbit ACC_7=ACC^7;

sbit SCLK=P3^0;
sbit DIO=P3^1;
sbit CE=P3^2;

unsigned char data  m,n;
unsigned char data timercur[7];
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,           //共阴显示代码

                                   0x66,0x6d,0x7d,0x07,

                                    0x7f,0x6f,0x77,0x7c, 

                                    0x39,0x5e,0x79,0x71,0x00,0x40}; 


void write1302(unsigned char addr,dat)  //向指定地址中写入数据
{
   unsigned char i,temp;
   CE=0;
   SCLK=0;
   CE=1;
   for(i=8;i>  0;i--)
     {
    SCLK=0;
    temp=addr;
    DIO=(bit)(temp&0x01);
    addr>  >  =1;
    SCLK=1;
  }
   for(i=8;i>  0;i--)
     {
    SCLK=0;
    temp=dat;
       DIO=(bit)(temp&0x01);
    dat>  >  =1;
    SCLK=1;
  }
   CE=0;
}

unsigned char read1302(unsigned char addr)//从指定地址读出数据
{
   unsigned char i,temp,dat1,dat2;
   CE=0;
   SCLK=0;
   CE=1;
   
   for(i=8;i>  0;i--)
      {
      SCLK=0;
   temp=addr;
   DIO=(bit)(temp&0x01);
   addr>  >  =1;
   SCLK=1;
   }
   
   for(i=8;i>  0;i--)
      {
      ACC_7=DIO;
   SCLK=0;
   ACC>  >  =1;
   SCLK=1;
   }
   CE=0;
   dat1=ACC;
   dat2=dat1/16;
   dat1=dat1%16;
   dat1=dat1+dat2*10;
   return (dat1);
}

void initial(void)
{
   write1302(write_conreg,0x00);//允许写
   write1302(write_second,0x56);
   write1302(write_minute,0x34);
   write1302(write_hour,0x12);
   write1302(write_conreg,0x80);//写保护
}

void delay(void)
{
    unsigned char i,j;
    for(i=1;i  <2;i++)
    {
        for (j=1;j  <200;j++)
        {
        }
    }
}

void t0(void) interrupt 1 using 0 //定时读出数据

  m++;
   if(m==250)
     {
    m=0;
    n++;
    if(n==10)
      {
     n=0;
     timercur[0]=read1302(read_second);
   }
  }
}

void main(void)
{
   TMOD=0X02;
   TH0=0X3F;
   TL0=0X3F;
   ET0=1;
   EA=1;
   TR0=1;
   initial();
    while(1)
  {  
   P1=displaycode[timercur[0]%10];
   P0=0x0fe;
   delay();
   //P0=0xff;
   P1=displaycode[timercur[0]/10];
   P0=0x0fd;
   delay();
   //P0=0xff;
  }
}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:液晶高手请进来帮忙!!

[下一篇主题]:招聘义隆单片机开发人员