关于DS1302驱动的问题 5
DS1302芯片硬件连接没有问题单片机使用STC89C52RC的时候能正常工作但是换上STC12C5A60S2就没法读取数据了LCD上显示“??”我有试着在每一个语句之后...
DS1302芯片 硬件连接没有问题 单片机使用STC89C52RC的时候能正常工作
但是换上STC12C5A60S2就没法读取数据了 LCD上显示“??”
我有试着在每一个语句之后加11个机器周期的延时 但是依然没有改变 请高手指点一下
附上驱动代码
/********************************底层协议*************************************/
//1302驱动程序
void clock_out(uchar dd)
{
ACC=dd;
clock_dat=a0;clock_clk=1; clock_clk=0;
clock_dat=a1;clock_clk=1; clock_clk=0;
clock_dat=a2;clock_clk=1; clock_clk=0;
clock_dat=a3;clock_clk=1; clock_clk=0;
clock_dat=a4;clock_clk=1; clock_clk=0;
clock_dat=a5;clock_clk=1; clock_clk=0;
clock_dat=a6;clock_clk=1; clock_clk=0;
clock_dat=a7;clock_clk=1; clock_clk=0;
}
/*****************************************************************************/
//DS1302写入字节
uchar clock_in()
{
clock_dat=1;
a0=clock_dat;
clock_clk=1; clock_clk=0;a1=clock_dat;
clock_clk=1; clock_clk=0;a2=clock_dat;
clock_clk=1; clock_clk=0;a3=clock_dat;
clock_clk=1; clock_clk=0;a4=clock_dat;
clock_clk=1; clock_clk=0;a5=clock_dat;
clock_clk=1; clock_clk=0;a6=clock_dat;
clock_clk=1; clock_clk=0;a7=clock_dat;
return(ACC);
}
/*****************************************************************************/
//DS1302读数据
uchar read_clock(uchar ord)
{
uchar dd=0;
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
Delay1(1);
clock_out(ord);
dd=clock_in();
clock_Rst=0;
clock_clk=1;
return(dd);
}
/*****************************************************************************/
//DS1302写数据
void write_clock(uchar ord, uchar dd)
{
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
Delay1(1);
clock_out(ord);
clock_out(dd);
clock_Rst=0;
clock_clk=1;
}
/****************************************************************************/
//同时读取所有时间相关数据
void read_clockS()
{
ss = read_clock(0x81);//读取秒数据
mm = read_clock(0x83);//读取分钟数据
hh = read_clock(0x85);//小时
dd = read_clock(0x87);//日
mo = read_clock(0x89);//月
xq = read_clock(0x8b);//星期
yy = read_clock(0x8d);//年
}
还有个问题就是我用12C5A60S2插在开发板上就能正常工作....插在我焊的板子上就出问题
但是我焊的板子上插89C52就正常工作 很搞笑 展开
但是换上STC12C5A60S2就没法读取数据了 LCD上显示“??”
我有试着在每一个语句之后加11个机器周期的延时 但是依然没有改变 请高手指点一下
附上驱动代码
/********************************底层协议*************************************/
//1302驱动程序
void clock_out(uchar dd)
{
ACC=dd;
clock_dat=a0;clock_clk=1; clock_clk=0;
clock_dat=a1;clock_clk=1; clock_clk=0;
clock_dat=a2;clock_clk=1; clock_clk=0;
clock_dat=a3;clock_clk=1; clock_clk=0;
clock_dat=a4;clock_clk=1; clock_clk=0;
clock_dat=a5;clock_clk=1; clock_clk=0;
clock_dat=a6;clock_clk=1; clock_clk=0;
clock_dat=a7;clock_clk=1; clock_clk=0;
}
/*****************************************************************************/
//DS1302写入字节
uchar clock_in()
{
clock_dat=1;
a0=clock_dat;
clock_clk=1; clock_clk=0;a1=clock_dat;
clock_clk=1; clock_clk=0;a2=clock_dat;
clock_clk=1; clock_clk=0;a3=clock_dat;
clock_clk=1; clock_clk=0;a4=clock_dat;
clock_clk=1; clock_clk=0;a5=clock_dat;
clock_clk=1; clock_clk=0;a6=clock_dat;
clock_clk=1; clock_clk=0;a7=clock_dat;
return(ACC);
}
/*****************************************************************************/
//DS1302读数据
uchar read_clock(uchar ord)
{
uchar dd=0;
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
Delay1(1);
clock_out(ord);
dd=clock_in();
clock_Rst=0;
clock_clk=1;
return(dd);
}
/*****************************************************************************/
//DS1302写数据
void write_clock(uchar ord, uchar dd)
{
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
Delay1(1);
clock_out(ord);
clock_out(dd);
clock_Rst=0;
clock_clk=1;
}
/****************************************************************************/
//同时读取所有时间相关数据
void read_clockS()
{
ss = read_clock(0x81);//读取秒数据
mm = read_clock(0x83);//读取分钟数据
hh = read_clock(0x85);//小时
dd = read_clock(0x87);//日
mo = read_clock(0x89);//月
xq = read_clock(0x8b);//星期
yy = read_clock(0x8d);//年
}
还有个问题就是我用12C5A60S2插在开发板上就能正常工作....插在我焊的板子上就出问题
但是我焊的板子上插89C52就正常工作 很搞笑 展开
4个回答
展开全部
多加点nop吧。。5a速度太快了,输出未必跟得上计算速度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ads
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询