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

📄 i2cdemo.c

📁 用msp430单片机MSP430F425控制i2c读写的例子.
💻 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 + -