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

📄 iic.c

📁 程序在IAR上调试
💻 C
字号:
#include <msp430x16x.h>            //此版本已修改,与普通IIC的不同 专门针对7290 见add  modified
#include "iic.h"
#include "general.h"       



void InitIIC()
{
	SCL_OUT ;	//modified  IIC_DIR |= IIC_SCL ;           //SCL output
			//modified  IIC_DIR &= ~IIC_SDA ;          //SDA input  ??
			//modified  C_SCL ;
	SDA_OUT ;       //modified  Stop() ;
	S_SCL ;         //add
	IIC_Delay() ;   //add
	S_SDA ;         //add
	IIC_Delay() ;   //add
}


void IIC_Delay()
{       unsigned int q0 = IIC_Delay_Value;
	while( --q0  != 0 ) ;                 //unsigned char q0 ;
					     //for( q0 = 0 ;q0 < IIC_Delay_Value ;q0++ )
					     //{
	 				     //_NOP() ;
					     //}
}


void Start_IIC()
{
	SDA_OUT ;
	S_SDA ;
	IIC_Delay() ;
	S_SCL ;
	IIC_Delay() ;
	C_SDA ;
	IIC_Delay() ;
	C_SCL ;
	IIC_Delay() ;
}


void Stop_IIC()             //??
{
	unsigned char t = IIC_STOP_WAIT_VALUE ; 	

	SDA_OUT ;
	C_SCL ;
	IIC_Delay() ;
	C_SDA ;
	IIC_Delay() ;
	S_SCL ;
	IIC_Delay() ;
	S_SDA ;
	IIC_Delay() ;
	while( --t != 0 ) ;
}

/*void Stop_IIC()             //??
{
	SDA_OUT ;
	C_SCL ;
	IIC_Delay() ;
	C_SDA ;
	IIC_Delay() ;
	S_SCL ;
	IIC_Delay() ;
	S_SDA ;
	IIC_Delay() ;
}*/

void Ack()
{
	SDA_OUT ;
	C_SDA ;
	IIC_Delay() ;
	S_SCL ;
	IIC_Delay() ;
	C_SCL ;
	IIC_Delay() ;
			//modified  S_SDA ;
			//modified  IIC_Delay() ;         //add
}


void NoAck()
{
	SDA_OUT ;
	S_SDA ;
	IIC_Delay() ;
	S_SCL ;
	IIC_Delay() ;
	C_SCL ;
	IIC_Delay() ;
}


unsigned char TestAck()           //??
{
	unsigned char ack ;
	IIC_Delay() ;      //add
	IIC_Delay() ;      //add
	SDA_OUT ;          //add
	S_SDA ;		   //add	
	IIC_Delay() ;      //add
	
	IIC_Delay() ;
	IIC_Delay() ;	
	S_SCL ;
	IIC_Delay() ;
	SDA_IN ;    //此步执行完后READ_SDA读到SDA上的植
	IIC_Delay() ;
	ack = READ_SDA ;
	IIC_Delay() ;
	C_SCL ;
	IIC_Delay() ;
	return(ack) ;
}


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 ;
	IIC_Delay() ;
	S_SCL ;
	IIC_Delay() ;
	C_SCL ;
	IIC_Delay() ;
	input = input << 1 ;		
	}
}

unsigned char Read8Bit()
{
	unsigned char temp ,q0 ,rbyte = 0 ;

	SDA_OUT ;		//modified  SDA_IN ;//据说SDA_OUT ;S_SDA ;和SDA_IN效果是一样的
	S_SDA ;                 //add  在读取数据之前,要把SDA 拉高 
        IIC_Delay() ;
	for( temp = 8; temp != 0; temp-- )
	{
	S_SCL ;
	IIC_Delay() ;
	rbyte = rbyte << 1 ;
	SDA_IN ;           //??
	q0 = READ_SDA ;
	if( q0 == IIC_SDA)      //#define 	IIC_SDA  	BIT1 
		rbyte = rbyte | 0x1 ;
	IIC_Delay() ;
	C_SCL ;
	IIC_Delay() ;
	}
	return(rbyte) ;
}



















⌨️ 快捷键说明

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