📄 i2c
字号:
//#include<stdio.h>
#include<reg51.h>
#include<INTRINS.H>
void _nop_(void);
void some_nop(void);
sbit C=PSW^6;
sbit scl=P1^6; //iic时钟
sbit sda=P1^7; //iic数据
sbit reset=P1^4; //复位引脚
void delay(unsigned int i)
{
unsigned int wTemp;
while (i--)
{
wTemp = 1000/6; // one loop below takes about 11 us
while (wTemp--);
}
}
//MCU_initial
void MCU_initial(void)
{
EA = 0;
ET1=1;
TMOD=0x10;
}
//initialilze sub
void initial()
{
reset=0;
delay(300);
reset=1;
delay(100);
}
/*void some_nop(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}*/
/*i2c start sub*/
void iic_start(void)
{
sda=1;
scl=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
scl=0;
}
/*i2c end sub*/
void iic_stop(void)
{
sda=0;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
sda=1;
}
/*i2c write a byte*/
void iic_write(unsigned int send_data) //写一个8位的数据
{
unsigned int i=0;
for(i;i<8;i++)
{
sda=(bit)(send_data & 0x80);
send_data<<=1;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
scl=0;
_nop_();
_nop_();
}
}
//i2c read a byte //
unsigned int iic_read(void) //读一个8位的数据
{
unsigned int i;
unsigned int read_data=0x00;
sda=1;
for(i=0;i<8;i++)
{
scl=1;
_nop_();
_nop_();
read_data<<=1;
if(sda==1)
read_data|=0x01;
scl=0;
_nop_();
_nop_();
}
return read_data;
}
//i2c get ack //
void get_ack(bit ack) //主机应答 1:no ack 0:ack
{
sda=ack;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
scl=0;
}
//i2c send ack//
bit send_ack(void) //从机应答
{
bit ACK;
sda = 1;
_nop_();
_nop_();
scl = 1;
_nop_();
_nop_();
ACK = sda;
scl = 0;
_nop_();
_nop_();
return ACK;
}
//write
void write_onebyte(unsigned int slave,unsigned int data_addr,unsigned int count)
{
iic_start();
iic_write(slave);
if(!send_ack())
{
iic_write(data_addr);
if(!send_ack())
{
iic_write(count);
send_ack();
}
}
iic_stop();
}
//read
unsigned int read_onebyte(unsigned int slave,unsigned int data_addr)
{
unsigned int n;
bit abit=1;
iic_start();
iic_write(slave);
abit=send_ack();
iic_write(data_addr);
abit|=send_ack();
iic_start();
iic_write(0x55);
abit|=send_ack();
n=iic_read();
get_ack(1);
iic_stop();
if(abit)
n=0xff;
return n;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -