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

📄 test44x_e2prom.c

📁 ADC12操作 DATA FLASH操作 EEPROM操作 FLASH读写操作 LCD点阵操作 TIMER_A_操作 Timer_B操作 比较器A操作 端口操作 基
💻 C
字号:
#include "msp430x44x.h"
//************************************************************************
//   MSP-Test44x Demo - test 24LC01
//
//                 MSP430F449
//             -----------------
//         /|\|              XIN|-  
//          | |                 |    ------
//          --|RST          XOUT|-  |  2   |
//            |                 |   |  4   |
//            |             P4.6|-->|  L   |
//            |                 |   |  C   |
//            |             P4.7|-->|  0   |
//                                  |  1   |
//                                  |______|
//  Lierda, Inc                      E2PROM 
//  February 2006.03                
//  Built with IAR Embedded Workbench Version: 3.40a
//  ID:  MSP430-TEST44X
//  DATA:2005-7-12
//  REV: 2.0A
//  程序功能:该程序是用F449来控制对外部E2PROM的但字节的读写,其E2PROM的时钟线和数据线分别是P4.6和P4.7,E2PROM的
//            写入地址是0X2AH,写入内容是40H,从E2PORM读出的内容放在F449MEMORY的250单元地址,可以通过查看MEMORY的
//            250单元地址的内容来判断写入是否正确。
//  硬件连接:连接短接器。
//            
//************************************************************************
#define SCL   0X40;		
#define SDA   0X80;		
#define Ram_addr 0x250;

int R_word;  
int Ack_Flag;

void Delay(int m)
{
   while(m-- > 0);
}

void Start(void)
{
  P4OUT = 0;
  P4DIR &= ~SCL;
  P4DIR &= ~SDA;//SET HIGH LEVEL
  P4DIR |= SDA;
  P4DIR |= SCL;
  
}

void Stop(void)
{
  P4DIR |= SDA;
  P4DIR &= ~SCL;
  P4DIR &= ~SDA;
  P4DIR |= SCL;
}


void Send_Byte(char Byte)
{
  int i;
  for (i=0;i<8;i++)
  {
    if(Byte & 0x80)
    {
      P4DIR &= ~SDA;
    }
    else
    {
      P4DIR |= SDA; 
    }
    P4DIR &= ~SCL;
    Delay(50);
    P4DIR |= SCL;
   Byte = Byte << 1;
  } 
}

void Ack(void)
{
  P4DIR &= ~SDA; 
  P4DIR &= ~SCL;
  Ack_Flag = 0;
  Delay(10);
  if ((P4IN & 0x80))
  {
    Ack_Flag = 1;
  }
  P4DIR |= SCL;
  Delay(10);
}

void NOAck(void)
{
  P4DIR &= ~SDA;
  Delay(10);
  P4DIR &= ~SCL;
  Delay(10);
  P4DIR |= SCL;
  Delay(10);
  P4DIR |= SDA;
}

void Receive_Byte(void)
{

  int j;
  R_word = 0x00;
  P4DIR &= ~SDA;
  for(j=0;j<8;j++)
  {
    P4DIR &= ~SCL;
    if(P4IN & 0x80)
    {
      R_word |= 0x01;
    }
    else
    {
      R_word &= 0xFE;
    }
    //Delay(50);
    P4DIR |= SCL;
    R_word = R_word << 1;
   }
   R_word = R_word >>1; 
}

void I2C_Write(int W_addr,int word)
{
  
  while (1)
  {
    
    Start();
    Delay(20);
    Send_Byte(0xA0);//write a byte :slave device
    Ack();
    if (Ack_Flag)
       continue;
    Send_Byte(W_addr);// write a byte :e2prom address
    Ack();
    if(Ack_Flag)
       continue;
    
    Send_Byte(word);
    Ack();
    if(!(Ack_Flag))
       break;
  }
  Stop();
  
}

void I2C_Random_Read(int R_addr)
{
  int *paddr;
  paddr = (int*)Ram_addr;
  while(1)
  {
    Start();
    Send_Byte(0xA0);
    Ack();
    if(Ack_Flag)
      continue;
    Send_Byte(R_addr);
    Ack();
    if(Ack_Flag)
      continue;
    Start();
   Send_Byte(0xA1);
    Ack();
   if(!Ack_Flag)
     break;
 }
  Receive_Byte();
  *paddr = R_word; 
  NOAck();
  Stop();

   
}

void main(void)
{
  P4DIR = 0XFF;
  WDTCTL = WDTHOLD+WDTPW;
  while(1)

  { 
    I2C_Write(0x2A,0x40);
    Delay(500);
    I2C_Random_Read(0x2A);
   } 
  
}

⌨️ 快捷键说明

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