?? iic.c
字號:
#include <msp430x14x.h>
#include "tmp175.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 + -