📄 stc_control_24c02.c
字号:
/*************************版权信息**************************
*文件名称: i2c.h
*当前版本: v1.0
*作者: 吕坤修改
*完成日期: 2007-12-29
*摘要: 24c02外存操作声明文件
************************************************************/
#include <reg52.h>
extern void Delay(long int time);
sbit scl=P2^3; /*24c02时钟控制线*/
sbit sda=P2^4; /*24c02数据传输线*/
char x24c02_read(char address); /*从24c02的address地址读取一个数据并返回*/
void x24c02_write(char address,char info);/*向24c02的address地址写入字符info*/
void x24c02_init(); /*24c02初始化*/
void flash(); /*数据写入时控制发光二极管闪烁*/
void start(); /*I2C总线协议,数据开始*/
void stop(); /*I2C总线协议,数据结束*/
void writex(char j); /*向I2C总线写入一个数据*/
char readx(); /*从I2C总线读出一个数据*/
void clock(); /*等待周期*/
/*调用写入与读出程序库*/
void write_uint_to_24c02(char address,unsigned int date); /*向address写入一个无符号整形*/
void write_int_to_24c02(char address,int date); /*向address写入一个整形*/
void write_string_to_24c02(char address,char *date,char lens); /*向address写入一个字符串*/
unsigned int read_uint_form_24c02(char address); /*从address读出一个无符号整形*/
int read_int_form_24c02(char address); /*从address读出一个无符号整形*/
void read_string_form_24c02(char address,char *date,char lens); /*从address读出一个无符号整形*/
void flash()
{
/*等待闪烁
DOG=~DOG;
*/
}
/*24c02初始化程序*/
void x24c02_init()
{
scl=1;
flash();
sda=1;
flash();
}
void start()
{
sda=1;
flash();
scl=1;
flash();
sda=0;
flash();
scl=0;
flash();
}
void stop()
{
sda=0;
flash();
scl=1;
flash();
sda=1;
flash();
}
void writex(char j)
{
char i,temp;
temp=j;
for (i=0;i<8;i++)/*分拆字节传输*/
{
temp=temp<<1;
scl=0;
flash();
sda=CY;
flash();
scl=1;
flash();
}
scl=0;
flash();
sda=1;
flash();
}
char readx()
{
char i,j,k=0;
scl=0;
flash();
sda=1;
for(i=0;i<8;i++)
{
flash();
scl=1;
flash();
if (sda==1)
{
j=1;
}
else
{
j=0;
}
k=(k<<1)|j;
scl=0;
}
flash();
return(k);
}
void clock()
{
char i=0;
scl=1;
flash();
while((sda==1)&&(i<255))
{
i++;
}
scl=0;
flash();
}
char x24c02_read(char address)
{
char i;
start();
writex(0xa0);
clock();
writex(address);
clock();
start();
writex(0xa1);
clock();
i=readx();
stop();
Delay(10);
return(i);
}
void x24c02_write(char address,char info)
{
EA=0;
start();
writex(0xa0);
clock();
writex(address);
clock();
writex(info);
clock();
stop();
EA=1;
Delay(50);
}
void write_uint_to_24c02(char address,unsigned int date) /*向address写入一个无符号整形*/
{
char byte_to_24c02;
byte_to_24c02=date;
x24c02_write(address,byte_to_24c02);
Delay(30);
byte_to_24c02=date>>8;
x24c02_write(address+1,byte_to_24c02);
}
void write_int_to_24c02(char address,int date) /*向address写入一个整形*/
{
char byte_to_24c02;
byte_to_24c02=date;
x24c02_write(address,byte_to_24c02);
Delay(30);
byte_to_24c02=date>>8;
x24c02_write(address+1,byte_to_24c02);
}
void write_string_to_24c02(char address,char *date,char lens) /*向address写入一个字符串*/
{
char i,byte_to_24c02;
for(i=0;i<lens;i++)
{
byte_to_24c02=*date;
x24c02_write(address+i,byte_to_24c02);
date++;
}
}
unsigned int read_uint_form_24c02(char address) /*从address读出一个无符号整形*/
{
unsigned int return_value;
char byte_from_24c02;
byte_from_24c02=x24c02_read(address+1);
return_value=byte_from_24c02;
byte_from_24c02=x24c02_read(address);
return_value<<=8;
return_value+=byte_from_24c02;
return return_value;
}
int read_int_form_24c02(char address) /*从address读出一个无符号整形*/
{
int return_value;
char byte_from_24c02;
byte_from_24c02=x24c02_read(address+1);
return_value=byte_from_24c02;
byte_from_24c02=x24c02_read(address);
return_value<<=8;
return_value+=byte_from_24c02;
return return_value;
}
void read_string_form_24c02(char address,char *date,char lens) /*从address读出一个无符号整形*/
{
char i;
for(i=0;i<lens;i++)
{
*date=x24c02_read(address+i);
date++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -