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

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | 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

請(qǐng)教有關(guān)24C02的問題!

作者:jshong 欄目:單片機(jī)
請(qǐng)教有關(guān)24C02的問題!
我寫了個(gè)24C02的讀寫程序,測(cè)試時(shí)發(fā)現(xiàn)對(duì)有些24C02芯片能夠正確讀寫,但有些卻不能正確讀寫.個(gè)位高手幫我看看是不是程序的讀寫時(shí)序有問題.謝謝!
下面是我的程序.
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>

typedef unsigned CHAR uCHAR;
typedef unsigned int  uint;

sbit SDA  = P1^0;                     /* iic數(shù)據(jù)傳送位 */
sbit SCL  = P1^1;                     /* iic時(shí)鐘控制位 */

sbit P1_4 = P1^4;
sbit P1_3 = P1^3;
sbit P1_5 = P1^5;
/* 函數(shù)聲明 */
void iic_wait(void);                  /* iic延時(shí)       */
void iic_start(void);                 /* 開啟iic總線   */
void iic_stop(void);                  /* 關(guān)閉iic總線   */
void iic_ack(void);                   /* 發(fā)送ACK信號(hào)   */
void iic_no_ack(void);                /* 發(fā)送NOACK信號(hào) */
bit iic_wait_ack(void);               /* 等待ACK信號(hào)   */
void iic_send_byte(uCHAR demand);     /* MCU向iic設(shè)備發(fā)送一個(gè)字節(jié) */
uCHAR iic_receive_byte(void);         /* MCU從iic設(shè)備接收一個(gè)字節(jié) */
/* 聲明結(jié)束 */
void delay_1s(void)
{
  uCHAR i;
  uCHAR j;

  for(i=0;i<100;i++)
  for(j=0;j<100;j++);
}
/* iic延時(shí)       */
void iic_wait(void)
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
}
/* 開啟iic總線   */
void iic_start(void)
{
  SDA = 1;
  SCL = 1;
  iic_wait();
  SDA = 0;
  iic_wait();
  SCL = 0;
}
/* 關(guān)閉iic總線   */
void iic_stop(void)
{
  SDA=0;
  SCL=0;
  iic_wait();
  SCL=1;
  iic_wait();
  SDA=1;
}
/* 發(fā)送ACK信號(hào)   */
void iic_ack(void)
{
  SDA=0;
  iic_wait();
  SCL=1;
  iic_wait();
  SCL=0;
}
/* 發(fā)送NOACK信號(hào) */
void iic_no_ack(void)
{
  SDA=1;
  iic_wait();
  SCL=1;
  iic_wait();
  SCL=0;
}
/********************************************************************
函 數(shù) 名:iic_wait_ack   
功    能:等待ACK信號(hào)
說    明:
入口參數(shù):
返 回 值:1-ACK         0-ERROR         
***********************************************************************/
bit iic_wait_ack(void)
{
  uCHAR errtime=255;
  //uint errtime = 1000;

  SDA=1;
  iic_wait();
  SCL=1;
  iic_wait();

  while(SDA)
  {
    errtime--;
    if(!errtime)
    return 0;
  }
  SCL=0;
  return 1;
}
/********************************************************************
函 數(shù) 名:iic_send_byte   
功    能:MCU向iic設(shè)備發(fā)送一個(gè)字節(jié)
說    明:
入口參數(shù):sbyte                  待發(fā)送的字節(jié)數(shù)據(jù)
返 回 值:         
***********************************************************************/
void iic_send_byte(uCHAR sbyte)
{
  uCHAR i = 8;

  while(i--)
  {
    SCL = 0;
    _nop_();
    SDA = (bit)(sbyte&0x80);
    sbyte <<= 1;
    iic_wait();
    SCL = 1;
    iic_wait();
  }
SCL=0;
}
/********************************************************************
函 數(shù) 名:iic_receive_byte  
功    能:MCU從iic設(shè)備接收一個(gè)字節(jié)
說    明:
入口參數(shù):
返 回 值:ddata   接收數(shù)據(jù)       
***********************************************************************/
uCHAR iic_receive_byte(void)
{
  uCHAR i=8;
  uCHAR ddata=0;

  SDA=1;
  while(i--)
  {
    ddata <<= 1;
    SCL=0;
    iic_wait();
    SCL=1;
    iic_wait();
    ddata |= SDA;
  }
  SCL=0;
  return ddata;
}
/********************************************************************
函 數(shù) 名:write_iic_data
功    能:向iic設(shè)備寫入N個(gè)字節(jié)
說    明:
入口參數(shù):write_data              存放寫入字節(jié)的數(shù)組
          address                 指定從address處開始寫入
          num                     寫入的字節(jié)數(shù)  
返 回 值:無       
***********************************************************************/
void write_iic_data(uCHAR write_data[], uCHAR address, uCHAR num)
{
  uCHAR n;

  iic_start();
  iic_send_byte(0xa0);
  iic_wait_ack();
  iic_send_byte(address);
  iic_wait_ack();
    
  for(n=0; n<num; n++)
  {
    iic_send_byte(write_data[n]);
    iic_wait_ack();
  }
  iic_stop();
}
/********************************************************************
函 數(shù) 名:read_iic_data
功    能:從iic設(shè)備讀取N個(gè)字節(jié)
說    明:
入口參數(shù):read_data               存放讀取字節(jié)的數(shù)組
          address                 指定從address處開始讀取
          num                     讀取的字節(jié)數(shù)
返 回 值:無       
***********************************************************************/<
2樓: >>參與討論
程序人生
網(wǎng)上有很多標(biāo)準(zhǔn)程序下,自己對(duì)照下看
 
3樓: >>參與討論
huangqi412
呵呵,去看下我的帖子
 
4樓: >>參與討論
sxl_72
延時(shí)長(zhǎng)一點(diǎn)試試
 
5樓: >>參與討論
DSP99
I2C的模擬程序包很多啊~~
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)教大家,USB轉(zhuǎn)并口問題~!
請(qǐng)推薦一大RAM大flash的與51完全兼容的單片機(jī),40DIP的,急
偉福v8s仿真器用C51編成出現(xiàn)"印象文件未找到"怎么解決
8253有升級(jí)芯片么?
看看哪些型號(hào)的單片機(jī)符合下面要求:
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)