資源簡介
本程序通過51單片機的普通IO口,模擬IIC的總線時序,并且通過IIC總線向24C02的EEPROM寫入數獨,并且讀出EEPROM的數據。

代碼片段和文件信息
#include“reg51.h“
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?SCK=P2^0;?????//時鐘總線
sbit?SDA=P2^1;????//數據總線
sbit?WP=P2^2; //寫保護
void?delay(uchar?a)
{
while(a--);
} //延時
void?delay1(uint?a)
{
while(a--);
} //延時
void?start()
{
?SCK=1;
?SDA=1;
?delay(5);??
?SDA=0; //在SCK?為高電平時,數據總線來一個下降沿,開始通信信號
}
void?stop()
{
??? ?SDA=0;
?SCK=0;
?SCK=1;
?SDA=1; //在SCK?為高電平時,數據總線來一個上升沿,結束通信信號?
}
void?write(uchar?a)
{
??uchar?i=0;
??uchar?b;
??while(1)
??{
b=a;
?? for(i=0;i<8;i++)
?? {
?? SCK=0; //開始時時鐘總線保持為低?
?? SDA=b&0x80; //在時鐘總線保持低時,數據總線輸出要發送數據的最高位
?? b=b<<1; //數據左移一位
?? SCK=1; //時鐘總線保持為高,在高電平期間,存儲器讀取電平?
delay(5);
??? ?}
?SCK=0;
?SDA=1; //釋放數據總線?
?SCK=1;
???? ?delay(5);
?if(SDA==0) //讀取第九位,如果是低,表示收到存儲器應答信號,否則重寫數據?
? break;
???}
}
uchar?read()
{
uchar?i;
uchar?a=0;
for(i=0;i<8;i++)
{
SCK=0; //開始時時鐘總線保持為低?
delay(5);
SCK=1; //釋放數據總線?
a=a<<1; //數據左移一位,騰出最低位
if(SDA==1)
?? a=a|0x01; //存取讀到的數據?
??
}
delay(5);
return?a;
}
void?write24xx(uchar?adduchar?a)
{
start(); //開始通信信號?
write(0xa0); //發送寫命令?
write(add); //寫入要存儲數據的地址?
write(a); //寫入待存取的數據?
stop(); //結束通信信號
delay1(5000); //延時一段時間,待寫入結束?
}
uchar?read24xx(uchar?add)
{
uchar?a;
start(); //開始通信信號?
write(0xa0); //發送寫命令?
write(add); //寫入要讀取數據的地址?
stop(); //結束通信信號?
start(); //開始通信信號?
write(0xa1); //發送讀命令?
a=read(); //讀出數據?
stop(); //結束通信信號?
return?a;
}
void?main()
{
uchar?ij;
WP=0; //關閉寫保護?
for(i=0;i<32;i++)
write24xx(ii); //向存儲器寫入32個數據?
WP=1; //寫保護?
for(i=0;i<32;i++)
{
j=read24xx(i);
P1=j;
delay1(50000); //隔一段時間讀出剛才存儲的數據?
}
while(1);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????98198??2010-06-10?11:14??IIC總線時序模擬\24c02\a.DSN
?????文件???????1885??2010-06-10?11:35??IIC總線時序模擬\24c02\a.PWI
?????文件???????5657??2010-06-10?11:12??IIC總線時序模擬\24c02\i2c
?????文件???????2141??2010-06-10?11:12??IIC總線時序模擬\24c02\I2c.c
?????文件????????831??2010-06-10?11:12??IIC總線時序模擬\24c02\i2c.hex
?????文件?????????39??2010-06-10?11:12??IIC總線時序模擬\24c02\i2c.lnp
?????文件???????6173??2010-06-10?11:12??IIC總線時序模擬\24c02\I2c.LST
?????文件??????10112??2010-06-10?11:12??IIC總線時序模擬\24c02\i2c.M51
?????文件???????5863??2010-06-10?11:12??IIC總線時序模擬\24c02\I2c.OBJ
?????文件???????1391??2010-06-10?11:14??IIC總線時序模擬\24c02\i2c.Opt
?????文件????????199??2010-06-10?11:14??IIC總線時序模擬\24c02\i2c.plg
?????文件???????2198??2010-06-04?10:11??IIC總線時序模擬\24c02\i2c.Uv2
????.......??????1390??2010-06-10?11:12??IIC總線時序模擬\24c02\i2c_Opt.Bak
????.......?????????0??2010-06-04?09:44??IIC總線時序模擬\24c02\i2c_Uv2.Bak
?????文件??????98249??2010-06-04?19:55??IIC總線時序模擬\24c02\Last?Loaded?a.DBK
?????文件???????6376??2005-03-22?15:22??IIC總線時序模擬\24c02\STARTUP.A51
?????文件??????14049??2010-06-10?11:12??IIC總線時序模擬\24c02\STARTUP.LST
?????文件????????749??2010-06-10?11:12??IIC總線時序模擬\24c02\STARTUP.OBJ
?????文件????????188??2010-06-10?14:03??IIC總線時序模擬\說明.txt
?????目錄??????????0??2010-06-10?11:35??IIC總線時序模擬\24c02
?????目錄??????????0??2010-06-10?11:15??IIC總線時序模擬
-----------?---------??----------?-----??----
???????????????255688????????????????????21
評論
共有 條評論