📄 i2c.c
字号:
#include <iom8.h>
#include "board.h"
////////////////////////////////////////
void i2c_star(void);
void i2c_stop(void);
uchar i2c_read(void);
void i2c_write(uchar data);
//***I2C开始信号****//
void i2c_star(void)
{
sda_1;
scl_1;
NOP();NOP();NOP();NOP();
sda_0;
NOP();NOP();NOP();NOP();
}
//****I2C停止信号****//
void i2c_stop(void)
{
sda_0;
scl_1;
NOP();NOP();NOP();NOP();
sda_1;
NOP();NOP();NOP();NOP();
}
//***i2C写入一字节信号****//
void i2c_write(uchar data)
{
uchar i;
scl_1;
for(i=8;i>0;i--)
{
if(data&=0x80) sda_1; else sda_0;
data>>=1;
NOP();NOP();NOP();NOP();
scl_0;
NOP();NOP();NOP();NOP();
scl_1;
}
}
//*****2303接收八位数据后发低电平表示已经接收****//
uchar i2c_ack(void)
{
uchar i;
ddr_sda_0;
scl_0;
NOP(); NOP();
if(sda) i=0; else i=1;
ddr_sda_1;
return(i);
}
//***CPU每接收八位数据则发ASK***//
void i2c_nack(uchar i)
{ //参数: 为0 则继续接收 为1 则表示结束
ddr_sda_1;
scl_1;
NOP();NOP();
if(i==1) sda_1; else sda_0;
NOP();NOP();
scl_0;
NOP();NOP();
}
//****从i2c读一字节信号*****//
uchar i2c_read(void)
{
uchar i;
uchar data=0;
scl_0;
for(i=8;i>0;i--)
{
scl_1;
NOP();NOP();NOP();NOP();
if(sda) data++;
data<<=1;
scl_0;
NOP();NOP();NOP();NOP();
}
return(data);
}
//*****向I2C写入数据****//
void i2c_write_data(uchar *data,uchar no)
{ //参数: 数据头地址 , 数量
i2c_star();
i2c_write(0x64);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -