⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 pic16f886读取LM75A温度芯片的程序
💻 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 + -