新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機的at24c02驅動程序

        51單片機的at24c02驅動程序

        作者: 時間:2016-12-01 來源:網絡 收藏
        /*************************************
        函數名:atstart
        函數功能:開始位
        參數:無
        返回:無
        備注:無
        *************************************/
        void atstart()
        {
         SDAat= 1;
         SCLat= 1;
         delayNOP();
         SDAat = 0;
         delayNOP();
         SCLat = 0;
        }
        /*************************************
        函數名:atstop
        函數功能:停止位
        參數:無
        返回:無
        備注:無
        *************************************/
        void atstop()
        {
         SDAat = 0;
         delayNOP();
         SCLat = 1;
         delayNOP();
         SDAat = 1;
        }
        /*************************************
        函數名:atack
        函數功能:應答
        參數:無
        返回:ackbit
        備注:無
        *************************************
        bit atack(void)
        {
         bit ackbit;
         SDAat = 1; // 讀取應答
         delayNOP();
         SCLat = 1;
         delayNOP();
         ackbit = SDAat;
         SCLat = 0;
         return ackbit;
        }
        /*************************************
        函數名:atmcu
        函數功能:從AT24C02移出數據到MCU
        參數:無
        返回:reatdata
        備注:無
        *************************************/
        uchar atmcu()
        {
         uchar i,reatdata;
         for(i = 0; i < 8; i++)
         {
           SCLat = 1;
           reatdata <<= 1;
           reatdata |= SDAat;
           SCLat = 0;
          }
          return(reatdata);
        }
        /*************************************
        函數名:mcuat
        函數功能: 從mcu移出數據到24c02
        參數:wratdata(數據)
        返回:ackbit(應答)
        備注:配合wratbyte使用
        *************************************/
        bit mcuat(uchar wratdata)
        {
         uchar i;
         bit ackbit;
         for(i = 0; i < 8; i++) // 循環移入8個位
         {
          SDAat = (bit)(wratdata & 0x80);
          _nop_();
          SCLat = 1;
           delayNOP();
          SCLat = 0;
          wratdata <<= 1;
         }
         ackbit=atack();
          return ackbit; // 返回AT24C02應答位
        }
        /*************************************
        函數名:wratbyte
        函數功能: 在指定地址addr處寫入數據write_data
        參數:addr wratdata
        返回:無
        備注:無
        *************************************/
        void wratbyte(uchar addr, uchar wratdata)
        {
         atstart();
         mcuat(atwrite);
         mcuat(addr);
         mcuat(wratdata);
         atstop();
         delayms(10); // 寫入周期
        }
        /*************************************
        函數名:fillbyte
        函數功能:填充數據fill_data到EEPROM內fill_size字節
        參數: fillsize(地址),filldata(數據)
        返回:無
        備注:無
        *************************************/
        void fillbyte(uchar fillsize,uchar filldata)
        {
         uchar i;
         for(i = 0; i < fillsize; i++)
         {
           wratbyte(i, filldata);
         }
        }
        /*************************************
        函數名:reatbyte
        函數功能:在當前地址讀取
        參數:無
        返回:reatdata(讀取的數據)
        備注:配合readrandom使用
        *************************************/
        uchar reatbyte()
        {
         uchar reatdata;
         atstart();
         mcuat(atread);
          reatdata = atmcu();
         atstop();
         return reatdata;
        }
        /*************************************
        函數名:readrandom
        函數功能:在指定地址讀取
        參數:random_addr(地址)
        返回:reatdata(讀取的數據)
        備注:無
        *************************************/
        uchar readrandom(uchar random_addr)
        {
         atstart();
         mcuat(atwrite);
         mcuat(random_addr);
         return(reatbyte());
        }
        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 松滋市| 元氏县| 贵南县| 商都县| 福泉市| 溧阳市| 丹棱县| 莱芜市| 乐山市| 宣汉县| 安达市| 宁阳县| 霍山县| 潜山县| 临汾市| 乌鲁木齐县| 陆良县| 津南区| 长顺县| 临朐县| 贵南县| 英山县| 南开区| 西乌| 东山县| 福海县| 福安市| 张家界市| 平遥县| 萍乡市| 北海市| 搜索| 渑池县| 基隆市| 南汇区| 罗源县| 武城县| 蒙山县| 怀化市| 永新县| 铁岭市|