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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7328|回復: 18
打印 上一主題 下一主題
收起左側

關于I2C與EEPROM地址的問題

  [復制鏈接]
跳轉到指定樓層
樓主
ID:538271 發(fā)表于 2019-6-23 21:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

圖一 為啥說地址為0x50   1010000  如果原型是0101 0000   那最后一位的讀寫位不就沒有了嗎
那如果有讀寫位  A0~A2都接地 應該 位 0xA0 啊
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:10193 發(fā)表于 2019-6-24 07:45 | 只看該作者
讀地址是0Xa0,寫地址是0xa1。
回復

使用道具 舉報

板凳
ID:401564 發(fā)表于 2019-6-24 08:22 | 只看該作者
圖片上說的是錯的,或者是說不嚴謹,
24C02的讀寫的地址是:0A0H和0A1H
回復

使用道具 舉報

地板
ID:538271 發(fā)表于 2019-6-24 10:49 | 只看該作者
Y_G_G 發(fā)表于 2019-6-24 08:22
圖片上說的是錯的,或者是說不嚴謹,
24C02的讀寫的地址是:0A0H和0A1H

0A0H是什么= =    不應該是0XA0  或者 0XA1嗎      關鍵這個人寫程序的時候  用了0X50 還尋到了
回復

使用道具 舉報

5#
ID:401564 發(fā)表于 2019-6-24 16:56 | 只看該作者
我說的是匯編上,你說是C里面,但編譯好像是通用的
他的程序應該是在寫入的時候是用到了位移了
你看一下輸入函數(shù)有沒有位移的語句
回復

使用道具 舉報

6#
ID:401564 發(fā)表于 2019-6-24 17:00 | 只看該作者
24C02是一個很常用的IIC器件,你隨便找一下24C02程序,大多都是0XA0  或者 0XA1的
回復

使用道具 舉報

7#
ID:538271 發(fā)表于 2019-6-24 21:50 | 只看該作者
Y_G_G 發(fā)表于 2019-6-24 17:00
24C02是一個很常用的IIC器件,你隨便找一下24C02程序,大多都是0XA0  或者 0XA1的

void E2Read(unsigned char *buf, unsigned char addr, unsigned char len)
{
    do {                       //用尋址操作查詢當前是否可進行讀寫操作
        I2CStart();
        if (I2CWrite(0x50<<1)) //應答則跳出循環(huán),非應答則進行下一次查詢
        {
            break;
        }
        I2CStop();
    } while(1);
    I2CWrite(addr);            //寫入起始地址
    I2CStart();                //發(fā)送重復啟動信號
    I2CWrite((0x50<<1)|0x01);  //尋址器件,后續(xù)為讀操作
有左移的  但是我看不懂什么意思  
回復

使用道具 舉報

8#
ID:483407 發(fā)表于 2019-6-24 21:59 | 只看該作者
0xa0或0xa1,前7位為24C02的器件地址(前4位固定為1010,后3位取決于A2、A1、A0三個引腳在電路中的連接),后1位為讀寫方向。
此圖中,把24C02的地址描述為0x50,沒毛病。讀寫位加到后面,0x50要左移1位,就成了0xa0或0xa1。
至于0x50和0x62,是尋到的什么器件,沒圖,天知道。不過可以確定,決對不是本圖中的24C02。
回復

使用道具 舉報

9#
ID:418269 發(fā)表于 2019-6-25 11:05 | 只看該作者
zzh985514474 發(fā)表于 2019-6-24 10:49
0A0H是什么= =    不應該是0XA0  或者 0XA1嗎      關鍵這個人寫程序的時候  用了0X50 還尋到了

0x50是24c02地址沒錯,但需要在讀寫操作時<<1,讀地址(0x50<<1),寫地址 (0x50<<1|0x01)
回復

使用道具 舉報

10#
ID:401564 發(fā)表于 2019-6-25 11:28 | 只看該作者
zzh985514474 發(fā)表于 2019-6-24 21:50
void E2Read(unsigned char *buf, unsigned char addr, unsigned char len)
{
    do {                ...

我就說他有位移的語句了,沒見過這么扯的
本來讀寫24C02就已經(jīng)要用位移了,生怕位移多了數(shù)據(jù)可能會對不上號,他可好,生拉硬扯的搞個0X50這玩意出來
回復

使用道具 舉報

11#
ID:538271 發(fā)表于 2019-6-25 11:55 | 只看該作者
wangwing 發(fā)表于 2019-6-24 21:59
0xa0或0xa1,前7位為24C02的器件地址(前4位固定為1010,后3位取決于A2、A1、A0三個引腳在電路中的連接), ...

我有完整的程序  但有點長 您介意我單獨私聊你不
回復

使用道具 舉報

12#
ID:538271 發(fā)表于 2019-6-25 15:47 | 只看該作者
Y_G_G 發(fā)表于 2019-6-25 11:28
我就說他有位移的語句了,沒見過這么扯的
本來讀寫24C02就已經(jīng)要用位移了,生怕位移多了數(shù)據(jù)可能會對不 ...

unsigned char I2cSendByte(unsigned char dat)
{
        unsigned char a=0,b=0;//最大255,一個機器周期為1us,最大延時255us。               
        for(a=0;a<8;a++)//要發(fā)送8位,從最高位開始
        {
                SDA=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號
                dat=dat<<1;
                Delay10us();
                SCL=1;
                Delay10us();//建立時間>4.7us
                SCL=0;
                Delay10us();//時間大于4us               
        }

unsigned char I2cReadByte()
        unsigned char a=0,dat=0;
        SDA=1;                        //起始和發(fā)送一個字節(jié)之后SCL都是0
        Delay10us();
        for(a=0;a<8;a++)//接收8個字節(jié)
        {
                SCL=1;
                Delay10us();
                dat<<=1;
                dat|=SDA;
                Delay10us();
                SCL=0;
                Delay10us();


請問這發(fā)送的過程是不是 主機發(fā)送DAT這個數(shù)據(jù) 然后通過SDA的數(shù)據(jù)線給到從機,那這時不用像讀取函數(shù)那樣先給SDA=1嗎?
讀取函數(shù)這個的過程 是不是從機通SDA給到主機數(shù)據(jù)DATA 那這一步dat<<=1; dat|=SDA;什么意思 將data 0000 0000  變?yōu)?111 1111 ?,
回復

使用道具 舉報

13#
ID:160500 發(fā)表于 2019-6-25 17:08 | 只看該作者
地址0x50是沒錯,你說的那個0xA0、0xA1是加上了讀寫位的。不是一回事
回復

使用道具 舉報

14#
ID:401564 發(fā)表于 2019-6-25 17:24 | 只看該作者
dat是一個變量,實際上就是一個地址,而SDA是一個位
l是按位或的運算,而不是或運算
按位或運算只會改變相對應該的位,其它位不變的
如果dat=0000 0000,SDA=1,按位或運算之后就是dat=0000 0001
回復

使用道具 舉報

15#
ID:571958 發(fā)表于 2019-6-25 18:52 | 只看該作者
                 SDA=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號 ,這是發(fā)送給slave的。

  那這一步dat<<=1; dat|=SDA  ,這樣一般是 數(shù)據(jù)左一位,SDA上狀態(tài)讀入 dat bit0
  這樣做八次剛好得到1 byte數(shù)據(jù)
回復

使用道具 舉報

16#
ID:18297 發(fā)表于 2019-6-25 20:11 | 只看該作者
這個只是一個認識上的問題。
其實很簡單,1)有人把0xa0(讀)和0Xa1(寫)當作地址,直接發(fā)送這兩個。
                  2)例外有人把0X50當成地址,但是發(fā)送前先左移一位,(0x50<<1+0)=0xa0(讀)
                      (0x50<<1+1)=0xa1(寫),再發(fā)送給EEPROM。
                  看吧,結果都是一樣的。
                 只是程序寫得不同而已。自己明白就好。到底你給發(fā)送的是什么?
                 如果你不移位,只發(fā)送0x50,就錯了。
回復

使用道具 舉報

17#
ID:483407 發(fā)表于 2019-6-25 20:51 | 只看該作者
我的理解:沒有主機,沒有從機。這2個函數(shù),從其名字上來理解,前者功能是向某總線上發(fā)送一個字節(jié),后者為從總線上讀一個字節(jié),如此而已(多好的程序呀,向這段代碼的作者致敬)。
建議:如果你要用這個函數(shù),放到自己的程序中能夠實現(xiàn)功能,這就夠了,不必深究;如果你是學習,就想把這段代碼搞明白,那么你要做的有2個,一是把時序整明白,二是。。。。。。。(dat<<=1; dat|=SDA;//dat前移一位,讀總線,把結果放在dat的最后一位)
回復

使用道具 舉報

18#
ID:307020 發(fā)表于 2019-6-26 00:18 | 只看該作者
按DataSheet,讀為0xA1,寫為0xA0;理由是R/W

QQ截圖20190626001007.png (78.84 KB, 下載次數(shù): 56)

QQ截圖20190626001007.png
回復

使用道具 舉報

19#
ID:907706 發(fā)表于 2023-7-18 11:45 | 只看該作者
認真的去看這些文字,他講的是24C01的 地址是7位 其中高4位是固定的1010(A2 A1 A0) 我們需要補R/W位(是讀寫位),補0和補1是你自己決定的  補完后就是 1010 0000
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕综合 | 一区二区在线观看av | 国产成人久久精品一区二区三区 | 日本三级全黄三级a | 成人欧美一区二区三区在线播放 | 亚洲欧美一区二区在线观看 | 成人在线视频网 | 亚洲色综合| 国产乱码精品1区2区3区 | 国产区在线 | 国产美女自拍视频 | 久久久久国产精品一区二区 | 精品国产一区二区国模嫣然 | 国产高清视频一区 | 午夜视频在线观看网站 | 中文成人在线 | 精品在线免费看 | 久久国产精品免费视频 | 亚洲v日韩v综合v精品v | 国外成人在线视频 | 久久免费国产 | 黄网在线观看 | 国产精品视频一 | 久久亚洲一区二区三区四区 | 国产一区二区三区久久久久久久久 | 国内自拍视频在线观看 | 男女一区二区三区 | 国产精品片 | 欧美一级大片免费看 | 欧美一区二区三区的 | 午夜寂寞影院列表 | 亚洲精品视频免费观看 | 国产精品视频中文字幕 | 欧美a免费| 国产日韩欧美 | 亚洲免费观看视频网站 | 久久久www成人免费精品 | 亚洲情综合五月天 | 欧美激情视频一区二区三区在线播放 | 日美女逼逼 | www.99热|