📄 i2cdemo.c
字号:
#include "msp430x42x.h"
//*************************************************** ______***************
// MSP-Test42x Demo - test pct8574 | |
// ------------->} pct | address=0x40
// MSP430F425 | -------->| 8574 |
// ----------------- | | | |
// /|\| XIN|- | | ------
// | | | | |
// --|RST XOUT|- | | _____
// | | | | | |
// | SDA P1.3|-----|----|-------->| pct | address=0x4e
// | | | |8574 |
// | SCL P1.4|----------|-------->| |
// -----
//
// Deng Lixin
// CDPC
// 1 29 2005
// Built with IAR Embedded Workbench Version: V3.10A
//************************************************************************
#define SCL 0X10;
#define SDA 0X08;
#define pct8574_addr 0x40;
int key_bate;
int Ack_Flag;
void Delay(int m)
{
while(m-- > 0);
}
void Start(void)
{
P1OUT = 0;
P1DIR &= ~SCL;
P1DIR &= ~SDA;//SET HIGH LEVEL
P1DIR |= SDA;
P1DIR |= SCL;
}
void Stop(void)
{
P1DIR |= SDA;
P1DIR &= ~SCL;
P1DIR &= ~SDA;
P1DIR |= SCL;
}
void Send_Byte(char Byte)
{
int i;
for (i=0;i<8;i++)
{
if(Byte & 0x80)
{
P1DIR &= ~SDA;
}
else
{
P1DIR |= SDA;
}
P1DIR &= ~SCL;
Delay(50);
P1DIR |= SCL;
Byte = Byte << 1;
}
}
void Ack(void)
{
P1DIR &= ~SDA;
P1DIR &= ~SCL;
Ack_Flag = 0;
Delay(10);
if ((P1IN & 0x08))
{
Ack_Flag = 1;
}
P1DIR |= SCL;
Delay(10);
}
void NOAck(void)
{
P1DIR &= ~SDA;
Delay(10);
P1DIR &= ~SCL;
Delay(10);
P1DIR |= SCL;
Delay(10);
P1DIR |= SDA;
}
void Receive_Byte(void)
{
int j,R_word;
R_word = 0x00;
P1DIR &= ~SDA;
for(j=0;j<8;j++)
{
P1DIR &= ~SCL;
if(P1IN & 0x08)
{
R_word |= 0x01;
}
else
{
R_word &= 0xFE;
}
P1DIR |= SCL;
R_word = R_word << 1;
}
R_word = R_word >>1;
key_bate=R_word;
}
void I2C_Write(int W_IO)
{
Start();
Delay(20);
Send_Byte(0x4e);//write a byte :slave device
Ack();
Send_Byte(W_IO);// write a byte :e2prom address
Ack();
Stop();
}
void I2C_Random_Read(void)
{
Start();
Send_Byte(0x40);
Ack();
Send_Byte(0xff);
Ack();
Start();
Send_Byte(0x41);
Ack();
Receive_Byte();
NOAck();
Stop();
}
void main(void)
{
P1DIR = 0XFF;
WDTCTL = WDTHOLD+WDTPW;
while(1)
{
Delay(500);
I2C_Write(00);
I2C_Write(0xff);
I2C_Write(01);
I2C_Write(02);
I2C_Write(04);
I2C_Write(0x08);
I2C_Random_Read();
Delay(500);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -