資源簡(jiǎn)介
proteus_24C08—有注釋?zhuān)╬roteus里面使用的是24c02)(注釋比較全面,適合初學(xué)者)
代碼片段和文件信息
/**************************************************************************************
*使用24C08的時(shí)候,只要使用下面這兩個(gè)函數(shù)即可
*uchar?read_e2p(uint?address):在24c02中的某地址讀取一個(gè)字節(jié)
*void?write_e2p(uchar?chuint?address):在24c02的某地址寫(xiě)入一字節(jié)ch
******************************************************************************************/
#include?
#include?
/***定義數(shù)據(jù)類(lèi)型*****/
#define?uchar?unsigned?char?
#define?uint??unsigned?int
#define?ulong?unsigned?long
#define?delay5NOP()?{_nop_();_nop_();_nop_();_nop_();_nop_();}
/*********由于使用的是24C08,所以有四個(gè)地址****/
#define WriteDeviceAddress?0xa0 //定義器件在IIC總線中的地址
#define WriteDeviceAddress1?0xa2
#define ReadDviceAddress?0xa1
#define ReadDviceAddress1?0xa3
/*******定義管腳******/
sbit?SCL=P2^0;//24C08的管腳6連接的連線
sbit?SDA=P2^1;//24C08的管腳5連接的連線
sbit?BUTTON=P1^0;
/***定時(shí)函數(shù)***/
void?DelayMs(uint?number)?
{
uchar?temp;
for(;number!=0;number--)?
{
for(temp=112;temp!=0;temp--);
}
}
/**************
*IIC總線的開(kāi)始位
*****************/
void?Start()?
{
SDA=1;
delay5NOP();
SCL=1;
delay5NOP();
SDA=0;//在SCL高電位的時(shí)候,數(shù)據(jù)線由高變低
delay5NOP();
SCL=0;
}
/*****************
*IIC總線的結(jié)束位
****************/
void?Stop()?
{
SCL=0;
delay5NOP();
SDA=0;
delay5NOP();
SCL=1;//在SCL高電位的時(shí)候,數(shù)據(jù)線由低變高
delay5NOP();
SDA=1;
}
/**************
*測(cè)試位:用于檢查24C08這個(gè)器件有沒(méi)有收到數(shù)據(jù)
**************/
bit?TestAck()?
{
bit?ErrorBit;
SDA=1;
delay5NOP();
SCL=1;//SDA和SCL同時(shí)拉高,看看SDA會(huì)不會(huì)被24C08給拉低了
delay5NOP();
ErrorBit=SDA;
SCL=0;
return(ErrorBit);//如果這時(shí)的ErrorBit是低電位的時(shí)候,說(shuō)明是正確的
}
/********************
*這個(gè)函數(shù)和TestAck()?是一樣的,只是TestAck()?有錯(cuò)誤返回
*********************/
void?NoAck()?
{
SDA=1;
delay5NOP();
SCL=1;
delay5NOP();
SCL=0;
}
/********************
*傳輸8個(gè)數(shù)據(jù)到24C08上面去
******************/
Write8Bit(uchar?input)?
{
uchar?temp;
for(temp=8;temp!=0;temp--)?
{
SDA=(?bit?)(?input&0x80?);//這里采用強(qiáng)制轉(zhuǎn)換的方式,數(shù)據(jù)被強(qiáng)制轉(zhuǎn)換成bit的形式
//8位數(shù)據(jù)被強(qiáng)制轉(zhuǎn)化成bit后,只保留最高位
SCL=1;
delay5NOP();
SCL=0;//數(shù)據(jù)準(zhǔn)備好后,在SCL的下降沿讀入數(shù)據(jù)
input=input<<1;//繼續(xù)分解這個(gè)8位數(shù)
}
}
/*********************
*指定一個(gè)地址,對(duì)這個(gè)地址寫(xiě)入一個(gè)數(shù)
**********************/
void?write_e2p(uchar?chuint?address)?
{
Start();
if(address<256)
{
Write8Bit(WriteDeviceAddress);//24C08器件的地址,可以理解為24C08的一個(gè)block
TestAck();
Write8Bit(address);//寫(xiě)入這個(gè)block具體的地址
TestAck();
}
else
{
Write8Bit(WriteDeviceAddress1);
TestAck();
Write8Bit(address-256);
TestAck();
}
Write8Bit(ch);//對(duì)這個(gè)地址寫(xiě)入一個(gè)數(shù)據(jù)
TestAck();
Stop();
DelayMs(10);//這個(gè)延時(shí)是為了防止兩次調(diào)用write_e2p的間隔太短,而導(dǎo)致數(shù)據(jù)重疊
}
/******************************
*從24C08讀出8個(gè)bit的數(shù)據(jù)
***************************/
uchar?Read8Bit()?
{
uchar?tempread_byte=0;
for(temp=8;temp!=0;temp--)?
{
SCL=1;
read_byte?<<=?1;
read_byte?|=?SDA;//對(duì)位進(jìn)行強(qiáng)制轉(zhuǎn)換成uchar后,高位全為零,只有最低位才是“這個(gè)bit”
SCL=0;
}
return(?read_byte?);
}
/**************************
*指定一個(gè)地址,并從這個(gè)地址里面讀出一個(gè)數(shù),返回這個(gè)數(shù)
************************/
uchar?read_e2p(uint?address)?
{
uchar?ch;
Start();
if(address<256)
{
Write8Bit(Write
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件????????517??2010-04-11?11:44??24C08\24c08.plg
?????文件???????4088??2010-04-11?11:43??24C08\main.c
?????文件?????????26??2010-04-11?11:43??24C08\24c08.lnp
?????文件??????10377??2010-04-11?11:43??24C08\24c08.M51
?????文件???????1035??2010-04-11?11:43??24C08\24c08.hex
????.......?????????0??2010-04-11?10:11??24C08\24c08_Uv2.Bak
?????文件???????2158??2010-04-11?11:43??24C08\24c08.Uv2
?????文件???????1261??2010-04-11?11:43??24C08\24c08.Opt
?????文件?????110390??2010-04-11?10:45??24C08\Last?Loaded?24C08.DBK
?????文件?????114420??2010-04-11?11:43??24C08\24C08.DSN
?????文件???????1507??2010-04-11?11:44??24C08\24C08.PWI
?????文件???????8823??2010-04-11?11:43??24C08\main.LST
?????文件???????9237??2010-04-11?11:43??24C08\main.OBJ
?????文件???????8413??2010-04-11?11:43??24C08\24c08
?????目錄??????????0??2010-04-10?21:31??24C08
-----------?---------??----------?-----??----
???????????????272252????????????????????15
評(píng)論
共有 條評(píng)論