?? at24c02.h
字號:
/*-----------------------------------------*/
//File: AT24C2.H
//Data: 2008.6.9//3:06 PM
//Amend: 08-8-1 19:31
//Version: Ver0.2
//Thanks: Web
//Code: I love C51~
/*-----------------------------------------*/
#ifndef __AT24C02_H__
#define __AT24C02_H__
/*-----------------------------------------*/
#define unchar unsigned char
#define unint unsigned int
#define unlong unsigned long
/*-----------------------------------------*/
#define WriteDeviceAddress 0xa0 //寫
#define ReadDeviceAddress 0xa1 //讀
sbit SCL = P2^0; //串行接口定義
sbit SDA = P2^1;
/*-----------------------------------------*/
//函數聲明
void delay1ms(void); //延時1ms
void Start(void); //開始總線
void Stop(void); //結束總線
void NoAck(void); //發送ACk0
bit TestAck(void); //測試ACk
void Write8Bit(unchar input); //寫入8個Bit 到24C02
void Write24C02(unchar ch,unchar address);//寫入一個字到24C02中的指定地址中
unchar Read8Bit(void); //從24C02中讀出8個Bit
unchar Read24C02(unchar address); //從24C02指定地址位置中讀出1個字節
/*-----------------------------------------*/
//延時1000us
void delay1ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=28;j>0;j--)
for(k=2;k>0;k--);
}
/*-----------------------------------------*/
//開始總線
void Start(void)
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
/*-----------------------------------------*/
//結束總線
void Stop(void)
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
/*-----------------------------------------*/
//發送ACk0
void NoAck(void)
{
SDA=1;
SCL=1;
SCL=0;
}
/*-----------------------------------------*/
//測試ACk
bit TestAck(void)
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return (ErrorBit);
}
/*-----------------------------------------*/
//寫入8個Bit 到24C02
void Write8Bit(unchar input)
{
unchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input<<=1;
}
}
/*-----------------------------------------*/
//寫入一個字到24C02中的指定地址中
void Write24C02(unchar ch,unchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
delay1ms(); //延遲時間1ms!!!
}
/*-----------------------------------------*/
//從24C02中讀出8個Bit
unchar Read8Bit(void)
{
unchar temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte<<=1;
rbyte|=((unchar)(SDA));
SCL=0;
}
return (rbyte);
}
/*-----------------------------------------*/
//從24C02指定地址位置中讀出1個字節
unchar Read24C02(unchar address)
{
unchar ch;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(ReadDeviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return (ch);
}
/*-----------------------------------------*/
/*
//應用舉例
void main(void)
{
unsigned char i;
for(i=0;i<256;i++)
{
Write24C02(i,i);
P1=Read24C02(i);
delayms(1000);
}
while(1);
}
*/
/*-----------------------------------------*/
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -