資源簡介
IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動IIC驅(qū)動

代碼片段和文件信息
/*-------------------------------------------------
AT24C02.H
系統(tǒng)存儲驅(qū)動源文件
--------------------------------------------------*/
#include?“AT24C02.h“
//-----------------------------------------------------------------------
//?主機向IIC總線寫一字節(jié)
//-----------------------------------------------------------------------
bit?IIC_WriteByte(CHAR8U?dat)
{
CHAR8U?i;
for(i?=?0;?i?!=?8;?i++) //8個時鐘脈沖
{
NOP4();?dat?<<=?1;?AT24C02_SDA?=?CY; //高位優(yōu)先輸出
NOP4();?AT24C02_SCL?=?1;?NOP4();?AT24C02_SCL?=?0; //串行時鐘脈沖輸出
}
IIC_Rd_Ack(); //主機讀從機應答
return?F0; //返回從機應答狀態(tài)
}
//-----------------------------------------------------------------------
//?主機從II總線讀一字節(jié)
//-----------------------------------------------------------------------
CHAR8U?IIC_ReadByte()
{
CHAR8U?idat?=?0x00;?AT24C02_SDA?=?1; //置數(shù)據(jù)線為輸入
for(i?=?0;?i?!=?8;?i++) //8個時鐘周期循環(huán)
{
AT24C02_SCL?=?1;?NOP4(); //時鐘線置高電平
dat?=?(dat?<1)?|?AT24C02_SDA;?NOP4(); //主機讀取1位
AT24C02_SCL?=?0;?NOP4(); //時鐘線置低電平
}
return?dat; //返回讀取的字節(jié)
}
//-----------------------------------------------------------------
//?向任意指定的地址寫入一字節(jié)數(shù)據(jù)
//?器件地址碼字節(jié)格式(其中E2E1E0為片選位)
//?位?B7?B6?B5?B4?B3?B2?B1?B0
//?值??1??0??1??0?E2?E1?E0?RW
//-----------------------------------------------------------------
void?AT24C02_RandomWrite(CHAR8U?Dev_AddrINT16U?mem_addrCHAR8U?dat)
{
IIC_Start(); //總線啟動
IIC_WriteByte(Dev_Addr); //器件地址Dev_Addr
IIC_WriteByte(mem_addr); //內(nèi)存地址mem_addr
IIC_WriteByte(dat); //寫數(shù)據(jù)字節(jié)
IIC_Stop(); //總線停止
DELAY_ms(5); //延時
}
//-----------------------------------------------------------------
//?從任意指定的地址讀取一字節(jié)數(shù)據(jù)
//-----------------------------------------------------------------
CHAR8U?AT24C02_RandomRead(CHAR8U?Dev_AddrINT16U?mem_addr)
{
CHAR8U?dat?=?0x00;
IIC_Start(); //總線啟動
IIC_WriteByte(Dev_Addr?|?0x00); //器件地址Dev_Addr
IIC_WriteByte(mem_addr); //內(nèi)存地址mem_addr
IIC_Start(); //總線再次啟動(準備變換數(shù)據(jù)方向)
IIC_WriteByte(Dev_Addr?|?0x01); //器件地址Dev_Addr
dat?=?IIC_ReadByte(); //主機讀取一字節(jié)
IIC_NAck(); //主機發(fā)送非應答位
IIC_Stop(); //總線停止
return?dat; //返回讀取的字節(jié)
}
//-----------------------------------------------------------------
//?從指定地址開始連續(xù)順序?qū)慛B數(shù)據(jù)
//-----------------------------------------------------------------
void?AT24C02_SequentialWrite(CHAR8U?Dev_AddrINT16U?mem_addrINT16U?N)
{
INT16U?i;
IIC_Start(); //總線啟動
IIC_WriteByte(Dev_Addr?|?0x00); //器件地址Dev_Addr
IIC_WriteByte(mem_addr); //內(nèi)存地址mem_addr
for(?i?=?0;?i?!=?N?-?1;?i++) //主機循環(huán)寫入N-1B并顯示(主機輸出從機讀取)
{
IIC_WriteByte(TimingDateTime[i]); //寫數(shù)據(jù)字節(jié); //TimingDateTime?定時時間
}
IIC_WriteByte(TimingDateTime[i]); //寫數(shù)據(jù)字節(jié)
IIC_Stop(); //總線停止
DELAY_ms(5); //延時
}
//-----------------------------------------------------------------
//?從指定地址開始連續(xù)順序讀取N
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4308??2016-04-20?18:33??IIC2.0\AT24C02.H.bak
?????文件????????4067??2016-04-20?19:11??IIC2.0\AT24C02.c
?????文件????????3040??2016-04-20?18:32??IIC2.0\AT24C02.c.bak
?????文件????????4364??2016-04-20?19:11??IIC2.0\AT24C02.h
?????目錄???????????0??2016-10-27?19:16??IIC2.0\
- 上一篇:測繪作業(yè)擴展工具CAD2008
- 下一篇:中國流域分割矢量圖層
評論
共有 條評論