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

📄 text1.lst

📁 压缩包里包括的51的C与汇编的混合编程
💻 LST
字号:
C51 COMPILER V6.23a  TEXT1                                                                 01/24/2008 09:25:52 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND SRC(.\Text1.SRC) 

stmt level    source

*** WARNING C500 IN LINE 1 OF TEXT1.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          #include <reg51.h> /*头文件的包含*/
   2          #include <intrins.h>
   3          #define uchar unsigned char /*宏定义*/
   4          #define uint unsigned int
   5          
   6          #define _Nop() _nop_() /*定义空指令*/
   7          
   8          /* 常,变量定义区 */
   9          
  10          extern void Start_I2c(void);
  11          extern void Stop_I2c(void);
  12          extern void Ack_I2c(uchar Data);
  13          
  14          sbit BELL=P2^6; /*端口位定义*/
  15          sbit SDA=P1^1; /*模拟I2C数据传送位*/
  16          sbit SCL=P1^2; /*模拟I2C时钟控制位*/
  17          
  18          /*状态标志*/
  19          bit ack; /*应答标志位*/
  20          
  21          /*******************************************************************
  22          字节数据传送函数 
  23          函数原型: void SendByte(uchar c);
  24          功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
  25          此状态位进行操作.(不应答或非应答都使ack=0 假) 
  26          发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
  27          ********************************************************************/
  28          void SendByte(uchar c)
  29          {
  30   1      uchar BitCnt;
  31   1      
  32   1      for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
  33   1      {
  34   2      if((c<<BitCnt)&0x80)SDA=1; /*判断发送位*/
  35   2      else SDA=0; 
  36   2      _Nop();
  37   2      SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
  38   2      _Nop(); 
  39   2      _Nop(); /*保证时钟高电平周期大于4μs*/
  40   2      _Nop();
  41   2      _Nop();
  42   2      _Nop(); 
  43   2      SCL=0; 
  44   2      }
  45   1      
  46   1      _Nop();
  47   1      _Nop();
  48   1      SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
  49   1      _Nop();
  50   1      _Nop(); 
  51   1      SCL=1;
  52   1      _Nop();
  53   1      _Nop();
  54   1      _Nop();
C51 COMPILER V6.23a  TEXT1                                                                 01/24/2008 09:25:52 PAGE 2   

  55   1      if(SDA==1)ack=0; 
  56   1      else ack=1; /*判断是否接收到应答信号*/
  57   1      SCL=0;
  58   1      _Nop();
  59   1      _Nop();
  60   1      }
  61          
  62          /*******************************************************************
  63          字节数据传送函数 
  64          函数原型: uchar RcvByte();
  65          功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),
  66          发完后请用应答函数。 
  67          ********************************************************************/ 
  68          uchar RcvByte()
  69          {
  70   1      uchar retc;
  71   1      uchar BitCnt;
  72   1      
  73   1      retc=0; 
  74   1      SDA=1; /*置数据线为输入方式*/
  75   1      for(BitCnt=0;BitCnt<8;BitCnt++)
  76   1      {
  77   2      _Nop(); 
  78   2      SCL=0; /*置时钟线为低,准备接收数据位*/
  79   2      _Nop();
  80   2      _Nop(); /*时钟低电平周期大于4.7μs*/
  81   2      _Nop();
  82   2      _Nop();
  83   2      _Nop();
  84   2      SCL=1; /*置时钟线为高使数据线上数据有效*/
  85   2      _Nop();
  86   2      _Nop();
  87   2      retc=retc<<1;
  88   2      if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
  89   2      _Nop();
  90   2      _Nop(); 
  91   2      }
  92   1      SCL=0; 
  93   1      _Nop();
  94   1      _Nop();
  95   1      return(retc);
  96   1      }
  97          
  98          
  99          /*******************************************************************
 100          向无子地址器件发送字节数据函数 
 101          函数原型: bit ISendByte(uchar sla,ucahr c); 
 102          功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 103          如果返回1表示操作成功,否则操作有误。
 104          注意: 使用前必须已结束总线。
 105          ********************************************************************/
 106          bit ISendByte(uchar sla,uchar c)
 107          {
 108   1      Start_I2c(); /*启动总线*/
 109   1      SendByte(sla); /*发送器件地址*/
 110   1      if(ack==0)return(0);
 111   1      SendByte(c); /*发送数据*/
 112   1      if(ack==0)return(0);
 113   1      Stop_I2c(); /*结束总线*/ 
 114   1      return(1);
 115   1      }
 116          
C51 COMPILER V6.23a  TEXT1                                                                 01/24/2008 09:25:52 PAGE 3   

 117          
 118          
 119          
 120          /*******************************************************************
 121          向有子地址器件发送多字节数据函数 
 122          函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no); 
 123          功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 124          地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 125          如果返回1表示操作成功,否则操作有误。
 126          注意: 使用前必须已结束总线。
 127          ********************************************************************/
 128          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 129          {
 130   1      uchar i;
 131   1      
 132   1      Start_I2c(); /*启动总线*/
 133   1      SendByte(sla); /*发送器件地址*/
 134   1      if(ack==0)return(0);
 135   1      SendByte(suba); /*发送器件子地址*/
 136   1      if(ack==0)return(0);
 137   1      
 138   1      for(i=0;i<no;i++)
 139   1      { 
 140   2      SendByte(*s); /*发送数据*/
 141   2      if(ack==0)return(0);
 142   2      s++;
 143   2      } 
 144   1      Stop_I2c(); /*结束总线*/ 
 145   1      return(1);
 146   1      }
 147          
 148          
 149          
 150          
 151          
 152          
 153          /*******************************************************************
 154          向无子地址器件读字节数据函数 
 155          函数原型: bit IRcvByte(uchar sla,ucahr *c); 
 156          功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 157          址sla,返回值在c.
 158          如果返回1表示操作成功,否则操作有误。
 159          注意: 使用前必须已结束总线。
 160          ********************************************************************/
 161          bit IRcvByte(uchar sla,uchar *c)
 162          {
 163   1      Start_I2c(); /*启动总线*/
 164   1      SendByte(sla+1); /*发送器件地址*/
 165   1      if(ack==0)return(0);
 166   1      *c=RcvByte(); /*读取数据*/
 167   1      Ack_I2c(1); /*发送非就答位*/
 168   1      Stop_I2c(); /*结束总线*/ 
 169   1      return(1);
 170   1      }
 171          
 172          
 173          
 174          /*******************************************************************
 175          向有子地址器件读取多字节数据函数 
 176          函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no); 
 177          功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 178          地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
C51 COMPILER V6.23a  TEXT1                                                                 01/24/2008 09:25:52 PAGE 4   

 179          如果返回1表示操作成功,否则操作有误。
 180          注意: 使用前必须已结束总线。
 181          ********************************************************************/
 182          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 183          {
 184   1      uchar i;
 185   1      
 186   1      Start_I2c(); /*启动总线*/
 187   1      SendByte(sla); /*发送器件地址*/
 188   1      if(ack==0)return(0);
 189   1      SendByte(suba); /*发送器件子地址*/
 190   1      if(ack==0)return(0);
 191   1      
 192   1      Start_I2c();
 193   1      SendByte(sla+1);
 194   1      if(ack==0)return(0);
 195   1      
 196   1      for(i=0;i<no-1;i++)
 197   1      { 
 198   2      *s=RcvByte(); /*发送数据*/
 199   2      Ack_I2c(0); /*发送就答位*/ 
 200   2      s++;
 201   2      } 
 202   1      *s=RcvByte();
 203   1      Ack_I2c(1); /*发送非应位*/
 204   1      Stop_I2c(); /*结束总线*/ 
 205   1      return(1);
 206   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    369    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      19
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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