📄 main.c
字号:
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define i2c_sda RB3
#define i2c_scl RB4
#define SCLO TRISB4=0
#define SDAI TRISB3=1
#define SDAO TRISB3=0
void delay(uchar i)
{
uchar j;
for(;i>0;i--)
for(j=5;j>0;j--);
}
void i2c_init()
{
SCLO;
SDAO;
i2c_sda=1;
i2c_scl=1;
NOP();
NOP();
NOP();
NOP();
NOP();
}
void i2c_start()
{
i2c_sda=1;
NOP();
i2c_scl=1;
NOP();
i2c_sda=0;
NOP();
i2c_scl=0;//不释放I2C总线,准备发送数据
NOP();
}
void i2c_stop()
{
i2c_sda=0;
NOP();
i2c_scl=1;
NOP();
i2c_sda=1;
NOP();
NOP();
NOP();
NOP();
NOP();
}
void i2c_write_byte(uchar byte)
{
uchar i;
i2c_scl=0;
NOP();
for(i=0;i<8;i++)
{
byte=byte<<i;
if(byte&0x80)
{
i2c_sda=1;
}
else
{
i2c_sda=0;
}
NOP();
i2c_scl=1;
NOP();
i2c_scl=0;
}
NOP();
}
uchar i2c_read_byte()
{
uchar tep=0;
uchar i;
SDAI;
for(i=0;i<8;i++)
{
i2c_scl=1;
NOP();
tep=tep<<1;
if(i2c_sda==1)
{
tep|=0x01;
}
NOP();
i2c_scl=0;
NOP();
}
SDAO;
return tep;
}
uchar i2c_getack()
{
uchar ack;
SDAI;
NOP();
i2c_scl=1;
delay(1);
ack=i2c_sda;
NOP();
i2c_scl=0;
NOP();
SDAO;
return ack;
}
void i2c_putack(uchar ack)
{
SDAO;
i2c_sda=ack;
NOP();
i2c_scl=1;
NOP();
i2c_scl=0;
NOP();
}
void main()
{
uchar th,tl;
ANSELH=0x00;
i2c_init();
delay(5);
i2c_start();
delay(5);
i2c_write_byte(0x91);
while(i2c_getack());
th=i2c_read_byte();
i2c_putack(0);
tl=i2c_read_byte();
i2c_putack(1);
i2c_stop();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -