?? at24c02.c
字號:
/* 0xa0--AT24C01的I2C通信的設備地址 */
/* 功能: at24c01開始工作 CLOCK在高電平,DATA從高變低 參數: 無 */
void start_at24c01()
{ bc_at24c01_data=1;
bc_at24c01_clk=1;
_nop_(); _nop_(); _nop_();
bc_at24c01_data=0;
_nop_(); _nop_(); _nop_();
bc_at24c01_clk=0;
_nop_();
}
/* 功能: at24c01 的結束工作 CLOCK在高電平,DATA從低變高 參數: 無 */
void stop_at24c01()
{ _nop_();
bc_at24c01_data=0;
_nop_(); _nop_();
bc_at24c01_clk=1;
_nop_(); _nop_(); _nop_();
bc_at24c01_data=1;
_nop_();_nop_();_nop_();
bc_at24c01_clk=0;
}
/* 功能: 讀at24c01的應答位 bc_at24c01_data 應被拉低,表示有應答
參數: b_ack_at24c01_f 如果b_ack_at24c01_f=0表示有應答, b_ack_at24c01_f=1,表示沒應答 */
void get_at24c01_ack()
{ bc_at24c01_clk=1;
bc_at24c01_data=1; // get ack bit from ptat24c01,ack bit is save in 000h
_nop_(); _nop_();
if(bc_at24c01_data==0) b_ack_at24c01_f=1; /* 有應答 */
if(bc_at24c01_data==1) b_ack_at24c01_f=0; /* 有應答 */
_nop_();
bc_at24c01_clk=0;
_nop_();
}
/* 功能: 寫一字節到at24c01 先送最高位, CLOCK低電平時,DATA允許變化; CLOCK高電平時,DATA需穩定
參數: par_at24c01=一字節的發送數據 */
void send_a_byte_at24c01(uchar par_at24c01)
{
uchar i;
for(i=0;i<8;i++ )
{
bc_at24c01_clk=0;
_nop_(); _nop_();
if((par_at24c01&0x80)==0x80)
{ bc_at24c01_data=1; }
else
{ bc_at24c01_data=0; }
par_at24c01=par_at24c01<<1;
_nop_();
bc_at24c01_clk=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
bc_at24c01_clk=0;
}
/*在指定的地址和指寫頁寫一數據 參數有地址=par_24c02_add 數據=par_24c02_data 都為全程變量*/
void at24c_write(uchar par_at24c01_add, uchar par_at24c01_data)
{
start_at24c01();
send_a_byte_at24c01(0xa0); get_at24c01_ack();
send_a_byte_at24c01(par_at24c01_add); get_at24c01_ack(); /* 寫入地址 */
send_a_byte_at24c01(par_at24c01_data); get_at24c01_ack(); /* 寫入數據 */
stop_at24c01();
delay(250); /* 延時時間,不得小于delay(100) */
delay(250); /* 延時時間,不得小于delay(100) */
}
/*指定地址和指寫頁讀一數據 參數有地址=par_24c02_add 數據=par_24c02_data 都為全程變量
par_24C02在調入函數前是地址,調用函數后返回是所讀到的數據 */
uchar at24c_read(uchar par_at24c01_add)
{
uchar i,par_24c02_data;
start_at24c01();
send_a_byte_at24c01(0xa0);
get_at24c01_ack();
send_a_byte_at24c01(par_at24c01_add);
get_at24c01_ack();
start_at24c01();
send_a_byte_at24c01(0xa1);
get_at24c01_ack();
for(i=0;i<8;i++) /* 讀數據 */
{ bc_at24c01_clk=0;
bc_at24c01_data=1;
_nop_(); _nop_();
if(bc_at24c01_data==1) par_24c02_data=(par_24c02_data|0x80);
if(bc_at24c01_data==0) par_24c02_data=(par_24c02_data&0x7f);
par_24c02_data=_crol_(par_24c02_data,1);
bc_at24c01_clk=1;
_nop_(); _nop_();
}
bc_at24c01_clk=0;
stop_at24c01();
return par_24c02_data;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -