搜索
bottom↓
回复: 3

请问我的MMA7660程序哪里有问题?

[复制链接]

出0入0汤圆

发表于 2012-7-23 13:40:54 | 显示全部楼层 |阅读模式
麻烦各位请看看我的程序哪里有问题MMA7660 三轴数据怎么读不出来?谢谢!
//********************************************************/
#include<reg51.h>
#include "intrins.h"

sbit SDA=P2^5; //IIC数据线定义
sbit SCL=P2^6; //IIC时钟线定义


  unsigned  char j;
  unsigned  char  txbuf;
  unsigned  char  rxbuf;
  unsigned  char  addr;
  unsigned  char  flag;
  unsigned  char  buff1[6];
  unsigned  char  x1;
  unsigned   char k;

void   IIC_start();
void   IIC_STAOP();
void    iic_ack();
void   delay();
void   delay1();
void   read();

void  wtite0();
void  ic_rx();
void  ic_tx();
void  ic_eeread();

void sendbyte(unsigned char bytebuf)
{
        SBUF=bytebuf;
        while(!TI);       
    TI=0;          
}

void IIC_start(void)
{
        SDA=1;
        SCL=1;
        delay();
        SDA=0;
        delay();
        SCL=0;

}
//************************************************
//送停止位 SDA=0->1
void IIC_stop(void)
{
        SDA=0;
        delay();
        SCL=1;
        delay();
        SDA=1;
    delay();
}

//===============================================

//====================================
                void        ic_tx()
                {
                    unsigned  char cnt;
                _nop_();
                for(cnt=0;cnt<8;cnt++)
                {
        delay();
                if((txbuf&0x80)==0x80)
                SDA=1;          
                else
                SDA=0;   
                 delay();
                SCL=1;  
                delay();
                txbuf=(txbuf<<1);
                SCL=0;   
                }
//========================
                delay();
                SDA=1;            
                 delay();
                flag=flag&0xfd;;
                SCL=1;     
                delay();
                if(SDA==1)
                flag=flag|0x02;
                SCL=0;   
                }

//=========================================
        void        ic_rx()
                {
            unsigned  char cnt;
                _nop_();;
                rxbuf=0;
                for(cnt=0;cnt<8;cnt++)
                {
                delay();
                SCL=1;
                CY=0;
                rxbuf=(rxbuf<<1);
                delay();
                if(SDA==1)
                rxbuf=(rxbuf|0x01);
                SCL=0;
                }
                }
//==============================================
                void        ic_eeread()
                {
                unsigned  char i;
                IIC_start();
                txbuf=0x98;          //写入
                ic_tx();
                txbuf=addr;          
                ic_tx();

                IIC_start();

                txbuf=0x99;          //读出
       
                ic_tx();
//==========================
                i=0;
                for(; x1!=0;x1--)
                {
                ic_rx();

                buff1[i]=rxbuf;
                i++;
                _nop_();
                SDA=0;  
                delay();
                SCL=1;
                delay();
                SCL=0;
                }
//=========================               
                _nop_();
                SDA=1;  
                delay();
                SCL=1;       
                delay();
                SCL=1;       
                IIC_stop();
                }
//============================================
  void   delay()
  {
   unsigned  char  f;
   f=0;
  while(f<20)
  {
  f++;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
   _nop_();
   _nop_();
  }
  }


void   delay1()
  {
   unsigned  char  f;
   f=90;
  while(f<250)
  {
  f++;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
   _nop_();
   _nop_();
  }
  }










void main()
{  unsigned char x, y, z;

         unsigned int p;
   
           TMOD=0x20; //选择定时器1
        PCON=0x00; ///波特率不加倍
        SCON=0x50; //串行工作方式1允许串行接收
        TH1=0xFB; //晶振位18.432MHZ,选择波特率为9600
        TL1=0xFB; //在相应计数器上赋值
        EA=1; //总中断开启
        ES=1; //串行中断开启
        TR1=1; //开启定时器1      
          
       

           x1=3;
           k=0;
           addr=1;
          
           for(x=0;x<6;x++)
           {
       write0();
           addr+=2;
              p=0;
           while(p<100)
           {delay1();
           delay1();
           delay1();
            p++;
                  }

           }

           p=0;
           while(p<600)
           {
           delay1();
           delay1();
           delay1();
            p++;

           }



        while(1)
        {       
   
                x1=3;
                addr=0x00;         //X轴地址
                ic_eeread();  //读三轴数据

                for(k=0;k<6;k++)
                {
                sendbyte(buff1[k]);
                }

           p=0;
           while(p<600)
           {
           delay1();
           delay1();
           delay1();
            p++;

           }
        }

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-7-23 17:12:28 | 显示全部楼层
MMA7660 三轴 静态数据是多少/

出0入0汤圆

发表于 2012-7-23 17:32:49 | 显示全部楼层
你没有初始化好,
首先你得设置好工作模式,然后设置进入工作状态,
需要特别注意的是,一旦设置进入工作状态后不能修改工作模式了的!

出0入0汤圆

发表于 2012-9-11 09:42:24 | 显示全部楼层
        F_IIC_Write(MODE,0x00);//Stand mode
        F_IIC_Write(INTSU,0x40);         //  SHINT X SHINT Y SHINT Z GINT ASINT PDINT PLINT FBINT
                                                                  //0           1        0           0             0         0      0      0

        F_IIC_Write(SPCNT,0x00);        //SPCNT
        F_IIC_Write(PDET,0xE0);        //PDET
        F_IIC_Write(SR,0x00);        //SR
        F_IIC_Write(PD,0x00);        //PD
        F_IIC_Write(MODE,0x41);//59
这样初始化,在Y轴有加速度的时候可以产生中断,并能读出相应的值,但感觉灵敏度不够。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-28 07:14

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

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