xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 532KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-12
  • 語言: 其他
  • 標(biāo)簽: AT24C08??I2C??驅(qū)動??

資源簡介

EEPROM是一種掉電后數(shù)據(jù)不丟失的存儲器,常用來存儲一些配置信息,以便系統(tǒng)重新上電的時候加載之。EEPROM芯片最常用的通訊方式是IIC協(xié)議。此代碼為AT24C08的I2C驅(qū)動程序,其他型號可按照規(guī)格書自行擴(kuò)展

資源截圖

代碼片段和文件信息

#include?“AT24C08.h“

static?void?I2C_START(){
??IIC_SDA_H;
??IIC_SCL_H;
??halMcuWaitUs(5);
??IIC_SDA_L;
??halMcuWaitUs(4);
??IIC_SCL_L;
}

static?void?I2C_STOP(){
??IIC_SDA_L;
??halMcuWaitUs(2);
??IIC_SCL_H;
??halMcuWaitUs(4);
??IIC_SDA_H;
??halMcuWaitUs(5); //到下一次開始的總線最短空閑時間4.7us
}

//低電平應(yīng)答,返回1表示無應(yīng)答
static?uint8?I2C_WaitAck(void)
{
????IIC_SDA_H;
????IIC_SCL_H;
????halMcuWaitUs(5);
????if(IIC_SDA_VALUE)
????????return?1;
????IIC_SCL_L;
????halMcuWaitUs(5);
????return?0;
}

static?void?I2C_SendAck(void)
{
????IIC_SCL_L;
????IIC_SDA_L;
????halMcuWaitUs(5);
????IIC_SCL_H;
????halMcuWaitUs(4);
????IIC_SCL_L;
}

static?void?I2C_SendNoAck(void)
{
????IIC_SCL_L;
????IIC_SDA_H;
????halMcuWaitUs(5);
????IIC_SCL_H;
????halMcuWaitUs(4);
????IIC_SCL_L;
}


void?I2C_WRITE(uint8?byte){
????uint8?Cnt;
????IIC_SDA_OUT;
????IIC_SCL_L;
????halMcuWaitUs(1);
????for(Cnt=0;Cnt<8;Cnt++)
????{
????????if(byte&0x80)
????????{
????????????IIC_SDA_H;
????????}
????????else
????????{
????????????IIC_SDA_L;
????????}
????????byte<<=1;
????????halMcuWaitUs(5);
????????IIC_SCL_H;
????????halMcuWaitUs(5);
????????IIC_SCL_L;
????}
}

uint8?I2C_READ(){
????uint8?CntByte=0;
????IIC_SDA_H;
????IIC_SDA_IN;
????halMcuWaitUs(2);
????for(Cnt=0;Cnt<8;Cnt++)
????{
????????Byte<<=1;
????????IIC_SCL_H;
????????halMcuWaitUs(5);
????????if(IIC_SDA_VALUE)
????????????Byte++;
????????IIC_SCL_L;
????????halMcuWaitUs(5);
????}
????IIC_SDA_OUT;
????return?Byte;
}







//寫單個字節(jié)(設(shè)備地址+寄存器地址+單字節(jié)數(shù)據(jù)+停止位)數(shù)據(jù)地址為0-0xff每個地址存儲一個8位字節(jié)
//at24c08設(shè)備地址第二三位表示存儲陣列地址08總共有1k字節(jié),共有四個區(qū)域,每個存儲區(qū)域256字節(jié),所以area-->?00?01?10?11
uint8?writeOneByte(uint8?Reguint8?RegValuint8?area)
{
????I2C_START();
????I2C_WRITE(IIC_WRITE_ADDR|(area<<1));
????if(I2C_WaitAck())
????????return?1;
????I2C_WRITE(Reg);
????if(I2C_WaitAck())
????????return?1;
????I2C_WRITE(RegVal);
????if(I2C_WaitAck())
????????return?1;
????I2C_STOP();
????return?0;
}?


//讀單個字節(jié),讀取完成后主機(jī)不需要應(yīng)答,只需要停止信號
//Reg?要讀的寄存器的地址
//RegVal?讀出來的數(shù)據(jù)保存的地址
//0?成功??1失敗
uint8?readOneByte(uint8?Reguint8?*RegValuint8?area)
{
????I2C_START();
????I2C_WRITE(IIC_WRITE_ADDR|(area<<1));
????if(I2C_WaitAck())
????????return?1;
????
????I2C_WRITE(Reg);
????if(I2C_WaitAck())
????????return?1;
????
????I2C_START();
????I2C_WRITE(IIC_READ_ADDR|(area<<1));
????if(I2C_WaitAck())
????????return?1;
????*RegVal=I2C_READ();
????I2C_SendNoAck();
????I2C_STOP();
????return?0;
}




//連續(xù)寫多個字節(jié)(寫地址自動累加,最大16字節(jié),多的將會覆蓋之前的數(shù)據(jù))
//設(shè)備地址+寄存器地址+多字節(jié)數(shù)據(jù)+停止位
uint8?writeMutipleDatas(uint8?Reguint8*?RegValuint8?countuint8?area){
uint8?i?=?0;
????if(count>16)
????????return?1;
I2C_START();
????I2C_WRITE(IIC_WRITE_ADDR|(area<<1));
????if(I2C_WaitAck())
????????return?1;
????I2C_WRITE(Reg);
????if(I2C_WaitAck())
????????return?1;
for(;i I2C_WRITE(RegVal[i]);
if(I2C_WaitAck())return?1;
}
I2C_STOP();
????return?0;
}




//連續(xù)讀多個

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????667886??2018-11-15?18:30??AT24系列E2PROM\AT24c02中文官方資料手冊pdf.pdf

?????文件???????4538??2018-11-21?14:47??AT24系列E2PROM\AT24C08.c

?????文件???????1060??2018-11-16?08:50??AT24系列E2PROM\AT24C08.h

?????目錄??????????0??2018-11-26?17:57??AT24系列E2PROM

-----------?---------??----------?-----??----

???????????????673484????????????????????4


評論

共有 條評論

相關(guān)資源