GY-29-MMA7455发送资料

源代码在线查看: function.lst

软件大小: 1839 K
上传用户: red1
关键词: 7455 MMA GY 29
下载地址: 免注册下载 普通下载 VIP

相关代码

				C51 COMPILER V7.06   FUNCTION                                                              06/22/2010 11:50:31 PAGE 1   
				
				
				C51 COMPILER V7.06, COMPILATION OF MODULE FUNCTION
				OBJECT MODULE PLACED IN function.OBJ
				COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE function.c BROWSE DEBUG OBJECTEXTEND
				
				stmt level    source
				
				   1          #include 
				   2          #include 
				   3          sbit IICSDA = P1^6;
				   4          sbit IICSCL = P1^7;
				   5          bit ack;                        /*应答标志位*/
				   6          
				   7          unsigned char Para[2]={0x45,0x80};
				   8          /****************************************
				   9          延时函数,用于IIC通讯延时 
				  10          *****************************************/ 
				  11          void _Nop()
				  12          {
				  13   1        unsigned char i;
				  14   1        for(i=0;i				  15   1        {
				  16   2         _nop_();
				  17   2        }
				  18   1      }  
				  19          
				  20          
				  21          /*******************************************************************
				  22                               起动总线函数               
				  23          函数原型: void  Start_I2c();  
				  24          功能:     启动I2C总线,即发送I2C起始条件.  
				  25          ********************************************************************/
				  26          void Start_I2c()
				  27          {
				  28   1        IICSDA=1;     /*发送起始条件的数据信号 */
				  29   1        _Nop();
				  30   1        IICSCL=1;
				  31   1        _Nop();       /*起始条件建立时间大于4.7us,延时 */
				  32   1        _Nop();
				  33   1        _Nop();
				  34   1        _Nop();
				  35   1        _Nop();    
				  36   1        IICSDA=0;     /*发送起始信号 */
				  37   1        _Nop();       /* 起始条件锁定时间大于4μs*/
				  38   1        _Nop();
				  39   1        _Nop();
				  40   1        _Nop();
				  41   1        _Nop();       
				  42   1        IICSCL=0;     /*钳住I2C总线,准备发送或接收数据 */
				  43   1        _Nop();
				  44   1        _Nop();
				  45   1      }
				  46          /*******************************************************************
				  47                                 结束总线函数               
				  48          函数原型: void  Stop_I2c();  
				  49          功能:     结束I2C总线,即发送I2C结束条件.  
				  50          ********************************************************************/
				  51          void Stop_I2c()
				  52          {
				  53   1        IICSDA=0;     /*发送结束条件的数据信号 */
				  54   1        _Nop();       /*发送结束条件的时钟信号 */
				  55   1        IICSCL=1;     /*结束条件建立时间大于4μs*/
				C51 COMPILER V7.06   FUNCTION                                                              06/22/2010 11:50:31 PAGE 2   
				
				  56   1        _Nop();
				  57   1        _Nop();
				  58   1        _Nop();
				  59   1        _Nop();
				  60   1        _Nop();
				  61   1        IICSDA=1;     /*发送I2C总线结束信号 */
				  62   1        _Nop();
				  63   1        _Nop();
				  64   1        _Nop();
				  65   1        _Nop();
				  66   1      }
				  67          /*******************************************************************
				  68                           字节数据发送函数               
				  69          函数原型: void  SendByte(uchar c);
				  70          功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 
				  71                    此状态位进行操作.(不应答或非应答都使ack=0)     
				  72                    发送数据正常,ack=1; ack=0表示被控器无应答或损坏。 
				  73          ********************************************************************/
				  74          void  SendByte(unsigned char c)
				  75          {
				  76   1       unsigned char BitCnt;
				  77   1       
				  78   1       for(BitCnt=0;BitCnt				  79   1          {
				  80   2           if((c				  81   2             else  IICSDA=0;                
				  82   2           _Nop();
				  83   2           IICSCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
				  84   2            _Nop(); 
				  85   2            _Nop();             /*保证时钟高电平周期大于4μs*/
				  86   2            _Nop();
				  87   2            _Nop();
				  88   2            _Nop();         
				  89   2           IICSCL=0; 
				  90   2          }
				  91   1          
				  92   1          _Nop();
				  93   1          _Nop();
				  94   1          IICSDA=1;                /*8位发送完后释放数据线,准备接收应答位*/
				  95   1          _Nop();
				  96   1          _Nop();   
				  97   1          IICSCL=1;
				  98   1          _Nop();
				  99   1          _Nop();
				 100   1          _Nop();
				 101   1          if(IICSDA==1)ack=0;     
				 102   1             else ack=1;        /*判断是否接收到应答信号*/
				 103   1          IICSCL=0;
				 104   1          _Nop();
				 105   1          _Nop();
				 106   1      }
				 107          /*******************************************************************
				 108                           字节数据接收函数               
				 109          函数原型: uchar  RcvByte();
				 110          功能:     用来接收从器件传来的数据,并判断总线错误(不发应答信号), 
				 111                    发完后请用应答函数应答从机。  
				 112          ********************************************************************/   
				 113          unsigned char  RcvByte()
				 114          {
				 115   1        unsigned char retc;
				 116   1        unsigned char BitCnt;
				 117   1        
				C51 COMPILER V7.06   FUNCTION                                                              06/22/2010 11:50:31 PAGE 3   
				
				 118   1        retc=0; 
				 119   1        IICSDA=1;                             /*置数据线为输入方式 */
				 120   1        for(BitCnt=0;BitCnt				 121   1            {
				 122   2              _Nop();           
				 123   2              IICSCL=0;                  /*置时钟线为低,准备接收数据位*/
				 124   2              _Nop();
				 125   2              _Nop();                 /*时钟低电平周期大于4.7μs*/
				 126   2              _Nop();
				 127   2              _Nop();
				 128   2              _Nop();
				 129   2              IICSCL=1;                  /*置时钟线为高使数据线上数据有效*/
				 130   2              _Nop();
				 131   2              _Nop();
				 132   2              retc=retc				 133   2              if(IICSDA==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */
				 134   2              _Nop();
				 135   2              _Nop(); 
				 136   2            }
				 137   1        IICSCL=0;    
				 138   1        _Nop();
				 139   1        _Nop();
				 140   1        return(retc);
				 141   1      }
				 142          /********************************************************************
				 143                               应答子函数
				 144          函数原型:  void Ack_I2c(bit a);
				 145          功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
				 146          ********************************************************************/
				 147          void Ack_I2c(bit a)
				 148          {
				 149   1        
				 150   1        if(a==0)IICSDA=0;                  /*在此发出应答或非应答信号 */
				 151   1              else IICSDA=1;
				 152   1        _Nop();
				 153   1        _Nop();
				 154   1        _Nop();      
				 155   1        IICSCL=1;
				 156   1        _Nop();
				 157   1        _Nop();                    /*时钟低电平周期大于4μs*/
				 158   1        _Nop();
				 159   1        _Nop();
				 160   1        _Nop();  
				 161   1        IICSCL=0;                     /*清时钟线,钳住I2C总线以便继续接收 */
				 162   1        _Nop();
				 163   1        _Nop();    
				 164   1      }
				 165          
				 166          /*******************************************************************
				 167                              向有子地址器件发送多字节数据函数               
				 168          函数原型: bit  ISendStr(uchar sla,uchar suba,uchar *s,uchar no);  
				 169          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 
				 170                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 
				 171                    如果返回1表示操作成功,否则操作有误。 
				 172          注意:    使用前必须已结束总线。 
				 173          ********************************************************************/
				 174          bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
				 175          {
				 176   1         unsigned char i;
				 177   1      
				 178   1         Start_I2c();               /*启动总线 */
				 179   1         SendByte(sla);             /*发送器件地址 */
				C51 COMPILER V7.06   FUNCTION                                                              06/22/2010 11:50:31 PAGE 4   
				
				 180   1         if(ack==0)return(0);
				 181   1         SendByte(suba);            /*发送器件子地址 */
				 182   1         if(ack==0)return(0);
				 183   1      
				 184   1         for(i=0;i				 185   1         {   
				 186   2           SendByte(*s);            /*发送数据 */
				 187   2           if(ack==0)return(0);
				 188   2           s++;
				 189   2         } 
				 190   1         Stop_I2c();                /*结束总线 */ 
				 191   1         return(1);
				 192   1      }
				 193          /*******************************************************************
				 194                              向有子地址器件读取多字节数据函数               
				 195          函数原型: bit  ISendStr(uchar sla,uchar suba,uchar *s,uchar no);  
				 196          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件 
				 197                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。 
				 198                     如果返回1表示操作成功,否则操作有误。 
				 199          注意:    使用前必须已结束总线。 
				 200          ********************************************************************/
				 201          bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
				 202          
				 203          {
				 204   1         unsigned char i;
				 205   1      
				 206   1         Start_I2c();                  /*启动总线 */
				 207   1         SendByte(sla);                /*发送器件地址 */
				 208   1         if(ack==0)return(0);
				 209   1         SendByte(suba);               /*发送器件子地址 */
				 210   1         if(ack==0)return(0);
				 211   1      
				 212   1         Start_I2c();                  /*重新启动总线 */
				 213   1         SendByte(sla+1);
				 214   1         if(ack==0)return(0);
				 215   1         for(i=0;i				 216   1         {   
				 217   2           *s=RcvByte();               /*发送数据 */
				 218   2            Ack_I2c(0);                /*发送就答位*/  
				 219   2           s++;
				 220   2         } 
				 221   1         *s=RcvByte();
				 222   1         Ack_I2c(1);                   /*发送非应位*/
				 223   1         Stop_I2c();                   /*结束总线 */ 
				 224   1         return(1);
				 225   1      }
				 226          
				 227          /*********************************
				 228             串口初始化 
				 229          *********************************/
				 230          void UART_Init()
				 231          {
				 232   1        P1M1=0x0C0;
				 233   1        P1M2=0x0C0; //端口初始化 
				 234   1        SCON=0x50; //使能接收选择串口模式1
				 235   1        SSTAT=0xE0; //选择独立的Tx/Rx中断 
				 236   1        BRGR0=0x0f0; //9600 baud @ 7.373MHz
				 237   1        BRGR1=0x02;
				 238   1        BRGCON =0x03; //使能BRG
				 239   1        ES=1; //ESR=Enable Serial Recieve
				 240   1        //EA=1; //使能中断 
				 241   1      }
				C51 COMPILER V7.06   FUNCTION                                                              06/22/2010 11:50:31 PAGE 5   
				
				 242          //---------------------------
				 243          /*********************************
				 244             按键端口初始化 
				 245          *********************************/
				 246          void IO_Init()
				 247          {
				 248   1        P0M1=0x00;
				 249   1        P0M2=0x00; //端口初始化 
				 250   1        P0=0x0FF;
				 251   1        /*
				 252   1        KBPATN = 0x00;//赋初值 ,KBI0=0
				 253   1        KBCON = 0x00;//值不同时中断 
				 254   1        KBMASK = 0x01; //KBI0使能 
				 255   1        EKBI = 1;
				 256   1        */
				 257   1      }
				 258          /*********************************
				 259             MMA7455L初始化 
				 260          *********************************/
				 261          void MMA7455L_Init()
				 262          {
				 263   1        ISendStr(0x3A,0x16,&Para[0],1);//2g ,Measurement Mode
				 264   1        _Nop();
				 265   1        ISendStr(0x3A,0x18,&Para[1],1);//125HZ,x,y,z axis enable,INR1 is use ,P/N threshold value
				 266   1        _Nop();
				 267   1        
				 268   1      }
				 269          /////////////调试用,用户可以屏蔽////////////////
				 270          /*********************************
				 271             发送数据 
				 272          *********************************/
				 273          void SendData (char temp)
				 274          {
				 275   1        SBUF=temp; //发送数据 
				 276   1        while(TI==0); //当TI为1时发送完毕 
				 277   1        TI=0; //TI清0准备下一次发送 
				 278   1      }
				 279          //////////////////////////////////////////////////
				 280          /*********************************
				 281             初始化定时器 
				 282          *********************************/
				 283          void InitTimer()
				 284          {
				 285   1        TMOD=0X01;
				 286   1        TAMOD=0X00;
				 287   1        TH0=0X00;
				 288   1        TL0=0X00;
				 289   1        ET0=1;
				 290   1        TR0=1;
				 291   1      }
				
				
				MODULE INFORMATION:   STATIC OVERLAYABLE
				   CODE SIZE        =    445    ----
				   CONSTANT SIZE    =   ----    ----
				   XDATA SIZE       =   ----    ----
				   PDATA SIZE       =   ----    ----
				   DATA SIZE        =      2      12
				   IDATA SIZE       =   ----    ----
				   BIT SIZE         =      1       1
				END OF MODULE INFORMATION.
				
				
				C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
							

相关资源