?? iicfor430.c
字號:
#include <MSP430x14x.h>
//#include "SysType.h"
#include "CLKReadWrite.h"
//作者:盧益貴 2008-1-8 上傳 QQ:48092788
#define SCL 0x04 /* P2.1 */
#define SDA 0x02 /* P2.2 */
#define ADDR_I2CWRITE 0x64
#define ADDR_I2CREAD 0X65
#define ADDR_I2CSECOND 0X00
void InitCLK(void)
{
P2SEL &= ~(SCL | SDA);
P2DIR |= SCL;
P2DIR &= ~SDA;
P2OUT |= SCL;
CLKInit();
}
void Delay(unsigned char bLong)
{
while(bLong)
bLong--;
}
void I2CStart( void )
{
Delay( 0 );
P2OUT |= SDA;
Delay( 0 );
P2OUT |= SCL;
Delay( 0 );
P2OUT &=~ SDA;
Delay( 0 );
P2OUT &=~ SCL;
Delay( 0 );
}
void I2CStop( void )
{
Delay( 0 );
P2OUT &=~ SDA;
Delay( 0 );
P2OUT |= SCL;
Delay( 0 );
P2OUT |= SDA;
Delay( 0 );
}
void I2CAck( void )
{
Delay( 0 );
P2OUT &=~ SDA;
Delay( 0 );
P2OUT |= SCL;
Delay( 0 );
P2OUT &=~ SCL;
Delay( 0 );
}
void I2CNoAck( void )
{
Delay( 0 );
P2OUT |= SDA;
Delay( 0 );
P2OUT |= SCL;
Delay( 0 );
P2OUT &=~ SCL;
Delay( 0 );
}
void I2CTestAck( void )
{
Delay( 0 );
P2DIR &=~SDA;
Delay( 0 );
P2OUT |= SCL;
Delay( 0 );
P2DIR |=SDA;
Delay( 0 );
P2OUT &=~ SCL;
Delay( 0 );
}
void I2CWrite( unsigned char Data )
{
auto unsigned char i;
for( i = 8 ; i != 0 ; i--)
{
if ( Data & 0x80 )
P2OUT |= SDA;
else
P2OUT &=~ SDA;
P2OUT |= SCL;
Delay( 0 );
P2OUT &=~ SCL;
Delay( 0 );
Data = Data << 1;
}
}
unsigned char I2CRead( void )
{
auto unsigned char i , Result = 0;
P2DIR &=~SDA;
for( i = 8 ; i != 0 ; i-- )
{
P2OUT |= SCL;
Result = Result << 1;
Delay( 0 );
if ( ( P2IN & SDA ) == SDA )
Result = Result | 0X01;
P2OUT &=~ SCL;
Delay( 0 );
}
P2DIR |= SDA;
return( Result );
}
void CLKInit( void )
{
I2CStart();
I2CWrite( ADDR_I2CWRITE );
I2CTestAck();
I2CWrite( 0xe0 );
I2CTestAck();
// I2CWrite( 0xc3 );
I2CWrite( 0x00 );
I2CTestAck();
I2CWrite( 0x20 );
I2CTestAck();
I2CStop();
}
void SetDateTimeCLK( unsigned char *DT )
{
auto unsigned char i = 6;
I2CStart();
I2CWrite( ADDR_I2CWRITE );
I2CTestAck();
I2CWrite( ADDR_I2CSECOND );
I2CTestAck();
I2CWrite( *DT + *( DT+ 7 ) );
DT++;
I2CTestAck();
while( i > 0 )
{
I2CWrite( *DT++ );
I2CTestAck();
i--;
}
I2CStop();
}
void GetDateTimeCLK( unsigned char *DT )
{
auto unsigned char i = 0;
I2CStart();
I2CWrite( ADDR_I2CWRITE );
I2CTestAck();
I2CWrite( ADDR_I2CSECOND );
I2CTestAck();
I2CStart();
I2CWrite( ADDR_I2CREAD );
I2CTestAck();
while( i < 7 )
{
*DT = I2CRead();
*DT++ = ( *DT >> 4 ) * 10 + *DT % 16;
I2CAck();
i++;
}
*DT = I2CRead();
I2CNoAck();
I2CStop();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -