|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
24Cxx的应用例子,keil编译,晶振12m
24c01到24c256都可以,
注意区别地址,02只写一次存储地址,而24c64就要写两次存储地址,
因为02只要8位就包括了所有的存储地址,而64要16位
================
#include<AT89X51.h>
#include<intrins.h>
#include<ctype.h> //P1^0变成P1_0
#define uchar unsigned char
#define uint unsigned int
sbit sda = P2^2;//24c数据引脚定义
sbit scl = P2^3;//24c时钟引脚定义
//24c短暂延时子程序
void somenop()
{
;;;;;
}
//延时子程序
void delayms(uint t)
{
uchar i;
while(t--)for(i=0;i<120;i++);
}
//24c起始信号
void start_24c(void)
{
sda=1;
somenop();
scl=1;
somenop();
sda=0;
somenop();
}
//24c停止信号
void stop_24c(void)
{
sda=0;
somenop();
scl=1;
somenop();
sda=1;
somenop();
}
//24c应答信号
void ack_24c()
{
uchar i=0;
scl=1;
while((sda==1)&&(i<250))i++;//等待应答(一段时间内无应答也会退出)
scl=0;
somenop();
}
//24c初始
void init_24c()
{
sda=1;
scl=1;
}
//24c写入子程序
void write_24c(uchar date)
{
uchar i,temp;
temp=date;
scl=0;
somenop();
for(i=0;i<8;i++)
{
temp=temp<<1;
sda=CY;//////
somenop();
scl=1;
somenop();
somenop();
scl=0;
somenop();
}
sda=1;
somenop();
}
//24c读出子程序
uchar read_24c()
{
uchar i,j,k;
scl=0;
somenop();
sda=1;
somenop();
for(i=0;i<8;i++)
{
scl=1;
somenop();
j=sda;
k=(k<<1)|j;
scl=0;
somenop();
}
return k;
}
/*at24c系列存储器操作方法IIC
//主程序
void main()
{
//---写入24c02----------------------------------
init_24c();//24c信号线和时钟线初始化
start_24c();//开始信号
write_24c(0xa0);//器件地址1010xxx(0/1写入/读取),xxx(24c芯片上的A2A1A0)
ack_24c();//响应
write_24c(0);///存储地址
ack_24c();//响应
write_24c(0x00);//写数据
ack_24c();//响应
stop_24c();//stop
//---读取24c02--------------------------
delayms(10);//延时一段时间,结束信号后立即开启开始信号可能导致开始信号检测不到, 取值10ms为宜
start_24c();//开始信号
write_24c(0xa0);//器件地址1010xxx(0/1写入/读取),xxx(24c芯片上的A2A1A0)
ack_24c();//响应
write_24c(0);//存储地址
ack_24c();//响应
start_24c();//开始信号
write_24c(0xa1);//读数据
ack_24c();//响应
P1=read_24c();//用读24c子程序,并读出值赋值给P1 //读取操作
stop_24c();//stop
delayms(10);//延时一段时间,结束信号后立即开启开始信号可能导致开始信号检测不到,取值10ms为宜
//---写入24c64----------------------------
start_24c();//开始信号
write_24c(0xa2);//器件地址1010xxx(0/1写入/读取),xxx(24c芯片上的A2A1A0)
ack_24c();//响应
write_24c(0);///存储地址
ack_24c();//响应
write_24c(0);///存储地址
ack_24c();//响应
write_24c(0x00);//写数据
ack_24c();//响应
stop_24c();//stop
delayms(10);//延时一段时间,结束信号后立即开启开始信号可能导致开始信号检测不到,取值10ms为宜
//---读取24c64--------------------------
start_24c();//开始信号
write_24c(0xa2);//器件地址1010xxx(0/1写入/读取),xxx(24c芯片上的A2A1A0)
ack_24c();//响应
write_24c(0);//存储地址
ack_24c();//响应
write_24c(0);//存储地址
ack_24c();//响应
start_24c();//开始信号
write_24c(0xa3);//读数据
ack_24c();//响应
P3=read_24c();//用读24c子程序,并读出值赋值给P3 //读取操作
stop_24c();//stop
delayms(10);//延时一段时间,结束信号后立即开启开始信号可能导致开始信号检测不到,取值10ms为宜
} */ |
|