日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]剛剛調(diào)好了個(gè)24c256的操作,自己在程序里搞了個(gè)連續(xù)讀寫的函數(shù)!很煩那頁寫跨頁的問題,所以干脆做了個(gè)通用點(diǎn)的函數(shù),小于3字節(jié)的寫就用隨機(jī)寫,大于3字節(jié)的就用頁寫!共享拉! 真正供其他操作調(diào)用的函數(shù)是: uncha

剛剛調(diào)好了個(gè)24c256的操作,自己在程序里搞了個(gè)連續(xù)讀寫的函數(shù)!很煩那頁寫跨頁的問題,所以干脆做了個(gè)通用點(diǎn)的函數(shù),小于3字節(jié)的寫就用隨機(jī)寫,大于3字節(jié)的就用頁寫!共享拉!
真正供其他操作調(diào)用的函數(shù)是:
uncharSeqWriteTo24c256(uncharsla_add,unintaddr_op,uncharwrite_size,unchar*write_buf);
uncharSeqReadFrom24c256(uncharsla_add,unintaddr_op,uncharread_size,unchar*read_buf);
其他的都是本文件內(nèi)自己調(diào)用的函數(shù)!!

//*****************************************************調(diào)試函數(shù)
voidDebugEepromService(void)
{
unchardebug_buf[255];
debug_buf[0]=0x91;
debug_buf[1]=0x92;
debug_buf[2]=0x93;
debug_buf[3]=0x94;
debug_buf[4]=0x95;
debug_buf[250]=0x05;
debug_buf[251]=0x06;
debug_buf[252]=0x07;
debug_buf[253]=0x08;
debug_buf[254]=0x09;
SeqWriteTo24c256(EEP1_ADDR,1,255,debug_buf);
SeqReadFrom24c256(EEP1_ADDR,1,255,debug_buf);
}
//*************************************************************



#defineIIC_SDA_PB0x20
#defineIIC_SCL_PB0x80
#defineIIC_DEL_WAIT0x10//>4.7us(12.80us)forFre=11.0592M
#defineIIC_DEL_WRITE0x2700//>6ms(7266.54us=7.266ms)forFre=11.0592M

#defineEEP1_ADDR0xa4
#definePAGE_CAP_BYTE64//24C256頁寫容量:64字節(jié)


/*
功能函數(shù)文件
2005-9-229:54byxth
版本:v1.0
--------------------------------------------
Mcu:avrmega32Frequency:11.0592M
--------------------------------------------
功能概述:Eeprom操作文件
--------------------------------------------
*/
//=============================函數(shù)聲明
//----------IIC操作調(diào)用函數(shù)
voidIicDelayService(unintdelay_time);
voidIicStartBitSend(void);
voidIicStopBitSend(void);
voidIicAckService(uncharack_data);
uncharIicSendByteService(unchartx_data);
uncharIicAccByteService(void);
//----------At24c256操作函數(shù)
uncharRandWriteByteTo24c256(uncharsla_add,unintaddr_op,unchardata_op);
uncharWritePageTo24c256(uncharsla_add,unintaddr_op,unchar*write_data_buf);
uncharSeqWriteTo24c256ByPage(uncharsla_add,unintaddr_op,uncharwrite_size,unchar*write_buf);
uncharSeqWriteTo24c256(uncharsla_add,unintaddr_op,uncharwrite_size,unchar*write_buf);
uncharSeqReadFrom24c256(uncharsla_add,unintaddr_op,uncharread_size,unchar*read_buf);
//=============================函數(shù)定義
voidIicDelayService(unintdelay_count)
{
unintcount;
for(count=0;countasm("NOP");
}

voidIicStartBitSend(void)
{
PORTB|=IIC_SCL_PB;//發(fā)送起始條件的時(shí)鐘信號(hào)
asm("NOP");
PORTB|=IIC_SDA_PB;//起始條件建立時(shí)間大于4.7us,延時(shí)
IicDelayService(IIC_DEL_WAIT);
PORTB&=~IIC_SDA_PB;
IicDelayService(IIC_DEL_WAIT);
PORTB&=~IIC_SCL_PB;//鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
asm("NOP");
}

voidIicStopBitSend(void)
{
PORTB&=~IIC_SDA_PB;//發(fā)送結(jié)束條件的時(shí)鐘信號(hào)
IicDelayService(IIC_DEL_WAIT);
PORTB|=IIC_SCL_PB;//結(jié)束條件建立時(shí)間大于4μs
IicDelayService(IIC_DEL_WAIT);
PORTB|=IIC_SDA_PB;
asm("NOP");
}

voidIicAckService(uncharack_data)
{//作為主控器件應(yīng)答->發(fā)應(yīng)答或非應(yīng)答信號(hào)
if(ack_data==0)PORTB&=~IIC_SDA_PB;
elsePORTB|=IIC_SDA_PB;
IicDelayService(IIC_DEL_WAIT);
PORTB|=IIC_SCL_PB;
IicDelayService(IIC_DEL_WAIT);
PORTB&=~IIC_SCL_PB;//清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收
asm("NOP");
}

uncharIicSendByteService(unchartx_data)
{//將字節(jié)發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答并返回
uncharbit_count,ack_flag;
for(bit_count=0;bit_count<8;bit_count++)
{
if((tx_data<PORTB|=IIC_SDA_PB;
else
PORTB&=~IIC_SDA_PB;
IicDelayService(IIC_DEL_WAIT);
PORTB|=IIC_SCL_PB;//置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位
IicDelayService(IIC_DEL_WAIT);//保證時(shí)鐘高電平周期大于4μs
PORTB&=~IIC_SCL_PB;
}
IicDelayService(IIC_DEL_WAIT);
PORTB&=~IIC_SDA_PB;
DDRB&=~IIC_SDA_PB;//SDA置成輸入
asm("NOP");
PORTB|=IIC_SCL_PB;
IicDelayService(IIC_DEL_WAIT);
IicDelayService(IIC_DEL_WAIT);
if(PINB&IIC_SDA_PB)//判斷是否接收到應(yīng)答信號(hào)
ack_flag=NO;
else
ack_flag=YES;//有應(yīng)答信號(hào)
DDRB|=IIC_SDA_PB;
PORTB&=~IIC_SCL_PB;
asm("NOP");
return(ack_flag);
}

uncharIicAccByteService(void)
{//接收從器件傳來的數(shù)據(jù),并判斷總線錯(cuò)誤
uncharbit_count,get_data;
DDRB&=~IIC_SDA_PB;
get_data=0;
for(bit_count=0;bit_count<8;bit_count++)
{
asm("NOP");
PORTB&=~IIC_SCL_PB;//置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位
IicDelayService(IIC_DEL_WAIT);//時(shí)鐘低電平周期大于4.7μs;
PORTB|=IIC_SCL_PB;//置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效
get_data<<=1;
if(PINB&IIC_SDA_PB)
get_data++;
asm("NOP");
asm("NOP");
}
PORTB&=~IIC_SCL_PB;
DDRB|=IIC_SDA_PB;
asm("NOP");
return(get_data);
}

uncharRandWriteByteTo24c256(uncharsla_add,unintaddr_op,unchardata_op)
{
uncharresult_now,temp_data;
IicStartBitSend();//起始條件
temp_data=sla_add;//從器件地址
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=addr_op>>8;//操作單元地址高8位
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=addr_op;//操作單元地址低8位
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=data_op;//操作數(shù)據(jù)
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
IicStopBitSend();//停止條件
IicDelayService(IIC_DEL_WRITE);
result_now=YES;
return(result_now);
}

uncharSeqReadFrom24c256(uncharsla_add,unintaddr_op,uncharread_size,unchar*read_buf)
{//addr“rollover”duringread:fromlastbyteofthelastpage,tothefirstbyteofthefirstpage
uncharresult_now,temp_data,read_count;
IicStartBitSend();//起始條件
temp_data=sla_add;//從器件地址
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=addr_op>>8;//操作單元地址高8位
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=addr_op;//操作單元地址低8位
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
IicStartBitSend();
temp_data=sla_add+1;//讀操作
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
for(read_count=0;read_count{//連續(xù)讀數(shù)據(jù)
*(read_buf+read_count)=IicAccByteService();
IicAckService(NO);
}
*(read_buf+read_count)=IicAccByteService();
IicAckService(YES);
IicStopBitSend();
result_now=YES;
return(result_now);
}

uncharWritePageTo24c256(uncharsla_add,unintaddr_op,unchar*write_data_buf)
{//頁寫
uncharcount,result_now,temp_data;
IicStartBitSend();//起始條件
temp_data=sla_add;//從器件地址
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=addr_op>>8;//操作單元地址高8位
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
temp_data=addr_op;//操作單元地址低8位
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
for(count=0;count{//連續(xù)寫
temp_data=*(write_data_buf+count);
result_now=IicSendByteService(temp_data);
if(result_now==NO)return(result_now);
}
IicStopBitSend();//停止條件
IicDelayService(IIC_DEL_WRITE);
result_now=YES;
return(result_now);
}

uncharSeqWriteTo24c256ByPage(uncharsla_add,unintaddr_op,uncharwrite_size,unchar*write_buf)
{//addr“rollover”duringwrite:fromlastbyteofthecurrentpagetofirstbyteofthesamepage.
unintpage_write,read_addr,temp_op_int;
unchardata_count,result_out,modify_count,count,write_data_buf[PAGE_CAP_BYTE];
result_out=YES;
data_count=0;
while(write_size>0)
{
page_write=addr_op/PAGE_CAP_BYTE;//得到當(dāng)前頁
read_addr=page_write*PAGE_CAP_BYTE;
SeqReadFrom24c256(sla_add,read_addr,PAGE_CAP_BYTE,write_data_buf);
temp_op_int=addr_op&(PAGE_CAP_BYTE-1);//得到在頁內(nèi)的起始字節(jié)地址
if(temp_op_int+write_size>=PAGE_CAP_BYTE)
{
modify_count=PAGE_CAP_BYTE;
addr_op=(page_write+1)*PAGE_CAP_BYTE;//寫下一頁的起始地址
}
else
modify_count=write_size;
count=temp_op_int;
write_size=write_size-modify_count+count;//寫下一頁的數(shù)據(jù)量
for(;countwrite_data_buf[count]=*(write_buf+data_count);
result_out=WritePageTo24c256(sla_add,read_addr,write_data_buf);
}
return(result_out);
}

uncharSeqWriteTo24c256(uncharsla_add,unintaddr_op,uncharwrite_size,unchar*write_buf)
{//連續(xù)寫(非頁寫)
uncharwrite_result;
if(write_size<3)
{//如果要寫入的數(shù)據(jù)小于3個(gè),則用隨機(jī)寫實(shí)現(xiàn)
write_result=RandWriteByteTo24c256(sla_add,addr_op,*write_buf);
write_result=RandWriteByteTo24c256(sla_add,addr_op+1,*(write_buf+1));
}
else
write_result=SeqWriteTo24c256ByPage(sla_add,addr_op,write_size,write_buf);
return(write_result);
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

Sept. 8, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季NVIDIA(英偉達(dá)) Blackwell平臺(tái)規(guī)?;鲐?,以及北美CSP業(yè)者持續(xù)擴(kuò)大布局General Server(通用型...

關(guān)鍵字: SSD DDR4 服務(wù)器

Sept. 4, 2025 ---- Apple(蘋果)即將發(fā)布iPhone 17、iPhone 17 Air(暫名)、iPhone 17 Pro及Pro Max四款旗艦新機(jī),除了外觀辨識(shí)度升級(jí),處理器性能、散熱和拍攝功...

關(guān)鍵字: iPhone 16 A19處理器 折疊機(jī)

Sept. 3, 2025 ---- 根據(jù)TrendForce集邦咨詢最新發(fā)布的《2025近眼顯示市場(chǎng)趨勢(shì)與技術(shù)分析》報(bào)告,2025年隨著國際品牌陸續(xù)推出AR眼鏡原型,以及Meta預(yù)計(jì)在近期發(fā)布AR眼鏡Celeste,市...

關(guān)鍵字: AR眼鏡 OLED

Sept. 2, 2025 ---- TrendForce集邦咨詢表示,2025年第二季DRAM產(chǎn)業(yè)因一般型DRAM (Conventional DRAM)合約價(jià)上漲、出貨量顯著增長,加上HBM出貨規(guī)模擴(kuò)張,整體營收為3...

關(guān)鍵字: DRAM 智能手機(jī) ASP

Sept. 1, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季因中國市場(chǎng)消費(fèi)補(bǔ)貼引發(fā)的提前備貨效應(yīng),以及下半年智能手機(jī)、筆電/PC、Server新品所需帶動(dòng),整體晶圓代工產(chǎn)能利用率與出貨...

關(guān)鍵字: 晶圓代工 智能手機(jī) 筆電

Aug. 28, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季NAND Flash產(chǎn)業(yè)雖面臨平均銷售價(jià)格(ASP)小幅下滑,所幸原廠減產(chǎn)策略緩解供需失衡,疊加中、美兩大市場(chǎng)政策推動(dòng),整體...

關(guān)鍵字: NAND Flash SSD AI

Aug. 26, 2025 ---- NVIDIA(英偉達(dá))近日推出的Jetson Thor被視為機(jī)器人的物理智慧核心,以Blackwell GPU、128 GB記憶體堆疊出2070 FP4 TFLOPS AI算力,是前...

關(guān)鍵字: 機(jī)器人 大型語言模型 AI算力

Aug. 21, 2025 ---- 根據(jù)TrendForce集邦咨詢最新液冷產(chǎn)業(yè)研究,隨著NVIDIA GB200 NVL72機(jī)柜式服務(wù)器于2025年放量出貨,云端業(yè)者加速升級(jí)AI數(shù)據(jù)中心架構(gòu),促使液冷技術(shù)從早期試點(diǎn)邁...

關(guān)鍵字: AI 數(shù)據(jù)中心 服務(wù)器

除了充電電路外,鋰電池的放電過程也需要保護(hù)。鋰電池的放電電壓不能低于3.0V,否則電池壽命會(huì)大幅縮短。為了實(shí)現(xiàn)這一保護(hù),工程師們?cè)O(shè)計(jì)了DW01芯片與8205 MOS管的電路組合。DW01芯片能夠監(jiān)控鋰電池的放電電壓和電流...

關(guān)鍵字: 鋰電池 電池

在PCB設(shè)計(jì)的宏偉藍(lán)圖中,布局與布線規(guī)則猶如精密樂章中的指揮棒,是鑄就電路板卓越性能、堅(jiān)不可摧的可靠性及經(jīng)濟(jì)高效的制造成本的靈魂所在。恰如一位巧手的園藝師,合理的布局藝術(shù)性地編排著每一寸空間,既削減了布線交織的繁復(fù)迷宮,...

關(guān)鍵字: PCB 電路板
關(guān)閉