久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5773|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

求好心的大神看看我的ds1302掉電初始化檢測(cè)哪兒不對(duì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:47184 發(fā)表于 2013-8-26 16:14 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如題,做了個(gè)時(shí)鐘,一直不能實(shí)現(xiàn)掉電跳過(guò)初始化,下面是初始化程序,是用在1302ram中寫(xiě)一個(gè)標(biāo)志
//讀標(biāo)志
uchar read1302_flag(uchar address)
{
        uchar i,temp;
        ce=0;
        sclk=0;
        ce=1;
                for(i=8;i>0;i--)
                {
                        sclk=0;
                        temp=address;
                        io=(bit)(temp%0x01);
                        address>>=1;
                        sclk=1;
                  }
                for(i=8;i>0;i--)
                {
                        ACC_7=io;
                        sclk=1;
                        ACC>>=1;
                        sclk=0;
                }
        ce=0;
        dat3=ACC;
        dat3=dat3&0x80;
        return(dat3);
}
//初始化1302
void init()
{       
        read1302_flag(0xc1);
        if(dat3!=0xff)
        {
        write1302(0x8e,0x00);
        write1302(0xc0,0xff);
        write1302(0x90,0x06);
        write1302(0x80,0x56);
        write1302(0x82,0x46);
        write1302(0x84,0x19);
        write1302(0x8e,0x80);
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:7485 發(fā)表于 2013-8-26 17:33 | 只看該作者
{
                        ACC_7=io;
                        sclk=1;
                        ACC>>=1;
                        sclk=0;
                }
有紅色的那一句,acc_7 就是0,所以返回值就是0x7f。
讀完最后一位后,跳過(guò)這一句即可。
或者把這一句移到前面去,先位移,后讀IO.

你的程序不完整,想調(diào)試一下都難,難怪別人幫不了你。

我只能給你提個(gè)思路,你自己調(diào)試吧。
回復(fù)

使用道具 舉報(bào)

板凳
ID:7485 發(fā)表于 2013-8-26 17:33 | 只看該作者
{
                        ACC_7=io;
                        sclk=1;
                        ACC>>=1;
                        sclk=0;
                }
有紅色的那一句,acc_7 就是0,所以返回值就是0x7f。
讀完最后一位后,跳過(guò)這一句即可。
或者把這一句移到前面去,先位移,后讀IO.

你的程序不完整,想調(diào)試一下都難,難怪別人幫不了你。

我只能給你提個(gè)思路,你自己調(diào)試吧。
回復(fù)

使用道具 舉報(bào)

地板
ID:47184 發(fā)表于 2013-8-26 21:42 | 只看該作者
ahshmj 發(fā)表于 2013-8-26 17:33
{
                        ACC_7=io;
                        sclk=1;

又研究了一晚,實(shí)在搞不出來(lái)了,不是上電初始化,就是不初始化1302不走時(shí)

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit ce=P2^0;//ds1302
sbit sclk=P1^0;//時(shí)鐘
sbit io=P1^1;//數(shù)據(jù)口

//定義摁鍵
sbit key1=P3^2;//小時(shí)+
sbit key2=P3^4;//小時(shí)-
sbit key3=P3^6;//分鐘+
sbit key4=P3^7;//分鐘-

//定義蜂鳴器
sbit beep=P2^2;


//定義段位
sbit duan=P2^6;
sbit wei=P2^7;


//位尋址寄存器定義
sbit ACC_7=ACC^7;
uchar num,dat1,dat2,dat3;



//地址數(shù)據(jù)發(fā)送子程序
void write1302(unsigned char addr,dat)
{
        uchar i,temp;
        ce=0;
        sclk=0;
        ce=1;
        for(i=8;i>0;i--)
        {
                sclk=0;
                temp=addr;
                io=(bit)(temp&0x01);
                addr>>=1;
                sclk=1;       
        }
        for(i=8;i>0;i--)
        {
                sclk=0;
                temp=dat;
                io=(bit)(temp&0x01);
                dat>>=1;
                sclk=1;
        }
        ce=0;
}
//數(shù)據(jù)獲取子程序
uchar read1302(uchar addr)
{
        uchar i,temp;
        ce=0;
        sclk=0;
        ce=1;
        for(i=8;i>0;i--)
        {
                sclk=0;
                temp=addr;
                io=(bit)(temp&0x01);
                addr>>=1;
                sclk=1;
        }
        for(i=8;i>0;i--)
        {
                ACC_7=io;
                sclk=1;
                ACC>>=1;
                sclk=0;
        }
        ce=0;
        dat1=ACC;
        dat2=dat1/16;
        dat1=dat1%16;
        dat1=dat1+dat2*10;
        return(dat1);
}
//讀出秒值
uchar read1302_flag(uchar address)
{
        uchar i,temp;
        ce=0;
        sclk=0;
        ce=1;
                for(i=8;i>0;i--)
                {
                        sclk=0;
                        temp=address;
                        io=(bit)(temp&0x01);
                        address>>=1;
                        sclk=1;
                  }
                for(i=7;i>0;i--)
                {

                        ACC_7=io;
                        sclk=1;
                        ACC>>=1;
                        sclk=0;
                }
                        ACC_7=io;
                        sclk=1;
                        sclk=0;
        ce=0;
        dat3=ACC;
        return(dat3);
}
//初始化1302
void init()
{       
        read1302_flag(0xc1);
        if(dat3!=0xff)
        {
        write1302(0x8e,0x00);
//        write1302(0x90,0x06);
        write1302(0x80,0x56);
        write1302(0x82,0x46);
        write1302(0x84,0x19);
        write1302(0xc0,0xff);
        write1302(0x8e,0x80);
        }
}
//簡(jiǎn)單延時(shí)
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
//把1302讀取到的數(shù)據(jù)顯示到數(shù)碼管上
void xianshi(uchar wela1,wela2)
{       
        uchar shi,ge;
        shi=dat1/10;
        ge=dat1%10;

        wei=1;
        P0=wela1;
        wei=0;
        duan=1;
        P0=temp[shi];
        duan=0;
        delay(5);
       

        wei=1;
        P0=wela2;
        wei=0;
        duan=1;
        P0=temp[ge];
        duan=0;       
        delay(5);       
}
//蜂鳴器發(fā)聲程序
void di()
{
        beep=0;
        delay(50);
        beep=1;
}
//摁鍵檢測(cè)
void key_check()
{

                                                if(key1==0)
                                                {
                                                        delay(1);
                                                        if(key1==0)
                                                        {
                                                                di();
                                                                while(!key1);
                                                                write1302(0x8e,0x00);
                                                                read1302(0x85);
                                                                dat1=dat1++;
                                                                if(dat1==24)
                                                                dat1=0;
                                                                dat1=dat1%10+dat1/10*16;
                                                                write1302(0x84,dat1);
                                                                write1302(0x8e,0x80);
                                                        }
                                                }
                                                if(key3==0)
                                                {
                                                        delay(1);
                                                        if(key3==0)
                                                        {
                                                                di();
                                                                while(!key3);
                                                                write1302(0x8e,0x00);
                                                                read1302(0x83);
                                                                dat1=dat1++;
                                                                if(dat1==60)
                                                                dat1=0;
                                                                dat1=dat1%10+dat1/10*16;
                                                                write1302(0x82,dat1);
                                                                write1302(0x8e,0x80);
                                                        }
                                                }
                                                if(key2==0)
                                                {
                                                        delay(1);
                                                        if(key2==0)
                                                        {
                                                                di();
                                                                while(!key2);
                                                                write1302(0x8e,0x00);
                                                                read1302(0x85);
                                                                dat1=dat1--;
                                                                if(dat1==0)
                                                                dat1=23;
                                                                dat1=dat1%10+dat1/10*16;
                                                                write1302(0x84,dat1);
                                                                write1302(0x8e,0x80);
                                                        }
                                                }
                                                if(key4==0)
                                                {
                                                        delay(1);
                                                        if(key4==0)
                                                        {
                                                                di();
                                                                while(!key4);
                                                                write1302(0x8e,0x00);
                                                                read1302(0x83);
                                                                dat1=dat1--;
                                                                if(dat1==0)
                                                                dat1=59;
                                                                dat1=dat1%10+dat1/10*16;
                                                                write1302(0x82,dat1);
                                                                write1302(0x8e,0x80);
                                                        }
                                                }                                                       
}
//主程序
void main()
{       
        init();
        while(1)
        {               

                key_check();//鍵盤檢測(cè)
                        read1302(0x83);//讀分鐘
                        xianshi(0xdf,0xef);        //顯示分鐘
               
                        read1302(0x85);//讀小時(shí)
                        xianshi(0x7f,0xbf);//顯示小時(shí)


        }       
}
回復(fù)

使用道具 舉報(bào)

5#
ID:27916 發(fā)表于 2013-8-27 09:18 | 只看該作者
先說(shuō)明沒(méi)用過(guò)C,,,

    for(i=8;i>0;i--)
                {
                        ACC_7=io;
                        sclk=1;
                        ACC>>=1;
                        sclk=0;
                }
        ce=0;
        dat3=ACC;
        dat3=dat3&0x80;  
        return(dat3);
}
//初始化1302
void init()


紅色部分去掉
回復(fù)

使用道具 舉報(bào)

6#
ID:7485 發(fā)表于 2013-8-28 08:12 | 只看該作者
本帖最后由 ahshmj 于 2013-8-28 08:15 編輯

讀1302時(shí)按這樣:
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;    //這一句放前面來(lái)。                        
        ACC7 = io;
        sclk = 1;
        sclk= 0;
    }
       ce=0;
        dat3=ACC;
        return(dat3);


如果僅僅就你說(shuō)的這么多問(wèn)題,上面的改動(dòng)應(yīng)該能解決問(wèn)題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91黄色片免费看 | 亚洲欧美一区二区三区1000 | 日本午夜视频 | 国产成人一区二区三区电影 | 亚洲高清视频一区二区 | 国产 日韩 欧美 在线 | 日韩久久久久久 | 欧美久久视频 | 欧美日韩91 | 黄色成人免费在线观看 | 九九av | 成人av免费 | 国产小视频在线观看 | 黄 色 毛片免费 | 在线成人av | 国产成人免费 | 国产高清精品一区二区三区 | 亚洲国产情侣自拍 | 麻豆av片 | 久久综合伊人一区二区三 | 国产黄色大片在线免费观看 | 欧美激情精品久久久久久 | 神马九九| 中文字幕在线一区二区三区 | 日韩视频在线观看中文字幕 | 81精品国产乱码久久久久久 | 成人午夜影院 | 超碰97av | 日韩黄a| 亚洲精品久久久一区二区三区 | 午夜网址| 中文字幕亚洲专区 | 欧洲精品码一区二区三区免费看 | 欧美精品一区二区在线观看 | 特a毛片| 欧美精品在线观看 | 亚洲天堂精品一区 | 九九九国产 | 天天操人人干 | 国产一区二区三区久久久久久久久 | 免费成人在线网站 |