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

標題: 關于IIC總線(EEPROM)時鐘數據保存問題 [打印本頁]

作者: wonderfulxsj    時間: 2018-7-19 09:39
標題: 關于IIC總線(EEPROM)時鐘數據保存問題
我想實現一個結合EEPROM芯片實現一個時鐘程序,理想狀態是掉電后時分秒還是按照原來的數據自增一,但是實際是只是保存了秒,掉電后重啟秒正常以掉電前數據自增一,時和分保存的卻是固定的數字,掉電后重啟恢復原來的時和分數據,現象是:如掉電前04:02:12 ,掉電后重啟04:01:12 ,無論分加到幾,掉電后重啟都會恢復為01,請幫我看看我的程序哪里不對?程序如下:
/*部分EEPROM讀寫程序已經寫入I2C頭文件中*/
#include<I2C.h>//自寫的頭文件,內部包含
#include<reg52.h>
#define uchar unsigned char//宏定義
#define uint unsigned int
bit fa=0,da=0,ga=0;          //觸發寫入EEPROM
sbit LSA=P2^2;                 //138譯碼器,用于擴展8位數碼管
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code pcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar hour=0,min=0,s=55;
void delay(uint i) //延時函數
{
        while(i--);       
}
void display()        //數碼管顯示
{

            LSA=0;LSB=0;LSC=0; //顯示第0位
                        P0=pcode[hour/10];
                        delay(200);
            LSA=1;LSB=0;LSC=0; //顯示第1位
                        P0=pcode[hour%10];
                        delay(200);
            LSA=0;LSB=1;LSC=0; //顯示第2位
                        P0=pcode[10];
                        delay(200);
                    LSA=1;LSB=1;LSC=0; //顯示第3位
                        P0=pcode[min/10];
                        delay(200);
                        LSA=0;LSB=0;LSC=1; //顯示第4位
                        P0=pcode[min%10];
                        delay(200);
                        LSA=1;LSB=0;LSC=1; //顯示第5位
                        P0=pcode[10];
                        delay(200);
                        LSA=0;LSB=1;LSC=1; //顯示第6位
                        P0=pcode[s/10];
                        delay(200);
                        LSA=1;LSB=1;LSC=1; //顯示第7位
                        P0=pcode[s%10];
                        delay(200);
}
void init()                 //定時器中斷初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
}
void main()
{  

   init();
   s=I2Cread(1);                                 //將讀取的第一個地址的數據賦值給秒
   min=I2Cread(2);                                 //將讀取的第二個地址的數據賦值給分
   hour=I2Cread(3);                                 //將讀取的第三個地址的數據賦值給時
   while(1)
   {
     if(s==60)
         {
           s=0;
           min++;
           if(min==60)
           {
                min=0;
                hour++;
                if(hour==24)
           {
             hour=0;
           }
           }
          
          
         }
         
         display();
         if(fa==1)                                                //中斷之后觸發fa置1
         {
          fa=0;                                                   //將fa清零
          I2Cwrite(1,s);                           //將秒寫入EEPROM第一個地址
          
         }                                                           
         if(da==1)                                           //同上
         {
          da=0;
          I2Cwrite(2,min);
          
         }
         if(ga==1)
         {
          ga=0;
          I2Cwrite(3,hour);
         }
         
   }


}

void Time_T0() interrupt 1                 //定時器中斷實現一秒周期
{
  uchar i;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;

  i++;
  if(i==20)
  {
   i=0;
   s++;
   fa=1;
   da=1;
   ga=1;
  }
}






作者: CY1994    時間: 2018-7-19 11:25
建議貼出i2c.h里面的文件,因為本文中并沒有見到I2Cread和I2Cwrite的函數,
作者: wonderfulxsj    時間: 2018-7-21 08:31
/*I2C頭文件*/
#include<I2C.h>

void delay10us(void)   //10us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
}
void start_singal()
{
          SDA=1;
        delay10us();
        SCL=1;
        delay10us();
        SDA=0;
        delay10us();
        SCL=0;
        delay10us();
}
void stop_singal()
{
          SDA=0;
        delay10us();
        SCL=1;
        delay10us();
        SDA=1;
        delay10us();
}

unsigned char send_byte(unsigned char dat) //發送字節數據(包括了應答)
{
  unsigned char i=0,b;
  for(i=0;i<8;i++)
  {
   SDA=dat>>7;
   dat<<=1;
   delay10us();
   SCL=1;
   delay10us();
   SCL=0;
   delay10us();
  }
  SDA=1;
  delay10us();
  SCL=1;
  while(SDA)
  {
    b++;
        if(b>200)
        {
         SCL=0;
         delay10us();
         return 0;
        }
  }
  SCL=0;
  delay10us();
  return 1;
}
unsigned char read_byte()
{
  unsigned char i=0,dat=0;
  SDA=1;
  delay10us();
  for(i=0;i<8;i++)
  {
    SCL=1;
        delay10us();
        dat=dat<<1;
        dat|=SDA;
        delay10us();
        SCL=0;
        delay10us();
  }
  return dat;


}

void I2Cwrite(unsigned char addr,unsigned char dat)
{
   start_singal();
   send_byte(0xa0);
   send_byte(addr);
   send_byte(dat);
   stop_singal();
}

unsigned char I2Cread(unsigned char addr)
{
   unsigned char num;
   start_singal();
   send_byte(0xa0);
   send_byte(addr);
   start_singal();
   send_byte(0xa1);
   num=read_byte();
   stop_singal();
   return num;
}




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲国产精品久久久久秋霞不卡 | 国产91亚洲精品一区二区三区 | 中文字幕av免费 | 国产成人精品免费视频大全最热 | 在线免费看91 | 亚洲色图50p | 黑人中文字幕一区二区三区 | 一区二区视频在线观看 | 欧美精品一区二区三区四区五区 | a在线视频 | 99re6在线视频精品免费 | 欧美大片一区 | 亚洲精品一区二区三区四区高清 | 久久天堂| 久久这里只有精品首页 | 亚洲欧美日韩精品久久亚洲区 | 日本一区二区视频 | 日韩中文字幕在线观看视频 | av在线一区二区 | 精品国产免费人成在线观看 | 精品久久久久久久久久 | 91精品一区 | 国产一区二区三区免费观看视频 | 国产精品免费一区二区 | 日韩欧美在线视频一区 | 亚洲精品九九 | 久久久久久久一区 | 福利视频一区二区三区 | 羞羞视频网站免费观看 | 午夜一区 | 免费在线观看91 | 欧美亚洲国产日韩 | 久久一日本道色综合久久 | 91国产在线播放 | 国内精品视频免费观看 | 91福利在线观看视频 | 色偷偷噜噜噜亚洲男人 | 9久久精品 | 99久久国产精 | 国产色片在线 | 欧美亚洲日本 |