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

📄 24c01-f440.c

📁 里面包括很多的驱动程序的
💻 C
字号:
MSP430F449与24C01通讯程序 调试成功     作者:wjguo888
#include "msp430x44x.h"
//P4.7  SDA
//P4.6  SCL
#define SDA_0  (P4DIR|=BIT7)
#define SDA_1  (P4DIR&=~BIT7)
#define SCL_0  (P4DIR|=BIT6)
#define SCL_1  (P4DIR&=~BIT6)
#define DIR_OUT  (P4DIR|=BIT7)
#define DIR_IN   (P4DIR&=~BIT7)
void Delay(unsigned int n);
void Start(void);
void Stop(void);
void Send_Byte(unsigned char data);
unsigned char Receive_Byte(void);
void Ack(void);
void I2C_ACK(unsigned char tm);
void Send_word(void);
void Receive_word(void);
unsigned char *D,*M,ADD,Ack_Flag;
unsigned int MPM[16];
unsigned int DDT[16]={0xf316,0x6921,0xd315,0xc523,0xb628,0x8525,0xc324,0xd716,0xf316,0x6921,0xd315,0xc523,0xb628,0x8525,0xc324,0xd716};
void main(void)
{   unsigned int i;
    WDTCTL=WDTPW+WDTHOLD;
    D=(char*)DDT;
    ADD=0;                               //24C01内数据读写首地址
    M=(char*)MPM;
    for(i=0;i<4;i++)
      {  Send_word();
         Delay(1000);
         ADD+=8;
      }
       ADD=0;
       Receive_word();
}
/*****************************************延时*/
void Delay(unsigned int n)
{
  while(n-- > 0);
}
//*****************************************开始
void Start(void)
{   P4OUT&=0x3F;
    SDA_1;
    SCL_1;
    SDA_0;
    SCL_0;
}
//******************************************停止
void Stop(void)
{   SCL_0;
    SDA_0;
    SCL_1;
    SDA_1;
}
//***************************************发送一个字节
void Send_Byte(unsigned char data)
{   unsigned char BI,i;
    BI=0x80;  
    for(i=0;i<8;i++)
     {  if((data&BI)==BI) SDA_1;
          else SDA_0;
        SCL_1;
        Delay(50);
        SCL_0;
        BI>>=1;
    }
}
//********************************************写完一个字节判断应答
void Ack(void)
{       DIR_IN;
        SCL_1;
        Ack_Flag = 0;
        Delay(10);
        if ((P4IN & BIT7))
         {
            Ack_Flag = 1;
         }
        SCL_0;
        Delay(10);
}
//*******************************************接收一个字节
unsigned char Receive_Byte(void)
{       unsigned char i,temp=0x80,tempdata;
        tempdata=0;
        DIR_IN;
        for(i=0;i<8;i++)
         {  
            SCL_1;
            if((P4IN&BIT7)==BIT7) tempdata|=temp;
            temp>>=1;
            SCL_0;
         }
    return(tempdata);
}
//************************************************接收一个字节后发送应答信号
void I2C_ACK(unsigned char tm)
{        
        if(tm==0) SDA_0;
          else SDA_1;
        Delay(10);
        SCL_1;
        Delay(10);
        SCL_0;
        Delay(10);   
}
//*************************************************发送一个数组
void Send_word(void)
{   unsigned char i;
  while(1)       
  {  Start();
    Delay(20);
    Send_Byte(0xA0);
    Ack();
    if (Ack_Flag) continue;
    Send_Byte(ADD);
    Ack();
    if (Ack_Flag) continue;
    for(i=0;i<8;i++)
    {
     Send_Byte(*D++);
     Ack();
     if (Ack_Flag) continue;
    }
    if (!Ack_Flag) break;
  }
    Stop();   
}
//************************************************接收一个数组
void Receive_word(void)
{   unsigned char i;
  while(1)
  {  Start();
    Send_Byte(0xA0);
    Ack();
    if (Ack_Flag) continue;
    Send_Byte(ADD);
    Ack();
    if (Ack_Flag) continue;
    Start();
    Send_Byte(0xA1);
    Ack();
    if (Ack_Flag) continue;
    for(i=0;i<31;i++)
    { *M++=Receive_Byte();
      I2C_ACK(0);
    }
    Delay(5);
    *M=Receive_Byte();
    I2C_ACK(1);
    if (!Ack_Flag) break;
  }
   Stop();  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -