⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.lst

📁 GY-29-MMA7455发送资料
💻 LST
字号:
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 <reg922.h>
   2          #include <intrins.h>
   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<10;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<8;BitCnt++)  /*要传送的数据长度为8位*/
  79   1          {
  80   2           if((c<<BitCnt)&0x80)IICSDA=1;   /*判断发送位*/
  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<8;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<<1;
 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<no;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<no-1;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)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -