最近写了个DS1302的时钟程序,很是郁闷,读出的数据是个固定的值,参考了别人的程序,感觉我理解的没问题,不知各位有什么高见,下面为读写部分,请各位指教
//管脚定义sbit SCLK = P3^5;
// DS1302时钟信号
7脚sbit DIO= P3^6;
// DS1302数据信号
6脚sbit CE = P3^7;
// DS1302片选
5脚 //地址、数据发送子程序void Write1302 ( unsigned char addr,dat )
{
unsigned char i,temp;
CE=0;
//CE引脚为低,数据传送中止
SCLK=0;
//清零时钟总线
CE = 1;
//CE引脚为高,逻辑控制有效
//发送地址
for ( i=8; i>0; i-- ) //循环8次移位
{
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-- )
//循环8次移位
{
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);} |