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

📄 comram.lst

📁 这是一个单片机的项目
💻 LST
字号:
C51 COMPILER V7.50   COMRAM                                                                03/17/2008 11:03:29 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE COMRAM
OBJECT MODULE PLACED IN ComRam.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ComRam.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /****************************************************************************************
   2          File: ComRam.c
   3          Description:用来读写公共RAM的IIC程序。
   4          Author: ganzi535@qq.com Joehill.Net@qq.com
   5          Date:   September,2007
   6          ****************************************************************************************/
   7          #include<string.h>
   8          #include <SM89516A.h>
   9          #include<intrins.h>
  10          #include"SerialPort.h"
  11          
  12          #define uchar unsigned char
  13          #define uint  unsigned int
  14          
  15          #define WRITE 0xa0
  16          #define READ  0xa1 
  17          #define DELAY 5
  18          
  19          /*端口位定义*/
  20          sbit SCL=P0^0;            /*模拟I2C时钟控制位*/
  21          sbit SDA=P0^1;            /*模拟I2C数据传送位*/
  22          
  23          bit  AckCom;          /*应答标志位*/
  24          
  25          
  26          /****************************************************************************************
  27          功能:ComStart,起动总线函数.
  28          描述:启动I2C总线,即发送I2C起始条件.
  29          参数:无
  30          返回:无
  31          ****************************************************************************************/
  32          void ComStart()
  33          {
  34   1        SDA=1;   /*发送起始条件的数据信号*/
  35   1        Delay(DELAY);
  36   1      
  37   1        SCL=1;    /*起始条件建立时间大于4.7us,延时*/
  38   1        Delay(DELAY);   
  39   1      
  40   1        SDA=0;   /*发送起始信号*/ /* 起始条件锁定时间大于4μs*/
  41   1        Delay(DELAY);   
  42   1          
  43   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
  44   1        Delay(DELAY);
  45   1      }
  46          
  47          /****************************************************************************************
  48          功能:ComStop,结束总线函数.
  49          描述:结束I2C总线,即发送I2C结束条件.
  50          参数:无
  51          返回:无
  52          ****************************************************************************************/
  53          void ComStop()
  54          {
  55   1        SDA=0;  /*发送结束条件的数据信号*/
C51 COMPILER V7.50   COMRAM                                                                03/17/2008 11:03:29 PAGE 2   

  56   1        Delay(DELAY); 
  57   1      
  58   1        SCL=1;  /*结束条件建立时间大于4μs*/
  59   1        Delay(DELAY);
  60   1      
  61   1        SDA=1;  /*发送I2C总线结束信号*/
  62   1        Delay(DELAY);
  63   1      }
  64          
  65          /****************************************************************************************
  66          功能:ComSendByte,字节数据传送函数.
  67          描述:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答
  68               或者非应答都使ack=0 假)发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
  69          参数:c---需要发送的字符。
  70          返回:无
  71          ****************************************************************************************/
  72          void ComSendByte(uchar c)
  73          {
  74   1          uchar BitCnt;
  75   1       
  76   1          for(BitCnt=0;BitCnt<8;BitCnt++)  //要传送的数据长度为8位
  77   1          {
  78   2            if((c<<BitCnt)&0x80)  //判断发送位*/
  79   2                   SDA=1;   
  80   2            else  
  81   2                       SDA=0;       
  82   2               
  83   2            Delay(DELAY);
  84   2            SCL=1;            //置时钟线为高,通知被控器开始接收数据位保证时钟高电平周期大于4μ
  85   2      
  86   2            Delay(DELAY);       
  87   2            SCL=0; 
  88   2          }
  89   1          
  90   1          Delay(DELAY);
  91   1          SDA=1;             //8位发送完后释放数据线,准备接收应答位
  92   1          Delay(DELAY);
  93   1      
  94   1          SCL=1;
  95   1          Delay(DELAY);
  96   1      
  97   1          if(SDA==1)        //判断是否接收到应答信号
  98   1                 AckCom=0;     
  99   1          else 
 100   1                 AckCom=1;        
 101   1      
 102   1          SCL=0;
 103   1          Delay(DELAY);
 104   1      }
 105          
 106          /****************************************************************************************
 107          功能:ComRcvByte,字节数据传送函数。
 108          描述:用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数。
 109          参数:无
 110          返回:无
 111          ****************************************************************************************/
 112          uchar ComRcvByte()
 113          {
 114   1        uchar retc;
 115   1        uchar BitCnt;
 116   1        
 117   1        retc=0; 
C51 COMPILER V7.50   COMRAM                                                                03/17/2008 11:03:29 PAGE 3   

 118   1        SDA=1;             //置数据线为输入方式
 119   1      
 120   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 121   1        {
 122   2           Delay(DELAY);           
 123   2           SCL=0;          //置时钟线为低,准备接收数据位,时钟低电平周期大于4.7μs
 124   2           Delay(DELAY);
 125   2      
 126   2           SCL=1;          //置时钟线为高使数据线上数据有效
 127   2           Delay(DELAY);
 128   2      
 129   2           retc=retc<<1;
 130   2      
 131   2           if(SDA==1)
 132   2                  retc=retc+1; //读数据位,接收的数据位放入retc中
 133   2           Delay(DELAY);
 134   2        }
 135   1      
 136   1        SCL=0;    
 137   1        Delay(DELAY);
 138   1      
 139   1        return(retc);
 140   1      }
 141          
 142          /****************************************************************************************
 143          功能:ComAck,应答子函数。
 144          描述:主控器进行应答信号,(可以是应答或非应答信号)。
 145          参数:a---应答与否,a==1应答,a==0不应答。
 146          返回:无
 147          ****************************************************************************************/
 148          void ComAck(bit a)
 149          {
 150   1        
 151   1        if(a==0)         //在此发出应答或非应答信号
 152   1           SDA=0;     
 153   1        else 
 154   1               SDA=1;
 155   1      
 156   1        Delay(DELAY);     
 157   1      
 158   1        SCL=1;           //时钟低电平周期大于4μs
 159   1        Delay(DELAY);  
 160   1      
 161   1        SCL=0;           //清时钟线,钳住I2C总线以便继续接收
 162   1        Delay(DELAY);   
 163   1      }
 164           
 165          /****************************************************************************************
 166          功能:ComWriteOneByte,向有子地址器件发送字节数据函数。
 167          描述:从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.如果返回1表示操作成功,否
 168               则操作有误,使用前必须已结束总线。
 169          参数:sla---器件地址;c---发送的字符。
 170          返回:无
 171          ****************************************************************************************/
 172          bit ComWriteOneByte(uint sla,uchar c)
 173          {
 174   1         ComStart();             //启动总线
 175   1      
 176   1         ComSendByte(WRITE);       
 177   1         if(AckCom==0)return(0);   //发送器件地址 
 178   1        
 179   1         ComSendByte(sla>>8);      
C51 COMPILER V7.50   COMRAM                                                                03/17/2008 11:03:29 PAGE 4   

 180   1         if(AckCom==0)return(0);   //高address
 181   1      
 182   1         ComSendByte(sla);         
 183   1         if(AckCom==0)return(0);   //low address 
 184   1      
 185   1         ComSendByte(c);           
 186   1         if(AckCom==0)return(0);   //发送数据
 187   1         
 188   1         ComStop();              //结束总线 
 189   1         return(1);
 190   1      }
 191          
 192          /****************************************************************************************
 193          功能:ComWriteBytes,向有子地址器件发送多字节数据函数。
 194          描述:从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件地址sla,子地址suba,发送
 195               内容是s指向的内容,发送no个字节。 如果返回1表示操作成功,否则操作有误。使用前必须已
 196                   结束总线。
 197          参数:suba---子地址,s---指向发送的内容,no---发送字符个数。
 198          返回:写成功则返回1,否则返回0.
 199          ****************************************************************************************/
 200          bit ComWriteBytes(uint suba,uchar *s,uchar no)
 201          {
 202   1         uchar i;
 203   1      
 204   1         ComStart();      
 205   1                  
 206   1         ComSendByte(WRITE);    
 207   1         if(AckCom==0)return(0);
 208   1      
 209   1         ComSendByte(suba>>8);  
 210   1         if(AckCom==0)return(0);
 211   1      
 212   1         ComSendByte(suba);     
 213   1         if(AckCom==0)return(0);
 214   1         
 215   1         for(i=0;i<no;i++)
 216   1          {   
 217   2             ComSendByte(*s);   
 218   2                 if(AckCom==0)return(0);                    
 219   2             s++;
 220   2          } 
 221   1      
 222   1        ComStop();                
 223   1        return(1);
 224   1      }
 225          
 226          /****************************************************************************************
 227          功能:ComReadOneByte,向无子地址器件读字节数据函数。
 228          描述:从启动总线到发送地址,读数据,结束总线的全过程,从器件地址sla,返回值在c.如果返回1表
 229               示操作成功,否则操作有误。使用前必须已结束总线。
 230          参数:sla---器件地址。
 231          返回:返回读取的字符。
 232          ****************************************************************************************/
 233          uchar ComReadOneByte(uint sla)
 234          {
 235   1         uchar x;
 236   1         ComStart();               //启动总线
 237   1      
 238   1         ComSendByte(WRITE);   
 239   1         if(AckCom==0)return(0);    //发送器件地址
 240   1      
 241   1         ComSendByte(sla>>8);  
C51 COMPILER V7.50   COMRAM                                                                03/17/2008 11:03:29 PAGE 5   

 242   1         if(AckCom==0)return(0);    //高address 
 243   1      
 244   1         ComSendByte(sla);     
 245   1         if(AckCom==0)return(0);    //low address
 246   1         
 247   1        ComStart();
 248   1      
 249   1        ComSendByte(READ);     
 250   1        if(AckCom==0)return(0);  
 251   1         
 252   1        x=ComRcvByte();
 253   1        return x;
 254   1      
 255   1      }
 256          
 257          /****************************************************************************************
 258          功能:ComReadBytes,向有子地址器件读取多字节数据函数。
 259          描述:从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件地址sla,子地址suba,读
 260               出的内容放入s指向的存储区,读no个字节。使用前必须已结束总线。
 261          参数:suba---子地址,s---指向发送的内容,no---发送字符个数。
 262          返回:如果返回1表示操作成功,否则操作有误。
 263          ****************************************************************************************/
 264          bit ComReadBytes(uint suba,uchar *s,uchar no)
 265          {
 266   1         uchar i;
 267   1      
 268   1         ComStart();            
 269   1         
 270   1         ComSendByte(WRITE);     
 271   1         if(AckCom==0)return(0);
 272   1               
 273   1         ComSendByte(suba>>8);   
 274   1         if(AckCom==0)return(0);   
 275   1               
 276   1         ComSendByte(suba);      
 277   1         if(AckCom==0)return(0);
 278   1          
 279   1         ComStart();
 280   1      
 281   1         ComSendByte(READ);      
 282   1         if(AckCom==0)return(0);
 283   1          
 284   1         for(i=0;i<no-1;i++)
 285   1         {   
 286   2            *s=ComRcvByte();             
 287   2            ComAck(0);                  
 288   2            s++;
 289   2         } 
 290   1      
 291   1          *s=ComRcvByte();
 292   1          ComAck(1);     
 293   1                  
 294   1         ComStop();                  
 295   1         return(1);
 296   1      }
 297          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    597    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.50   COMRAM                                                                03/17/2008 11:03:29 PAGE 6   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      23
   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 + -