日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
24C01--24C256共9種EEPROM的字節(jié)讀寫操作程序
24C01--24C256共9種EEPROM的字節(jié)讀寫操作程序
 更新時(shí)間:2009-7-9 16:54:59  點(diǎn)擊數(shù):0
【字體: 字體顏色

一個(gè)通用的24C01-24C256共9種EEPROM的字節(jié)讀寫操作程序,
此程序有五個(gè)入口條件,分別為讀寫數(shù)據(jù)緩沖區(qū)指針,
進(jìn)行讀寫的字節(jié)數(shù),EEPROM首址,EEPROM控制字節(jié),
以及EEPROM類型。此程序結(jié)構(gòu)性良好,具有極好的容錯(cuò)性,程序機(jī)器碼也不多:

#pragma  ot(6,SIZE)
#include
#include
#define  ERRORCOUNT 10
sbit     SDA="P0"^0;
sbit     SCL="P0"^1;
enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
enum  eepromtype EepromType;

//DataBuff為讀寫數(shù)據(jù)輸入/輸出緩沖區(qū)的首址
//ByteQuantity 為要讀寫數(shù)據(jù)的字節(jié)數(shù)量
//Address 為EEPROM的片內(nèi)地址
//ControlByte 為EEPROM的控制字節(jié),具體形式為(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W="1",
//表示讀操作,R/W="0"為寫操作,A2,A1,A0為EEPROM的頁選或片選地址;
//EepromType為枚舉變量,需為M2401至M24256中的一種,分別對(duì)應(yīng)24C01至24C256;
//函數(shù)返回值為一個(gè)位變量,若返回1表示此次操作失效,0表示操作成功;
//ERRORCOUNT為允許最大次數(shù),若出現(xiàn)ERRORCOUNT次操作失效后,則函數(shù)中止操作,并返回1
//SDA和SCL由用戶自定義,這里暫定義為P0^0和P0^1;
//其余的用戶不用管,只要把只子程序放在你的程序中并調(diào)用它就可以了;

/***********************************************************************************/
bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
                     unsigned char ControlByte,enum eepromtype EepromType)
{
void Delay(unsigned char DelayCount);
void IICStart(void);
void IICStop(void);
bit  IICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
unsigned char data j,i="ERRORCOUNT";
bit      errorflag="1";
while(i--)
   {
   IICStart();
   IICSendByte(ControlByte&0xfe);
   if(IICRecAck())
       continue;
   if(EepromType>M2416)
      {
      IICSendByte((unsigned char)(Address>>8));
      if(IICRecAck())
         continue;
      }
   IICSendByte((unsigned char)Address);
   if(IICRecAck())
       continue;
   if(!(ControlByte&0x01))
      {
      j="ByteQuantity";
      errorflag="0";                      //********clr errorflag
      while(j--)
        {
        IICSendByte(*DataBuff++);
        if(!IICRecAck())
           continue;
        errorflag="1";
        break;
        }
      if(errorflag==1)
        continue;
      break;
      }
   else
     {
     IICStart();
     IICSendByte(ControlByte);
     if(IICRecAck())
       continue;
     while(--ByteQuantity)
       {
       *DataBuff++=IICReceiveByte();
       IICAck();
       }
     *DataBuff="IICReceiveByte"();        //read last byte data
     IICNoAck();
     errorflag="0";
     break;
     }
  }
IICStop();
if(!(ControlByte&0x01))
  {
  Delay(255);
  Delay(255);
  Delay(255);
  Delay(255);
  }
return(errorflag);
}

/*****************以下是對(duì)IIC總線的操作子程序***/
/*****************啟動(dòng)總線**********************/
void IICStart(void)
{
SCL="0";                  //
SDA="1";
SCL="1";
_nop_();
_nop_();
_nop_();
SDA="0";
_nop_();
_nop_();
_nop_();
_nop_();
SCL="0";
SDA="1";                  //
}

/*****************停止IIC總線****************/
void IICStop(void)
{
SCL="0";
SDA="0";
SCL="1";
_nop_();
_nop_();
_nop_();
SDA="1";
_nop_();
_nop_();
_nop_();
SCL="0";
}

/**************檢查應(yīng)答位*******************/
bit IICRecAck(void)
{
SCL="0";
SDA="1";
SCL="1";
_nop_();
_nop_();
_nop_();
_nop_();
CY="SDA";                 //因?yàn)榉祷刂悼偸欠旁贑Y中的
SCL="0";
return(CY);
}

/***************對(duì)IIC總線產(chǎn)生應(yīng)答*******************/
void IICACK(void)
{
SDA="0";
SCL="1";
_nop_();
_nop_();
_nop_();
_nop_();
SCL="0";
_nop_();
SDA="1";
}

/*****************不對(duì)IIC總線產(chǎn)生應(yīng)答***************/
void IICNoAck(void)
{
SDA="1";
SCL="1";
_nop_();
_nop_();
_nop_();
_nop_();
SCL="0";
}

/*******************向IIC總線寫數(shù)據(jù)*********************/
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j="8";
for(;j>0;j--)
   {
   SCL="0";
   sendbyte<<=1;        //無論C51怎樣實(shí)現(xiàn)這個(gè)操作,始終會(huì)使CY="sendbyte"^7;
   SDA="CY";
   SCL="1";
   }
SCL="0";
}

/**********************從IIC總線上讀數(shù)據(jù)子程序**********/
unsigned char IICReceiveByte(void)
{
register receivebyte,i="8";
SCL="0";
while(i--)
   {
   SCL="1";
   receivebyte=(receivebyte<<1)|SDA;
   SCL="0";
   }
return(receivebyte);
}

/***************一個(gè)簡(jiǎn)單延時(shí)程序************************/
void Delay(unsigned char DelayCount)
{
while(DelayCount--);
}

  • 上一篇: DS1302C51源代碼
  • 下一篇: 基于PCF8583RTC的C51程序
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1