單片機(jī)模擬I2C總線及24C02讀寫(xiě)實(shí)例(c源代碼),24C02 read / write process
關(guān)鍵字:單片機(jī)模擬I2C總線及24C02讀寫(xiě)實(shí)例(c源代碼)
單片機(jī)模擬I2C總線及24C02(I2C EEPROM)讀寫(xiě)實(shí)例(c源代碼)
/* 51系列單片機(jī)在使用時(shí),有時(shí)需要模擬I2C總線, */
/* 這里舉出一個(gè)實(shí)例(讀寫(xiě)串行EEPROM芯片at2402) */
/* 這里舉出一個(gè)實(shí)例(讀寫(xiě)串行EEPROM芯片at2402) */
/************************************************************************/
/* Name:AT24C02存儲(chǔ)器的讀寫(xiě)程序,用到I2C總線,含相對(duì)獨(dú)立的I2C總線讀寫(xiě)函數(shù) */
/* Language: C51單片機(jī)編程語(yǔ)言 */
/* Platform: Win98,Intel Celeron 433 Processor,偉福仿真器,仿真8751 */
/* Author: StephenZhu javasdk@163.com */
/* Date: 2003年5月21日,5月22日,5月29日 */
/* Version: 1.1.1 */
/* Others: None */
/************************************************************************/
#include
#include
#include
#define DELAY_TIME 60 /*經(jīng)實(shí)驗(yàn),不要小于50!否則可能造成時(shí)序混亂*/
#define TRUE 1
#define FALSE 0
sbit SCL=P1^7;/*假設(shè)由P1.7和P1.6控制*/
sbit SDA=P1^6;
/********** Function Definition函數(shù)定義 ************/
void DELAY(unsigned int t) /*延時(shí)函數(shù)*/
{
while(t!=0)
t--;
}
void I2C_Start(void)
{
/*啟動(dòng)I2C總線的函數(shù),當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)負(fù)跳變*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);
SDA=0;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
void I2C_Stop(void)
{
/*終止I2C總線,當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)正跳變*/
SDA=0;
SCL=1;
DELAY(DELAY_TIME);
SDA=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
void SEND_0(void) /* SEND ACK */
{
/*發(fā)送0,在SCL為高電平時(shí)使SDA信號(hào)為低*/
SDA=0;
SCL=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
void SEND_1(void)
{
/*發(fā)送1,在SCL為高電平時(shí)使SDA信號(hào)為高*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
bit Check_AcknowLEDge(void)
{
/*發(fā)送完一個(gè)字節(jié)后檢驗(yàn)設(shè)備的應(yīng)答信號(hào)*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME/2);
F0=SDA;
DELAY(DELAY_TIME/2);
SCL=0;
DELAY(DELAY_TIME);
if(F0==1)
return FALSE;
return TRUE;
}
void WriteI2CByte(char b)reentrant
{
/*向I2C總線寫(xiě)一個(gè)字節(jié)*/
char i;
for(i=0;i<8;i++)
if((b< SEND_1();
else
SEND_0();
}
char ReadI2CByte(void)reentrant
{
/*從I2C總線讀一個(gè)字節(jié)*/
char b=0,i;
for(i=0;i<8;i++)
{
SDA=1; /*釋放總線*/
SCL=1; /*接受數(shù)據(jù)*/
DELAY(10);
F0=SDA;
DELAY(10);
SCL=0;
if(F0==1)
{
b=b<<1;
b=b|0x01;
}
else
b=b<<1;
}
return b;
}
/**********以下為讀寫(xiě)24c02的函數(shù)**********/見(jiàn)下一頁(yè)面
下一頁(yè)
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
基于FPGA的I2C控制模塊設(shè)計(jì)
I2C_WRITE_WDATA.v模塊實(shí)現(xiàn)I2C寫(xiě)時(shí)序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
CW32單片機(jī)I2C接口來(lái)讀寫(xiě)EEPROM芯片
u8State = 0;
uint8_t receivedflag = 0; //讀取完成標(biāo)志
6.主程序:利用I2C接口,采用中斷方式讀寫(xiě)EEPROM芯片(CW24C02)。
int32_t main
發(fā)表于 12-09 07:43
Onsemi N24C02/04/08/16:高性能I2C EEPROM的卓越之選
在電子設(shè)計(jì)領(lǐng)域,EEPROM是一種至關(guān)重要的存儲(chǔ)元件,而Onsemi的N24C02、N24C04、N24C08和N24C16系列I2
芯伯樂(lè)24C02/24C04/24CXX:百萬(wàn)次擦寫(xiě)非易失性存儲(chǔ)器的解決方案
的首選方案。無(wú)論是消費(fèi)電子、工業(yè)控制還是物聯(lián)網(wǎng)設(shè)備,都能見(jiàn)到它的身影。一產(chǎn)品概述24C02/24C04/24Cxx系列是基于IIC總線協(xié)議的串行電可擦除存儲(chǔ)器(E
深入剖析I2C協(xié)議
I2C是由Philips開(kāi)發(fā)的簡(jiǎn)單的雙向兩線總線,在深入淺出理解SPI協(xié)議中,我們區(qū)分了單工,半雙工,全雙工協(xié)議數(shù)據(jù)流向的區(qū)別,根據(jù)特征,I2C協(xié)議屬于半雙工協(xié)議(即同一時(shí)刻,數(shù)據(jù)單向流動(dòng))。此外
【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】I2C 讀寫(xiě)EEPROM (三)
(\"\\\\r\\\\n\");
}
}
printf(\"I2C(AT24C02) Read and write test successful\\\\r
發(fā)表于 08-05 22:25
【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】I2C 讀寫(xiě)EEPROM (二)
;);
}
}
printf(\"I2C(AT24C02) Read and write test successful\\\\r\\\\n\");
}
4.2 實(shí)驗(yàn)現(xiàn)象
發(fā)表于 08-05 22:13
【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】I2C 讀寫(xiě)EEPROM (一)
/16監(jiān)視總線并當(dāng)其地址與發(fā)送的從地址相符時(shí)響應(yīng)一個(gè)應(yīng)答信號(hào)(通過(guò)SDA線)。AT24C01/02/04/08/16再根據(jù)讀寫(xiě)控制位(R/W)的狀態(tài)進(jìn)行讀或?qū)懖僮鳌?
Figure
發(fā)表于 08-05 22:09
單片機(jī)實(shí)例項(xiàng)目:AT24C02EEPROM存儲(chǔ)器
單片機(jī)實(shí)例項(xiàng)目:AT24C02EEPROM存儲(chǔ)器,推薦下載!
發(fā)表于 06-03 20:50
【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】I2C讀取EEPROM(二)
就行。
值得注意的是,這里的從機(jī)地址是7位,代碼中自動(dòng)左移了。
然后讓軟件自動(dòng)生成配置代碼即可。
6.2 基于I2C的EEPROM讀寫(xiě)實(shí)現(xiàn)
發(fā)表于 04-28 23:14
【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】I2C讀取EEPROM(一)
的存儲(chǔ)器,常用來(lái)存儲(chǔ)一些配置信息,以便系統(tǒng)重新上電的時(shí)候加載。 EEPROM 芯片最常用的通訊方式就是 I2C 協(xié)議,本文將要講解EEPROM的讀寫(xiě)操作。
4.1 AT24Cxx概述
AT24
發(fā)表于 04-28 23:13
基于APM32F407如何制作I2C EEPROM(AT24C02型號(hào))的MDK-Keil下載算法
基于APM32F407如何制作I2C EEPROM(AT24C02型號(hào))的Keil下載算法,這樣在我們下載代碼時(shí)可以一鍵把數(shù)據(jù)燒錄到EEPROM中。
單片機(jī)學(xué)習(xí)—C51源代碼和Proteus仿真文件
單片機(jī)學(xué)習(xí)—C51源代碼和Proteus仿真文件.zip, 有各種例子
發(fā)表于 02-10 13:46
?3次下載
I2C總線通信原理 如何設(shè)計(jì)I2C總線電路
I2C總線通信原理 I2C(Inter-Integrated Circuit)總線是一種用于集成電路之間進(jìn)行通信的串行通信協(xié)議。它最早由飛利浦公司(現(xiàn)被恩智浦電子收購(gòu))于1982年推出
單片機(jī)模擬I2C總線及24C02讀寫(xiě)實(shí)例(c源代碼),24C02 read / write process
評(píng)論