您现在的位置: 主页 > MCU > 单片机技术应用 > PIC IIC读写 -
本文所属标签:
为本文创立个标签吧:

PIC IIC读写 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]用c语言实现24LC256读写(非软件模拟方式)#include
unsignedCHARi=0;
unsignedCHARreceive=0x00;

void i2c_start()
{
SEN=1;//启动
do{
}while(SSPIF==0);
SSPIF=0;
}

void i2c_stop()
{
PEN=1;//

用c语言实现24LC256读写(非软件模拟方式)

#include
unsignedCHARi=0;
unsignedCHARreceive=0x00;

void i2c_start()
{
SEN=1;//启动
do{
}while(SSPIF==0);
SSPIF=0;
}

void i2c_stop()
{
PEN=1;//产生停止条件
do{
;
}while(SSPIF==0);
SSPIF=0;
}

void i2c_restart()
{
RSEN=1;//启动,反复启动
do{
;
}while(SSPIF==0);
SSPIF=0;
}

void i2c_dataout()//数据发送等待过程
{
do{
;
}while(SSPIF==0);
SSPIF=0;
}

void i2c_datain()//读取24LC256时,不是读的最后一个字节时使用
{
RCEN=1;
do{
;
}while(SSPIF==0);
SSPIF=0;
receive=SSPBUF;
ACKDT=0;
ACKEN=1;
do{
;
}while(SSPIF==0);
SSPIF=0;
}

void i2c_datainlast()//读取最后一个字节,或只读取24LC256中一个字节
{
SSPIF=0;
RCEN=1;
do{
;
}while(SSPIF==0);
SSPIF=0;
receive=SSPBUF;
ACKDT=1 ;
ACKEN=1;
do{
;
}while(SSPIF==0);
SSPIF=0;

}

void i2c_error()
{
i2c_stop();
return;
}

void write(unsigned int addr,unsignedCHARdata,unsigned int n)//向iic写入一字节数据 地址,数据,字节个数
{
i2c_start();
SSPBUF=0xA0;//EEPROM寻址码和写操作命令码
i2c_dataout(); //发送

if(ACKSTAT)
i2c_error();//无应答,错误!
else if(!ACKSTAT)
SSPBUF=addr/256;
//高eeaddr/256,取EEPROM数据地址高字节
i2c_dataout(); //发送

if(ACKSTAT)
i2c_error();//无应答,错误!
else if(!ACKSTAT)
SSPBUF=addr%256;//低eeaddr%256 ,取EEPROM数据地址低字节
i2c_dataout(); //发送

for(i=0;i{
if(ACKSTAT)//应答
i2c_error();//无应答,错误!
else if(!ACKSTAT)
SSPBUF=data;//eedata入EEPROM的数据
i2c_dataout();//发送
}

if(ACKSTAT)//应答
i2c_error();

i2c_stop();//产生停止位,启动EEPROM内部些过程

do{
i2c_start();
SSPBUF=0xA0;
i2c_dataout();
i2c_stop();
if(!ACKSTAT)break;
}while(ACKSTAT);
}

unsigned int current_read(void)//current address read ok!
{
i2c_start();
SSPBUF=0xA1;//寻址命令码0xA0 和 读命令
i2c_dataout();
if(ACKSTAT)//应答
i2c_error();
else if(!ACKSTAT)
i2c_datainlast();
i2c_stop();

return ((unsigned int)receive);
}

unsigned int random_read(unsigned intEEPROMaddress)
{
i2c_start();
SSPBUF=0xA0;//EEPROM寻址码和写操作命令码
i2c_dataout(); //发送

if(ACKSTAT)
i2c_error();//无应答,错误!
else if(!ACKSTAT)
SSPBUF=EEPROMaddress/256;
//高eeaddr/256,取EEPROM数据地址高字节
i2c_dataout(); //发送

if(ACKSTAT)
i2c_error();//无应答,错误!
else if(!ACKSTAT)
SSPBUF=EEPROMaddress%256;//低eeaddr%256 ,取EEPROM数据地址低字节
i2c_dataout(); //发送

if(ACKSTAT)
i2c_error();//无应答,错误!
else if(!ACKSTAT)

i2c_restart();
SSPBUF=0xA1;//寻址命令码0xA0 和 读命令
i2c_dataout();

if(ACKSTAT)//应答
i2c_error();
else if(!ACKSTAT)
i2c_datainlast();
i2c_stop();
return ((unsigned int)receive);

}

void i2c_init()
{
SSPSTAT=0x00;
TRISC=0xD8;
SSPADD=19;
SSPIE=0;
SSPCON=0x28;
}

本文引用地址: http://www.21ic.com/app/mcu/201808/786517.htm


//在主程序中,先i2c_init();然后开始读/写24LC256中数据,经多次运行
no bug
//程序中的寄存器必须芯片内部包含,否则无法实现硬件iic读写。



              查看评论 回复



 

"PIC IIC读写 -"的相关文章

网站地图

围观()