📄 iic.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 + -