搜索
bottom↓
回复: 2

求助,msp430与mpu9150之间iic通信运行出错

[复制链接]

出0入0汤圆

发表于 2014-3-19 10:51:52 | 显示全部楼层 |阅读模式
本帖最后由 guessyou 于 2014-3-19 11:10 编辑

在用iic在msp430和mpu9150陀螺仪之间通信,先用Jtag调试的时候,单步或者全速运行都可以正确读取陀螺仪的数据;
拔掉Jtag后,让单片机自己跑程序也可以正确运行;
但如果此时将电路板断电重新上电复位后(Jtag仍未连接)iic读出来的数据就全变成了0XFF。。

有木有人遇到过这么奇葩的情况啊,本来想可能是调试的时候延时和单片机自己跑的时候不一样,但是加了很多延时也没用,而且在没重新复位前断开jtag程序自己结果还是正确的,求各位大侠给给意见~

后来在网上查有人说是因为调试时用的是Jtag的时钟 reset后的时钟可能不对 但是我的程序里串口还是正常运行的 这样一来也不是时钟的问题吧?

程序:
#include<msp430f2274.h>
#include"main.h"

#include "IIC.h"
#include"BTuart.h"

//#define RESIZE 20   // UART receive area /Byte
//#define Char_ADC_Size 146  //shall change to 145
//#define Char_ADC_Page_Size 730    //5*146=730
//#define SE_Size 7

//extern unsigned char Char_ADC[Char_ADC_Page_Size];  
#define NOP()                                __asm("nop")

#define IICSDA                (0x01<<3)
#define IICSCL                (0x01<<4)
#define IICINT                        (0x01<<0)

#define sdain P2DIR &= (~IICSDA)        //P2.4输入
#define sdaout P2DIR |= IICSDA        //P2.4输出
#define sclh P2OUT |= IICSCL
#define scll P2OUT &= (~IICSCL)
#define sdah P2OUT |= IICSDA
#define sdal P2OUT &= (~IICSDA)
#define sdav (P2IN>>3 & 0x01)

void init_IIC()
{
//        P1DIR |= IICINT;                        //P1.0输出
//        P1OUT &= (~IICINT);                //MPU_INT
        P2DIR |= IICSCL;                 //P2.3 MPU_SCL输出
}

/////////24C08读写驱动程序////////////////////
//void flash()
//{  NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
// NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
//  NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
//   NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
//   NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
//      NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
//   NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();

//}

void delay_kus( unsigned int k )
{
while(k--)
{NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();};

}

void x24c01_init()  //24c08初始化子程序
{sdaout; sclh; delay_kus(10); sdah; delay_kus(10);}

void start()        //启动I2C总线
{sdaout; sdah; sclh; delay_kus(10); sdal; delay_kus(10); scll; delay_kus(10);
}

void stop()         //停止I2C总线
{  sdaout;  sdal; sclh; delay_kus(10); sdah; delay_kus(10);scll;delay_kus(10);sclh;}

void SendAck(unsigned char Ack)
{
    sdaout;
    if(Ack)
    {
      sdah;  
    }
    else
    {
      sdal;
    }
    //ack (0:ACK 1:NACK)
    sclh; delay_kus(10);
    scll; delay_kus(10);
}
void ReadAck(void)
{   
    sdah;sdain;
    sclh; delay_kus(10);
    sdav;
//    while ((sdav==1)&&(i<200))i++;
//    while(sdav == 1);
    scll; delay_kus(10);
}
void writex(unsigned char j)  //写一个字节
{  unsigned char i;
   sdaout;
   for (i=0;i<8;i++)
   { if(j&0x80) sdah; else sdal;j <<= 1; sclh; delay_kus(10);scll; delay_kus(10);}
   ReadAck();
}

unsigned char readx()   //读一个字节
{
   unsigned char i,j,k=0;
   sdah;
   sdain;
   delay_kus(10);
   for (i=0;i<8;i++)
   {
      //scll;
      //delay_kus(5);
      sclh;
      k <<=1;
      delay_kus(10);
      if (sdav==1) j=1;
      else j=0;
      k |= j;
      delay_kus(6);
      scll;
      delay_kus(10);
   }
    return(k);
}


阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-3-19 10:57:00 | 显示全部楼层
检查下陀螺仪初始化是否正确

出0入0汤圆

 楼主| 发表于 2014-3-19 11:14:37 | 显示全部楼层
cc1989summer 发表于 2014-3-19 10:57
检查下陀螺仪初始化是否正确

陀螺仪好像是正确的 我用示波器看过陀螺仪的SDA和SCL,输出是有数据的 SDA不全是高电平哎╮(╯▽╰)╭
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 13:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表