音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

大家看看我的程序問題出在哪里

作者:feelfrank 欄目:MCU技術(shù)
大家看看我的程序問題出在哪里

我是一個(gè)初學(xué)者,最近公司要我用LPC931做了一個(gè)產(chǎn)品,在調(diào)試過程中我發(fā)現(xiàn)在讀EEPROM時(shí)出現(xiàn)比較大的問題,既讀不出來,也寫不進(jìn)去,我想硬件上是沒什么問題的,SDA、SCL的上拉電阻也有。如果不是用在專用I2C腳P1.2、P1.3上,同樣的程序改在普通的I/O口就能正常讀寫。請教大俠是怎么回事,使用時(shí)應(yīng)注意什么事項(xiàng),應(yīng)該怎么解決,先謝了。也可以給我發(fā)E-MAIL:feelfrank@163.com
應(yīng)該說是很簡單的程序如下:


#include <reg931.h>
#define  ERRORCOUNT 10
unsigned CHAR idata NUM[3];
void  Delay(unsigned CHAR DelayCount);
void          _nop_     (void);
bit   RW24XX(unsigned CHAR *DataBuff,unsigned CHAR ByteQuantity,unsigned int Address,
                     unsigned CHAR ControlByte);



main()
{
       P1M1=0x0C;            
       P1M2=0x0C;                           // 設(shè)為開漏
       .
       .
       .
     RW24XX(&NUM,3,0x00,0xa1);          //讀EEPROM
    while(1)
    {
     .
     .
     .
    
    }

}






bit   RW24XX(unsigned CHAR *DataBuff,unsigned CHAR ByteQuantity,unsigned int Address,
                     unsigned CHAR ControlByte)
{
void IICStart1(void);
void IICStop1(void);
bit  IICRecAck1(void);
void IICNoAck1(void);
void IICAck1(void);
unsigned CHAR IICReceiveByte1(void);
void IICSendByte1(unsigned CHAR sendbyte);
unsigned CHAR data j,i=ERRORCOUNT;
bit      errorflag=1;
while(i--)    //while_1
   {
   IICStart1();                       //啟動(dòng)
   IICSendByte1(ControlByte&0xFE);  //寫器件地址, 寫狀態(tài)
   if(IICRecAck1())                   //等應(yīng)答     CY=1則從while_1重新啟動(dòng),并重寫器件地址
       continue;
   IICSendByte1((unsigned CHAR)Address);    //寫存儲單元地址
   if(IICRecAck1())                   //等應(yīng)答     CY=1則從while_1重新啟動(dòng),并重寫器件地址
       continue;
   if(!(ControlByte&0x01))            //判斷讀寫
      {
      j=ByteQuantity;                     
      errorflag=0;                      //寫操作開始,errorflag清除
      while(j--)  //while_2
        {
        IICSendByte1(*DataBuff++);
        if(!IICRecAck1())           //等應(yīng)答     CY=0則轉(zhuǎn)到while_2開始,并繼續(xù)寫下一個(gè)數(shù)據(jù)
           continue;               //否則應(yīng)答出錯(cuò),重新置errorflag標(biāo)志,并退出寫數(shù)據(jù)
        errorflag=1;
        break;
        }
      if(errorflag==1)
        continue;
      break;
      }
   else
     {
     IICStart1();                 //啟動(dòng)
     IICSendByte1(ControlByte);     //寫器件地址,讀狀態(tài)
     if(IICRecAck1())             //等應(yīng)答     CY=1則從while_1重新啟動(dòng),并重寫器件地址
       continue;
     while(--ByteQuantity)
       {
       *DataBuff++=IICReceiveByte1();
       IICAck1();
       }
     *DataBuff=IICReceiveByte1(); //最后一字節(jié)      
     IICNoAck1();
     errorflag=0;                  ////讀操作完成,errorflag清除
     break;
     }
  }
IICStop1();
if(!(ControlByte&0x01))        //寫操作完成后延時(shí)
  {
  Delay(255);
  Delay(255);
  Delay(255);
  Delay(255);
  }
return(errorflag);
}


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

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

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

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

/*****************對IIC總線產(chǎn)生高電平***************/
void IICNoAck1(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
2樓: >>參與討論
zlgmcu
把您的客戶信息發(fā)給我,我就給您發(fā)一個(gè)現(xiàn)成的!
 
3樓: >>參與討論
feelfrank
周工
周工:
    您好,你指的客戶信息指的是哪些?如果要發(fā)給你應(yīng)發(fā)到哪里?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教大家?guī)讉(gè)術(shù)語
急用
強(qiáng)烈建議版主公開LPC900不用跳線ICP的方法。
請教LCD
請教zlg
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號