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

📄 iic.c

📁 单片机为meg88
💻 C
字号:

#include "IIC.h"
#include "common.h"


// TWI initialize
// bit rate:32,prescal:1,rate:100Khz;
//SCL frequency = CPU Clock frequence / (16 + 2(TWBR)(PrescalerValue))
void twi_init(void)
{
	TWCR = 0x00;		//disable twi
	TWBR = 0x20;		//set bit rate equal 32
	TWSR = 0x00;		//set prescale  clock/1
	TWAR = 0x00;		//set slave address
	TWCR = 0x85;		//enable twi
}

#pragma interrupt_handler twi_isr:25
void twi_isr(void)
{
	uchar ucIIC_TWSR;

	ucIIC_TWSR = TWSR & 0xF8;
	if(ucIIC_TWSR == 0x08)
	{
		TWDR = g_ucIICAdress;
		ZHONGTU_START_IIC();
	}
	else if((ucIIC_TWSR == 0x18) || (ucIIC_TWSR == 0x20))
	{
		TWDR = *g_ucIICDataBuf;
		g_ucIICDataNum--;
		ZHONGTU_START_IIC();
	}
	else if((ucIIC_TWSR == 0x28) || (ucIIC_TWSR == 0x30))
	{
		if(g_ucIICDataNum > 0)
		{
 			TWDR = *(++g_ucIICDataBuf);
 			g_ucIICDataNum--;
			ZHONGTU_START_IIC();
		}
		else
		{
			g_ucIICEnd = 1;
			STOP_IIC();
		}
	}
	else
	{
		STOP_IIC();
        g_ucIICState = IIC_BUSY;
		g_ucIICEnd = 1;
	}
}

//ucIICAdress为子地址;*s为要传送的数据组,ucIICDataNum为要传送数据的个数
uint IICSendStr(uchar ucIICAdress, uchar *s, uchar ucIICDataNum)
{
	g_ucIICAdress = ucIICAdress;
	g_ucIICDataBuf = s;
	g_ucIICDataNum = ucIICDataNum;
	g_ucIICEnd = 0;
	START_IIC();
	while(g_ucIICEnd == 0)
	{}

	if(g_ucIICEnd == 1)
		return(1);
	else
		return(0);
}


//ucIICAdress为子地址;*s为要传送的数据组,ucIICDataNum为要传送数据的个数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -