有关msp430g2553 io口模拟i2c的问题

2019-07-27 18:42发布

我用msp430f5529控制ds3231时钟芯片,采用IO口模拟I2C,程序正确,时间可以正常工作,

当我用msp430g2553控制ds3231时,也是用IO口模拟I2C,程序基本一样,与5529的程序的唯一区别是时钟不一样,但是G2553却不行,显示为00;请问是什么原因?
5529的时钟程序如下:

  1. #define CPU_F          ((double)4000000)
  2. #define delay_us(x)      __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  3. #define delayus(x)      __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  4. #define delay_ms(x)         __delay_cycles((long)(CPU_F*(double)x/1000.0))
  5. #define DelayMS(x)         __delay_cycles((long)(CPU_F*(double)x/1000.0))
  6. void clk_init()
  7. {
  8.           P5SEL |= BIT2+BIT3;                       // Port select XT2

  9.           UCSCTL6 &= ~XT2OFF;                       // Enable XT2
  10.           UCSCTL3 |= SELREF_2;                      // FLLref = REFO
  11.                                                     // Since LFXT1 is not used,
  12.                                                     // sourcing FLL with LFXT1 can cause
  13.                                                     // XT1OFFG flag to set
  14.           UCSCTL4 |= SELA_2;                        // ACLK=REFO,SMCLK=DCO,MCLK=DCO

  15.           // Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles
  16.           do
  17.           {
  18.             UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
  19.                                                     // Clear XT2,XT1,DCO fault flags
  20.             SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  21.           }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  22.           UCSCTL6 &= ~XT2DRIVE0;                    // Decrease XT2 Drive according to
  23.                                                     // expected frequency
  24.           UCSCTL4 |= SELS_5 + SELM_5;               // SMCLK=MCLK=XT2
  25.           UCSCTL5 |= DIVS_2;
  26. }
复制代码2553的时钟程序如下:
  1. #define CPU_F          ((double)16000000)
  2. #define delay_us(x)      __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  3. #define delayus(x)      __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  4. #define delay_ms(x)         __delay_cycles((long)(CPU_F*(double)x/1000.0))
  5. #define DelayMS(x)         __delay_cycles((long)(CPU_F*(double)x/1000.0))
复制代码
  1. BCSCTL1 = CALBC1_16MHZ;                // Set DCO to 1, 8, 12 or 16MHz
  2.        DCOCTL = CALDCO_16MHZ;
复制代码5529现象如下(工作正常):
IMG_20141024_214927.jpg

2553现象如下(一直显示00,i2c工作不正常):
IMG_20141024_212209.jpg





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。