关于msp430g2231控制外部eeprom

2019-03-24 13:34发布

我选用的外部eeprom是24c64,之前所用单片机是使用usci模块完成的,但是在g系列只有usi模块,
请问只种情况下如何控制外部eeprom,能否提供一些关键代码,谢谢
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
457887107
2019-03-25 07:31
#include "msp430g2553.h"
//#include "5110/nokia_5110.h"
#include "stdio.h"


char str[100];
void delay(unsigned int ms)
{
  unsigned int x,y;
  for(x=ms;x>0;x--)
    for(y=1140;y>0;y--);
}

unsigned char rx1,rx2;

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  
//  LCD_init();
//  LCD_clear();
//  LCD_write_english_string(0,0,"TEST");
//  sprintf(str, "%x", 255);
//  LCD_write_english_string(0,1,str);
  
   
  P1SEL |= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  P1SEL2|= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST+UCMODE_3+UCSYNC;         // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_2+UCSWRST;              // Use SMCLK, keep SW reset
  UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
  UCB0BR1 = 0;
  UCB0I2CSA = 0x50;                         // Set slave address
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
//  IE2 |= UCB0RXIE;                          // Enable RX interrupt
//  IE2 |= UCB0TXIE;
  //TACCTL0 = CCIE;                           // TACCR0 interrupt enabled
  //TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode

  while(1)
  {
  UCB0CTL1 |= UCTR + UCTXSTT;
  UCB0TXBUF = 0x0f6;
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  UCB0TXBUF = 0x00f;
  __delay_cycles(100);
  UCB0CTL1 |= UCTXSTP;
   
  //__delay_cycles(1000);
  delay(100);
  
  UCB0CTL1 |= UCTR + UCTXSTT;
  UCB0TXBUF = 0x0f6;
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  UCB0TXBUF = 0x000;
  __delay_cycles(100);
  UCB0CTL1 |= UCTXSTP;
   delay(100);
   
   
   UCB0CTL1 |= UCTR + UCTXSTT;
  UCB0TXBUF = 0x001;
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  UCB0TXBUF = 0x0ab;
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  UCB0CTL1 |= UCTXSTP;
   delay(100);
   
   
   UCB0CTL1 |= UCTR + UCTXSTT;
  UCB0TXBUF = 0x002;
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  UCB0TXBUF = 0x0cd;
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  UCB0CTL1 |= UCTXSTP;
   delay(100);
   

   UCB0CTL1 |= UCTR + UCTXSTT;
  UCB0TXBUF = 0x001; //eeprom 00h-3fh
  while (UCB0CTL1 & UCTXSTT);
  __delay_cycles(100);
  
  
     UCB0CTL1 &= ~UCTR;
     IFG2 &= ~UCB0TXIFG;
   UCB0CTL1 |=  UCTXSTT; //接收模式
   //_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
   while (UCB0CTL1 & UCTXSTT);
   while ( (IFG2 & UCB0RXIFG)==0 );
   
   rx1 = UCB0RXBUF;
   
   //IFG2 &=~ UCB0RXIFG;
   //while ( (IFG2 & UCB0RXIFG)==0 );
   
   UCB0CTL1 |= UCTXSTP;

   rx2 = UCB0RXBUF;
   __delay_cycles(100);
   
   if((rx1 == 0xab)&&(rx2 == 0xab))
   {
    P1DIR |= BIT0;
    P1OUT |= BIT0;
   }
   else
   {
    P1DIR |= BIT0;
    P1OUT &= ~BIT0;
   }
   
   
  }
  
   
  
  return 0;
}

一周热门 更多>

相关问题

    相关文章