本人没有什么C语言的基础,凭着爱好自学的单片机,根据1302的时序图和自己的理解下了下面的程序,麻烦大神们帮我看看哪里有问题,我的问题出在哪里。学了快一周了,都还没有一点长进
/*****头文件*****/
#include <reg52.h>
/*****宏定义*****/
#define u8 unsigned char
#define u16 unsigned int
/*****延时函数*****/
void delay(u16 num)
{
u16 x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--);
}
/*****定义变量端口号*****/
sbit sclk=P3^6;
sbit io=P3^4;
sbit ce=P3^5;
/*****读1302函数*****/
u8 read_1302()
{
u8 dat,dat1,wr;
sclk=0;
ce=1;
for(n=0;n<8;n++)
{
wr=io;
wr=wr&0x01;
delay(5);
sclk=1;
delay(5);
sclk=0;
delay(5);
wr>>=1;
delay(5);
}
delay(15);
for(n=0;n<8;n++)
{
io=dat1;
dat1=dat1|0x00;
delay(5);
sclk=1;
delay(5);
sclk=0;
delay(5);
dat1<<=1;
delay(5);
}
return dat;
}
/*****主函数*****/
void main()
{
P1=read_1302(0x81);
while(1)
{
;
}
}
此帖出自
小平头技术问答
汇编的DS1302我倒是有,C很少用,汇编的话只要你的时序对,肯定是能读出来的。
一周热门 更多>