導航:首頁 > 編程語言 > 24c02驅動程序分析

24c02驅動程序分析

發布時間:2023-04-02 16:22:05

⑴ 24C02驅動程序的問題

EEPROM_SDA = dat & 0x80;
EEPROM_SCL = 1;
EEPROM_SCL = 0
sda是位變數,是管腳,好像不能賦uchar的值的。。。這句有問題。用if語句分,
if((dat&0x80)==0x80)
dat=1;
else dat=0;

⑵ 單片機 24C02程序不能驅動 求解釋!

根據時序,當寫一個位元組時旅碧尺,只有當scl為低電平才可以改變Sda的數據,即類似於有一個scl上升慧乎沿,在你的寫函數之間的start函數scl為高電平,而在iic_write_sigle中sda有值後,scl一直拆高為高,沒有低,怎麼可以改變數據呢!!所以在iic_write_sigle中for循環里加上scl=0;再試試看

⑶ 通過iic在24c02的地址1中寫入數據再讀出來點亮一個led燈,為什麼沒反應

只要你的電源不超過4V 電流不告燃擾超過20MA控制通斷就可以了,具體段攜的有賣LED控制器,你可以把LED直接接上,也可以用單襪旦片機控制一個腳的通斷,來達到控制LED燈的閃.

⑷ 51單片機 at24c02驅動模塊直接把 at24c02的地址內容給單片機的驅動,讀寫什麼的都包含在裡面

//24c02程序,記錄開機次數
//2011年5月19日
//調適成功,程序可正常運行
#include<reg52.h>
sbit sda=P1^0;
sbit scl=P1^1;

char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//*******************
/虛明/ 函數功能:演示函數
//參數:x:時間傳遞參數
//函數名:delaym()
void delaym(int x)
{
int y;
for(x;x>0;x--)
for(y=110;y>0;y--);
}
//*******************
// 函敏旁數功能:開始應答
//參數:無
//函數名:start()
void start()
{
scl=1;
sda=1;
sda=0;
scl=0;
}
//*******************
// 函數功能:停止應答
//參數:無
//函數名:stop()
void stop()
{
scl=0;
sda=0;
scl=1;
sda=1;
}

bit testack()
{
bit errorbit;
sda=1;
scl=1;
errorbit=sda;
scl=0;
return(errorbit);
}
//*******************
// 函數功能:寫1byte到24c02
//參數:input:寫數據
//函數名:writebyte()
void writebyte(char input )
{
char i;
for(i=8;i>0;i--)
{
sda=(bit)(input&0x80);
scl=1;
scl=0;
input=input<<1;
}
}
//*******************
// 函數功能:讀取1byte數據
//參數:k:讀出的數據
//函數名:readbyre()
char readbyte()
{
char i,k;
for(i=8;i>0;i--)
{
scl=1;
k=(k<<1)|sda;
scl=0;
}
return(k);
}
//*******************
// 函數功能:寫數據到24c02指定地址
//參數:address:地址 ,date:寫入的數據
//函數名:writeaddadd()
void writeadd(char address,char date)
{
start();
writebyte(0xa0);
testack();
writebyte(address);
testack();
writebyte(date);
testack();
stop();
delaym(10);
}
//*******************
// 函數功能:讀取24c02指定橋譽橡地址數據
//參數:address:地址 ,ch:讀出的數據
//函數名:readadd()
char readadd(char address)
{
char ch;
start();
writebyte(0xa0);
testack();
writebyte(address);
testack();
start();
writebyte(0xa1);
testack();
ch=readbyte();
stop();
return(ch);
}
//主函數
void main()
{
char k;
writeadd(1,1);
writeadd(2,2);
writeadd(3,3);
writeadd(126,1);
P0=0x01;
P2=0xff;
delaym(5000);
while(1){
k=readadd(1);
P0=table[k];
P2=0x80;
delaym(10);

k=readadd(2);
P0=table[k];
P2=0x40;
delaym(10);

k=readadd(3);
P0=table[k];
P2=0x20;
delaym(10);

k=readadd(126);
P0=table[k];
P2=0x10;
delaym(10);
}

//k++;
//if(k>9){
// k=0;
//}
//writeadd(9,k); }
試試吧,我自己用的

⑸ AT89C52單片機用24C02和24256實現掉電保護的程序和硬體電路

24C02可以實現掉電保護 硬體就是你拿2個I/O引腳去接到24C02 SCL SDA引腳上模擬I2C時序就可以了 程序的話樓上那個I2C驅動程序寫的很清楚了

⑹ 請教:AT24C02程序問題!

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar f;
sbit sda=P3^4;
sbit scl=P3^3;
void delayus()//五微秒
{;;}
void delayms(uint z)//一毫秒
{
uint x,y;
for(y=z;y>0;y--)
for(x=110;x>0;x--);
}
void init()//初始化
{
scl=1;
delayus();
sda=1;
delayus();
}
void start()//開始信號
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
scl=0;
delayus();
}

void stop()//停止信號
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
}

/*void response()//應老搜答信號
{
delayus();
scl=1;
delayus();
}*/

void write_byte(uchar dat)//寫一個位元組
{ bit ack_bit;
uchar b,c;
scl=0;
delayus();
sda=1;
for(b=0;b<8;b++)
{
//c=dat&(0x80<<1);
c = (bit)(dat&0x80);
delayus();
sda=c;
delayus();
scl=1;
delayus();
scl=0;
delayus();
dat<<=1;
delayus();
}

/*下面是response();*/
sda=1;// scl=0;
delayus();
scl=1; //sda=1;
delayus();
ack_bit = sda; //接受設備(AT24Cxx)向SDA送低電平,表示已經接收到一個位元組 ,若送高電平,表示沒有接收到,傳送異常
scl = 0; /液芹/SCL為低電平時,SDA上數據才允許變化(即允許鬧含畢以後的數據傳遞)
}

uchar read_byte()//讀一個位元組
{
uchar d,e;
/* scl=0;//數據可以變化
delayus();
sda=1;
delayus();*/
for(d=0;d<8;d++)
{
scl=1;//數據穩定的時候可以進行對數據的操作,但是不可以改變數據狀態
e<<=1;
//e=sda|(0x01<<d);
e|=(unsigned char)sda;
delayus();
scl=0;//來個脈沖把數據發送出去(低電平時數據可變)
}
return e;

}

void write_24c02(uchar address,uchar dat)
{
start();
write_byte(0xa0);
//response();
write_byte(address);
// response();
write_byte(dat);
// response();
stop();
}
uchar read_24c02(uchar address)
{
start();
write_byte(0xa0);
// response();
write_byte(address);
// response();
start();
write_byte(0xa1);
// response();
f=read_byte();
stop();
return f;
}

void main()
{

delayus();
write_24c02(3,0x02);
delayms(10);
P1=read_24c02(3);
while(1);
}

⑺ 單片機模擬IIC,24C02程序有問題

沒時間仔細看你程序,給你些經驗參考!

  1. 時序一定要符合i2c規范。SCLSDA 平常在H(高態),送出地址或資料時,先送出資料,然後

    再將SCL 從H -> L -> H (一個時鍾);這樣就送出1bit

  2. 傳送速率,早絕不要超過2MHz ,也就是上面 H -> L -> H的時間要控制在2MHz內。

  3. 傳送時高位元先送,所以是左移,收的時候也是左移陸察姿。

  4. 接收資料跟1.相同,在SCL由高到低轉態時讀取。

  5. 覺得新手比較容易弄錯的是沒完全弄懂時序(尤其是資料格式),另外就是速率。

  6. 仔細看看24c02的datasheet,對照自己沒和的程序,這樣對自己幫助最大,應該能找出問題。

⑻ 關於AT24C02晶元的兩個問題

1〉AT24CXX晶元都是串列eeprom, 通信協議是相同的,但是容量不同。如果坦談驅動程序考慮到了,是可槐信弊以兼容的。
2〉AT24CXX沒有擦除的動作,可以直接寫入。但是eeprom和普通的ram還鉛族是有區別的,eeprom可以在斷電後保存數據,普通的ram則不行

⑼ 24c02程序 高手請進

#include<reg51.h>

sbit sda=P2^0;
sbit scl=P2^1;
sbit la=P2^6; // 數碼管段選位
sbit wela=P2^7; // 數碼液搏管位選位
char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delaym(int x)
{
int y;
for(x;x>0;x--)
for(y=110;y>0;y--);
}

void start()
{
scl=1;
sda=1;
sda=0;
scl=0;
}

void stop()
{
scl=0;
sda=0;
scl=1;
sda=1;
}

bit testack()
{
bit errorbit;
sda=1;
scl=1;
errorbit=sda;
scl=0;
return(errorbit);
}

void writebyte(char input)
{
char i;
for(i=8;i>0;i--)
{
sda=(bit)(input&0x80);
scl=1;
scl=0;
input=input<<1;
}
}

char readbyte()
{
char i,k;
for(i=8;i>0;i--)
{
scl=1;
k=(k<<1)|sda;
scl=0;
}
return(k);
}

void writeadd(char address,char date)
{
start();
writebyte(0xa0);
testack();
writebyte(address);
testack();
writebyte(date);
testack();
stop();
delaym(10);
}

char readadd(char address)
{
char ch;
start();
writebyte(0xa0);
testack();
writebyte(address);
testack();
start();
writebyte(0xa1);
testack();
ch=readbyte();
stop();
return(ch);
}

void main()
{
char k;
k=readadd(3);
la=1; //開機次數送數碼管顯示
P0=table[k];
la=0;
wela=1;
P0=0xfe;
wela=0;
k++;
writeadd(3,k);
while(1);
}

高手不敢說,剛學習的,已經調試過了,可以正常運行,記錄開機次數
不過你要先把24c02清0,他才會從0開始計數
否則他會螞扮讀取24c02裡面已經存儲的值,直接繼續加上去
我的程序裡面他只能記錄16次,要更多的話你可以自己擴展
qq807761589 有不懂的再來鬧物祥問我

⑽ 誰知道AT24C02的中文資料,在單片機中是如何被利用的,他的功能是什麼呢

AT24C02簡介
AT24C02是美國 ATMEL 公司的低功耗 CMOS 串列 EEPROM,它是內含256×8
位存儲空間,具有工作電壓寬(2.5~5.5V) 、擦寫次數多(大於10000次) 、寫入速
度快(小於10ms)等特點。AT24C02中帶有片內定址寄存器。每寫入或讀出一個數
據位元組後,該地址寄存器自動加1,以實現對下一個存儲單元的操作。所有位元組都
以單一操作方式讀取。為降低總的寫入時間亮皮槐,一次操作可寫入多達8位元組的數據。
圖6為AT24C系列晶元的封裝圖。各引腳功能如下: SCL:串列時鍾。在該引腳的上升沿時,系統將握轎數據輸入到每個 EEPROM 器件,在
下降沿時輸出。
SDA:串列數據。該引腳為開漏極驅動,可雙向傳送數據。
A0、A1、A2:器件/頁面定址。為器件地址輸入端。
WP:硬體防寫。當該引腳為高電平時禁止寫入,當為低電平時可正常讀寫數據。
VCC:電源。一般輸入+5V電壓敬友。
VSS:接地。

閱讀全文

與24c02驅動程序分析相關的資料

熱點內容
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643
蘋果鍵盤怎麼打開任務管理器 瀏覽:437
手機桌面文件名字大全 瀏覽:334
tplink默認無線密碼是多少 瀏覽:33
ipaddgm文件 瀏覽:99
lua語言編程用哪個平台 瀏覽:272
政采雲如何導出pdf投標文件 瀏覽:529
php獲取postjson數據 瀏覽:551
javatimetask 瀏覽:16
編程的話要什麼證件 瀏覽:94
錢脈通微信多開 瀏覽:878
中學生學編程哪個培訓機構好 瀏覽:852
榮耀路由TV設置文件共享錯誤 瀏覽:525

友情鏈接