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

📄 iic.c.bak

📁 430例程调试程序 |——5-1 框架程序 |——6-1 异步串行通信程序(点对点通信) |——6-2 异步串行通信程序(地址位模式多机通信) |——6-3 异步串行通信程序(
💻 BAK
字号:
/******************************************************************************************************
Filename:iic.c
programmer:zhang chen
Description:iic总线的子程序。
版本变更:
		2003年10月11日   1.0

*****************************************************************************************************/
#include  <msp430x14x.h>
#include "24c02.h"
#include "iic.h"
#include "general.h"
/***************************************************************************
初始化IIC
***************************************************************************/
void InitIIC()
{
	IIC_DIR |= IIC_SCL;  //SCL管脚为输出
	IIC_DIR &= ~IIC_SDA; //SDA管脚为输入
	C_SCL;
	Stop();
}

/***************************************************************************
进行短暂的延时,原因是MSP430的速度比较快。使用者可以根据时钟频率自行调节延时长短
***************************************************************************/
void delay()
{
	unsigned char q0;
	for(q0=0;q0<20;q0++)
	{
		_NOP();
	}
}

/***************************************************************************
启动IIC总线
***************************************************************************/
void Start()
{
	SDA_OUT;
	S_SDA;
	delay();
	S_SCL;
	delay();
	C_SDA;
	delay();
	C_SCL;
	delay();
}

/***************************************************************************
停止操作,释放IIC总线
***************************************************************************/
void Stop()
{
	SDA_OUT;
	C_SCL;
	delay();
	C_SDA;
	delay();
	S_SCL;
	delay();
	S_SDA;
	delay();
}

/***************************************************************************
IIC总线应答
***************************************************************************/
void Ack()
{
	SDA_OUT;
	C_SDA;
	delay();
	S_SCL;
	delay();
	C_SCL;
	delay();
	S_SDA;
}

/***************************************************************************
IIC总线无应答
***************************************************************************/
void NoAck()
{
	SDA_OUT;
	S_SDA;
	delay();
	S_SCL;
	delay();
	C_SCL;
	delay();
}

/***************************************************************************
IIC总线检验应答
返回值:IIC应答位的值0:应答   1:无应答
***************************************************************************/
unsigned char TestAck()
{
	unsigned char ack;

	S_SCL;
	delay();
	SDA_IN;
	delay();
	ack=READ_SDA;
	delay();
	C_SCL;
	delay();
	return(ack);
}

/***************************************************************************
IIC总线写8位数据
input:要写的8位数据
***************************************************************************/
void Write8Bit(unsigned char input)
{
	unsigned char temp,q0;
	SDA_OUT;
	for(temp=8;temp!=0;temp--)
	{
		q0=input&0x80;
		if(q0==0x80)
			S_SDA;
		else
			C_SDA;
      delay();
		S_SCL;
		delay();
		C_SCL;
		delay();
		input=input<<1;
	}
}

/***************************************************************************
IIC总线读8位数据
返回值:读出的8位数据
***************************************************************************/
unsigned char Read8Bit()
{
	unsigned char temp,q0,rbyte=0;
	SDA_IN;
	for(temp=8;temp!=0;temp--)
	{
		S_SCL;
		delay();
		rbyte=rbyte<<1;
		SDA_IN;
		q0=READ_SDA;
		if(q0==IIC_SDA)
			rbyte=rbyte|0x1;
		delay();
		C_SCL;
		delay();
	}
	return(rbyte);
}

⌨️ 快捷键说明

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