DS1302读数据时序的一些疑问

2019-07-16 03:12发布

下面是DS1302读数据的子程序,数据手册上不是说在下降沿读取数据吗??可这儿的程序怎么看上去上上升沿读数据呀??        for(i=0;i<8;i++)
        {        SCLK=0;
                if(IO==1)
                {
                        temp=temp|0x80;
                }
                temp=temp>>1;
                SCLK=1;
                _nop_();
敢问一下,是哪错了???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
911119qianhao
2019-07-16 17:16
哥,这是我写的全部程序,就是不知是哪错了,望指教#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit IO=P1^0;
sbit SCLK=P1^1;
sbit RST=P1^2;
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar buf[6]={0x12,0x00,0x00,0x00,0x00,0x00};
uchar code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay1ms(uint z)
{
        uint x;
        uchar y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
uchar read(uchar add)
{
        
        uchar temp=0,i=0;
        RST=0;
        SCLK=0;
        RST=1;
        for(i=0;i<8;i++)
        {        SCLK=0;
                IO=add&0x01;
                _nop_();
                add=add>>1;
                SCLK=1;
        }
        for(i=0;i<8;i++)
        {        SCLK=0;
                if(IO==1)
                {
                        temp=temp|0x80;
                }
                temp=temp>>1;
                SCLK=1;
                _nop_();
        }
        RST=0;
        SCLK=1;
        return temp;        
}
void write(uchar add,uchar temp)
{
        uchar i=0;
        RST=0;
        SCLK=0;
        RST=1;
        for(i=0;i<8;i++)
        {        
                SCLK=0;
                IO=add&0x01;
                _nop_();
                add=add>>1;
                SCLK=1;
               
        }
        for(i=0;i<8;i++)
        {        SCLK=0;
                IO=temp&0x01;
                _nop_();
                temp=temp>>1;
                SCLK=1;
        }
        SCLK=1;
        RST=0;
        
        
               
}
void init()
{
        RST=0;
        SCLK=0;
        RST=1;
        write(0x8E,0x00); //写保护
        write(0x80,buf[2]); //秒
        write(0x82,buf[1]);  //分
        write(0x84,buf[0]);  //时
        
}
void disp()
{
        uchar j=0,i=0,hex=0;        
        for(i=0;i<7;i++)
        {
               
                buf=read(0x85-2*j)/16;
                buf[++i]=read(0x85-2*j)%16;
                j++;
               
        }
        for(i=0;i<7;i++)
        {
                P2=wei;
                P0=duan[buf];
                delay1ms(3);
                P0=0x00;
                P2=0xff;
        }

}
void main()
{
        init();
        while(1)
        {
                disp();
        }
}


仿真中出现的图,可就是在数码管上显示不出



QQ截图20121213170011.png (7 KB, 下载次数: 0)

一周热门 更多>