请教各位:有关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;
}
}
发表时间:2006年6月8日8:18:07