導航:首頁 > 編程語言 > 24c512c程序

24c512c程序

發布時間:2021-10-25 20:13:08

❶ 24c512一次最大寫入的長度是多少個位元組

此晶元的一頁(page)為8位元組,就是啟動一次寫操作後,可以連續寫8個位元組,如果你一次性寫10個,每個都重新啟動寫操作當然沒問題。

❷ 讀取24c512,讀不到數據怎麼回事

那就是程序可能有問題,檢查I2C設備地址寫對了沒,還有用來存儲數據的變數有沒有寫錯,列印出來看看長度之類的

❸ 24m01rp和24c512能替換嗎

24+5 的是支持轉接VGA的,24+1是不能轉接的;但如果是1000系列的產品用DVI 是沒有辦法轉接的,需要用到DP帶主動式的晶元才可以轉接成VGA的

❹ 關於單片機串口通訊:上位機發送數據到下位機,單片機保存數據到24c512;

那沒辦法,只有查詢等待了,上位機一次發送一段數據,單片機接收到後寫入24c512,寫完後才返回一個應答信號給上位機。而上位機只有收到這信號後才發送下一段數據。

❺ AT24CXX的讀寫方式是否相同,例如24C02的控制方法來控制24C512

讀寫方式是相同的,區別在於24C02這樣的小咪咪,通訊時只需要傳遞1位元組的地址就夠了;而24C256這樣的肥婆就需要傳遞2位元組的地址了(高位在前)。

網路嫌我字數不夠

❻ FM24c512和FM24C64的驅動程序一樣嗎

不一樣的。。

❼ 用51單片機做一個模擬I2c的實驗,E2PROM用的是at24c512b,但是程序始終有問題,求高手幫助,謝謝

/*----------------------------------------------------------------------------------------------------------
IIC匯流排讀寫EEPROM(串列擴展eeprom,24c02)
(STC12C系列單片機自帶eeprom,且有另外的eeprom操作方式)
作者:Allen.H(幫同學修改的一個程序)
時間:2010.11.5
----------------------------------------------------------------------------------------------------------*/
#include <reg52.h>
#include <intrins.h>//是用括弧還是雙引號看情況,本地頭文件用雙引號,系統頭文件用括弧
//這里使用了_nop_()函數,所以調用此頭文件
#define TRUE 1/*define宏定義一般用大寫,宏定義並不會減少最終代碼空間
define多行語句時,每一行末尾寫上\,最後一行可以不寫,
有時比較短的語句寫成一個子函數會犧牲更多的時間,
因為函數調用耗時比較多,這個時候用一個define語句更好*/
#define FALSE 0

typedef unsigned char uchar;//良好的程序風格,不應該用#define
//#define uchar unsigned char
sbit sda=P2^0; //---------你把sda和scl引腳可能定反了,我換過來了-------------------------------
sbit scl=P2^1;//等號對其,變數名長短不一時,注意,且測試等於號"=="或者其他雙目關系運算符兩邊都空一格
//-----------------------------------------------------------------
void delay(uchar z)//帶參數很好
{//大括弧所在行不要寫代碼
uchar i,j;//局部變數中用來自加自減可以用i,j之類的定義,計數建議不要用i,j
//局部變數不佔內存,函數調用時生成堆棧,不應該定義局部變數時作初始化
//----局部變數命名後空一格,寫正式代碼
for(i=z;i>0;i--)
for(j=100;j>0;j--);//註明多少時間,在調試模式下,看窗口左邊的SEC值
}
//函數與函數之間空一格
void delay_7nop()//子程序命名最好顧名思義,比如delay_1ms(),這里考慮都是使用7nop,不帶參數
{/*程序代碼每進一層邏輯就縮進一格TAB鍵,TAB設置為3,4格,
在keil的view->options裡面設置,不要使用幾個空格來縮進,統一使用TAB鍵*/
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();//這里0-1000多個_nop_都可以
}
//delay函數都放在一起,函數順序不要亂放,相關的放一起,
//--------------------------------------------------------------------
void init()
{
sda=1;
delay_7nop();
scl=1;
delay_7nop();
}

//---SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;
//SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。
//但更具體還是得看時序圖,下面就沒有都先把scl先拉高再去變sda
void start()
{
sda=1;
delay_7nop(); //這里sda和第三行的scl信號哪個放上沒什麼區別,主要起始和停止信號風格保持一致就行了
scl=1;
delay_7nop();
sda=0;
delay_7nop();
//scl=0; //允許數據變化,傳數據的時候拉低才允許數據變化,
//但是在開始信號和停止信號scl都為高,這里看時序圖就知道了
}

void stop()
{
sda=0;
delay_7nop();
scl=1;
delay_7nop();
sda=1;
delay_7nop();
}

bit ask()//應答信號,return是什麼類型這里函數就是什麼類型,
{ //每一個被傳送的位元組後面都必須跟隨一位應答位(即一幀共有9位)
//如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據
bit flag;//真假判斷,或只有0/1取值的標志位設置為bit
sda=1;
scl=1;
delay_7nop();
flag=sda;
delay_7nop();
scl=0;
delay_7nop();
if(flag==1)
return FALSE;//非應答
else
return TRUE;//應答

}

//用下面屏蔽的的應答信號也可以,上面的應答信號考慮更周全
/*
void ask() //應答
{
uchar i;
scl=1;
delay_7nop();
while((sda==1)&&(i<250))i++;
scl=0;
delay_7nop();
}
*/
//----------------------------------------------------
void writedata(uchar dat)//下面是readdata()和readadd()保持程序風格的一致性,命名不該命為writecurrent
{//函數參數不要亂用P,q之類的毫無意義的名字,這里用dat,date是關鍵字,不能用
uchar i;
// scl=0;//此句可有可無
for(i=0;i<8;i++)//按位寫
{
dat=dat<<1;//左移一位
scl=0;
delay_7nop();
sda=CY;//psw位中的CY進位標識位,左移後最高位移入CY
delay_7nop();
scl=1;//scl高電平,數據穩定
delay_7nop();
}

scl=0;
delay_7nop();
sda=1;//匯流排釋放
delay_7nop();

}

void writeadd(uchar add,uchar infor)
{
start();
writedata(0xa0);//器件地址
ask();
writedata(add);//器件內部存儲區的地址
ask();
writedata(infor);//數據
ask();
stop();

}
//----------------------------------------------------
uchar readdata()
{
uchar i,dat;
scl=0;
delay_7nop();
sda=1;//數據匯流排釋放
delay_7nop();
for(i=0;i<8;i++)
{
scl=1;
delay_7nop();
dat=(dat<<1)|(uchar)sda;//此處的強制類型轉換表現思維考慮到了
//dat左移一位,最低位為0,此時與sda按位或運算就把sda數據讀到了最低位
scl=0;
delay_7nop();
}
//密切相關的代碼緊接著寫,不很相關的空一格再寫
return dat;
}

uchar readadd(uchar add)
{
uchar r=0;//局部變數小寫,全局變數首字母大寫

start();
writedata(0xa0);
ask();
writedata(add);
ask();
start();
writedata(0xa1);
ask();
r=readdata();
stop();

return r;

}
//-------------------------------------------------------
void main()
{
while(1)//在keil的調試模擬窗口(Perpherals->I/O-ports->)看不出P2口的變換,
//因為這里是外部EEPROM,要模擬晶元或者硬體的支持才能觀察結果,本程序測試無誤
{
init();//這里初始化一下

writeadd(25,0xaa);
delay(50);//此處最少要delay(7);
P1=readadd(25);//P1還是P2還是P3主要是看你的硬體用哪個來測試
}
}
//主函數放最後是省去了函數申明,但在工程應用中建議放在最上面
//這樣一眼就能看到該工程是做什麼的,且功能函數本身就應該在頭文件中作申明
//以便其他點C文件能方便調用,每寫一個功能函數都在頭文件中作申明,這是一個好習慣
//方便其他點C文件隨時調用
//-------------------------------------------------------

//總結:
// 1.你的程序最初可能把scl和sda可能定反了,
// 2.你沒寫ask函數(屏蔽了),應答信號必須寫,
// 3.你的代碼風格,變數名命名,函數名命名,函數排放順序,無注釋,
// 書寫排版有很大問題,看你的程序很吃力,且不美觀
// 4.能用子函數代替的就寫成子函數,用那麼多nop看上去代碼真丑
// 5.有關讀寫的4個函數你函數名命名風格沒統一

//建議:
// 1.看時序圖的能力和對IIC匯流排的理解有待加強
// 2.要慢慢形成規范的代碼風格
// 3.keil軟體對你還有很大學習空間,要學慣用更多的keil調試和用protus模擬

//相關提示:
// 1.要學些使用下列對內存和存儲的理解:

// code :程序存儲區(64KB)

// data :可直接定址的內部數據存儲區(128B) 默認的變數存儲區

// idata:不可直接定址的內部數據存儲區(256B) 當全局變數定義太多的時候
// 使用,比如:idata int 或int idata來使用這個區域存儲全局變數

// bdata:可位定址內部數據存儲區(16B)

// xdata:外部數據存儲區(64KB)當使用來了外部RAM時,應用它,keil中options for target 的memory mode可選

// pdata:分頁的外部數據存儲區

這是一個可以用的,和你的有點區別,而且注釋得很全,希望能對你有所幫助

❽ 高分求教,24C512如何清除其內部已存儲的全部內容。 單片機

我沒試驗過全部清除,只是直接寫數據把原來的覆蓋掉。

閱讀全文

與24c512c程序相關的資料

熱點內容
妹妹和姐姐電影 瀏覽:999
linux串口後台運行 瀏覽:113
維語紅色電影 瀏覽:213
錢勝成都大數據 瀏覽:786
主角穿越多個現實位面的小說 瀏覽:578
java查詢access資料庫 瀏覽:438
一顆種子長上天的電影 瀏覽:846
手機壓縮文件圖標和別人發的不同 瀏覽:226
徹底刪除cad2016殘留文件 瀏覽:255
大數據時代語文教學設計 瀏覽:277
530電影電視劇在線免費觀看 瀏覽:869
好看的愛情台灣電影有哪些 瀏覽:834
智慧門工具 瀏覽:665
姜恩惠善良的愛 瀏覽:20
免費在線觀看網站網址 瀏覽:565
鋼琴女老師韓國 瀏覽:858
文件保存路徑能修改嘛 瀏覽:518
wds有哪些文件 瀏覽:77
linux進bios重做系統 瀏覽:811
清華電子計算機網路 瀏覽:453

友情鏈接