#include "STC/STC15F2K60S2.h"
#include <intrins.h> //包含NOP空指令函数_nop_();
#define AddWr 0xa0 //写数据地址,需要参考24c02芯片文档
#define AddRd 0xa1 //读数据地址
#define FALSE 0
#define TURE 1
sbit SDA=P2^1; //定义总线连接端口
sbit SCL=P2^0 ;
void delayus()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(unsigned int j)
{
unsigned int i;
for(;j>0;j--)
for(i=0;i<100;i++)
;
}
void Start() //启动iic总线
{
SCL = 1;
delayus();
SDA = 1;
delayus();
SDA = 0;
delayus();
}
void Stop() //停止iic总线
{
SCL = 1;
delayus();
SDA = 1;
delayus();
SCL = 0;
delayus();
}
void Ack() // 应答IIC总线
{
SCL = 0;
SDA = 1;
delayus();
SDA = 0;
delayus();
SCL = 1;
delayus();
_nop_();
SCL = 0;
_nop_();
_nop_();
}
void NoAck() //非应答IIC总线
{
SDA = 1;
delayus();
SCL = 1;
delayus();
_nop_();
SCL = 0;
_nop_();
_nop_();
}
/*
bit Ack()
{
bit flag;
SDA=1;
SCL=1;
delayus();
flag=SDA;
delayus();
SCL=0;
delayus();
if(flag == 1)
return FALSE; //非应答
else
return TURE;
}*/
void Send(unsigned char dat)
{
unsigned char i;
for(i = 0;i<8;i++)
{
dat=dat<<1;
SCL = 0;
delayus();
SDA = CY;//PSW为中的进位标识,左移后最高位移入CY
delayus();
SCL = 1;//高电平,数据平稳
delayus();
}
SCL = 0;
delayus();
SDA = 1;//总线释放
delayus();
}
unsigned char read() //读一个字节
{
unsigned char count;
unsigned char dat;
//SDA = 1;
SCL = 0;
delayus();
SDA = 1;
delayus();
for(count = 0;count < 8;count++)
{
SCL = 1;
delayus();
dat = (dat << 1)|(unsigned char)SDA;//dat左移一位,最低位为0,此时与SDA按位或运算
SCL = 0; //读到最低为
delayus();
}
return dat;
}
/*写入数据*/
void WriteToROM(unsigned char Address,unsigned char Data)
{
Start();
Send(AddWr); //写入芯片地址
Ack();
Send(Address);//写入存储地址
Ack();
Send(Data);//写数据
Ack();
Stop();
//delay(20);
}
/* 读出数据 */
unsigned char ReadFromROM(unsigned char Address)
{
unsigned char PData = 0;
Start(); //写入芯片地址
Send(AddWr);
Ack();
Send(Address);//写入存储地址
Ack();
Start();
Send(AddRd); //读入地址
Ack();
PData = read();//读数据
Stop();
NoAck();
return PData;
}
void main()
{
while(1)
{
SDA = 1; //初始化
delayus();
SCL = 1;
delayus();
WriteToROM(25,0xaa);
delay(20);
P0 = ReadFromROM(25);
//P0 = 1 ;
}
}
外部EEPROM,IIC总线和EEPROM通信技术
最新推荐文章于 2023-11-14 17:46:12 发布