📄 iic.c
字号:
#define _iic_
#include "..\Inc\includes.h"
/*********************************************************************************************************
* 函数名称:
*
* 功能描述:
*
* 说明:
*
********************************************************************************************************/
void I_start(void)
{ SDA1; SCLK1; SDA0;SCLK0; }
void I_stop(void)
{ SDA0; SCLK1; SDA1; SCLK0; }
void I_ack(void)
{ SDA0; SCLK1; SCLK0; SDA1; }
void N_ack(void)
{ SDA1; SCLK1; SCLK0; SDA0; }
void I_send(unsigned char m)
{
unsigned char i=8;
do{
SCLK0;
if(m&0x80) { SDA1; }
else { SDA0; }
SCLK1;
m = m<<1;
i--;
}while(i);
SCLK0;
}
unsigned char I_receive(void)
{
unsigned char x=0,i=8,m;
SDA1;
do{
SCLK0;
SCLK1;
P5DIR=P5DIR&0xf7; // 输入
m=P5IN;
m=m&0x08;
if(m==0x08)
x=x|0x01;
if(i>1)
x=x<<1;
i--;
}while(i);
SCLK0;
return x;
}
unsigned char IIRD(unsigned char sla,unsigned int x)
{ unsigned char kk;
// IIC_biao=0;
I_start();
I_send(sla);
I_ack();
I_send(x);
I_ack();
I_start();
I_send(sla+1);
I_ack();
kk = I_receive();
N_ack();
I_stop();
return(kk);
}
void IIWR(unsigned char sla,unsigned int x,unsigned char y)
{
// IIC_biao=0;
I_start();
I_send(sla);
I_ack();
I_send(x);
I_ack();
I_send(y);
I_ack();
I_stop();
II_delay(); /*连续写必须延时间*/
}
/*********************************************************************************************************
* 函数名称:II3RD
*
* 功能描述:读指定字节的数据
*
* 说明:
*
********************************************************************************************************/
unsigned char II3RD(unsigned char sla,unsigned int dizi)
{
unsigned char kk,m,n;
//IIC_biao=1;
n=(unsigned char)((dizi&0xff00)>>8);
m=(unsigned char)(dizi&0x00ff);
I_start();
I_send(sla);
I_ack();
I_send(n);
I_ack();
I_send(m);
I_ack();
I_start();
I_send(sla+1);
I_ack();
kk=I_receive();
N_ack();
I_stop();
return(kk);
}
/*********************************************************************************************************
* 函数名称:II3WR
*
* 功能描述:在指定的地址存如一个字节的数据
*
* 说明:
*
********************************************************************************************************/
void II3WR(unsigned char sla,unsigned int dizi,unsigned char shuju)
{
unsigned char m,n;
//IIC_biao=1;
n=(unsigned char)((dizi&0xff00)>>8);
m=(unsigned char)(dizi&0x00ff);
I_start();
I_send(sla);
I_ack();
I_send(n);
I_ack();
I_send(m);
I_ack();
I_send(shuju);
I_ack();
I_stop();
II_delay();
}
/*********************************************************************************************************
* 函数名称:II_delay
*
* 功能描述:I2C延时程序
*
* 说明:
*
********************************************************************************************************/
void II_delay(void)
{
unsigned long int i=0;
for(i=0;i<900;i++) ; /* 必须大于450 否则数据不能保存 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -