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

📄 ch452w2.lst

📁 单片机at89s52,模数ad7705采集压力,数码管显示驱动ch452,用于测试油箱盖气密性等
💻 LST
字号:
C51 COMPILER V7.01  CH452W2                                                                05/26/2009 13:59:49 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE CH452W2
OBJECT MODULE PLACED IN CH452W2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CH452W2.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /* ***************************
   2           Website:  http://wch.cn
   3           Email:    tech@wch.cn
   4           Author:   W.ch 2005.4
   5           CH452的真正2线接口
   6          ****************************
   7           CH452的真正2线接口,含低电平脉冲按键中断在内,只需要2个I/O引脚,兼容I2C/IIC时序
   8           两线制方式SCL/SDA,按键中断由SDA产生,接单片机的脉冲/边沿中断引脚
   9           对于频率低于24MHz的MCS51,为了节约传输时间,可以适当减少SCL/SDA之间的延时
  10          *************************************************************************** */
  11          #include        "PIN.H"                 // 修改该文件以适应硬件环境/单片机型号等
  12          #include        "CH452CMD.H"    // CH452常量定义
  13          void CH452_I2c_Start_2(void)    // 操作起始,两线制方式,SDA用做中断输出,使用以下两个函数
  14          {
  15   1              CH452_SDA_SET;
  16   1              CH452_SDA_D_IN;   /* 设置SDA为输入方向 */
  17   1              CH452_SCL_CLR;  //通知CH452,将要对其操作,此段时间不要再产生按键中断
  18   1              CH452_SCL_D_OUT;   /* 设置SCL为输出方向 */
  19   1              do {
  20   2                      DELAY_1US;  // 保留足够的时间给CH452产生中断
  21   2                      DELAY_1US;
  22   2              } while ( CH452_SDA_IN == 0 );  // CH452正在请求中断?
  23   1              DELAY_1US;
  24   1              DISABLE_KEY_INTERRUPT;  //禁止键盘中断,防止开始时被CH452中断而进入中断服务程序中的START
  25   1              CH452_SDA_SET;   /*发送起始条件的数据信号*/
  26   1              CH452_SDA_D_OUT;   /* 设置SDA为输出方向 */
  27   1              CH452_SCL_SET;
  28   1              DELAY_1US;
  29   1              CH452_SDA_CLR;   /*发送起始信号*/
  30   1              DELAY_1US;      
  31   1              CH452_SCL_CLR;   /*钳住I2C总线,准备发送或接收数据 */
  32   1              DELAY_1US;
  33   1      }
  34          
  35          void CH452_I2c_Stop_2(void)  // 操作结束
  36          {
  37   1              CH452_SDA_CLR;
  38   1              CH452_SDA_D_OUT;   /* 设置SDA为输出方向 */
  39   1              DELAY_1US;
  40   1              CH452_SCL_SET;
  41   1              DELAY_1US;
  42   1              CH452_SDA_SET;  /*发送I2C总线结束信号*/
  43   1              DELAY_1US;
  44   1              CH452_SDA_D_IN;   /* 设置SDA为输入方向 */
  45   1              DELAY_1US;
  46   1              CLEAR_KEY_INTER_FLAG;  // 清除中断标志,因为通过SDA输出数据所以会误中断
  47   1              ENABLE_KEY_INTERRUPT;
  48   1      }
  49          
  50          void CH452_I2c_WrByte(unsigned char dat)        //写一个字节数据
  51          {
  52   1              unsigned char i;
  53   1              CH452_SDA_D_OUT;   /* 设置SDA为输出方向 */
  54   1              for(i=0;i!=8;i++)  // 输出8位数据
  55   1              {
C51 COMPILER V7.01  CH452W2                                                                05/26/2009 13:59:49 PAGE 2   

  56   2                      if(dat&0x80) {CH452_SDA_SET;}
  57   2                      else {CH452_SDA_CLR;}
  58   2                      DELAY_1US;
  59   2                      CH452_SCL_SET;
  60   2                      dat<<=1;
  61   2                      DELAY_1US;
  62   2                      DELAY_1US;
  63   2                      CH452_SCL_CLR;
  64   2                      DELAY_1US;
  65   2              }
  66   1              CH452_SDA_D_IN;   /* 设置SDA为输入方向 */
  67   1              CH452_SDA_SET;
  68   1              DELAY_1US;
  69   1              CH452_SCL_SET;  // 接收应答
  70   1              DELAY_1US;
  71   1              DELAY_1US;
  72   1              CH452_SCL_CLR;
  73   1              DELAY_1US;
  74   1      }
  75          
  76          unsigned char  CH452_I2c_RdByte(void)           //读一个字节数据
  77          {
  78   1              unsigned char dat,i;
  79   1              CH452_SDA_SET;
  80   1              CH452_SDA_D_IN;   /* 设置SDA为输入方向 */
  81   1              dat=0;
  82   1              for(i=0;i!=8;i++)  // 输入8位数据
  83   1              {
  84   2                      CH452_SCL_SET;
  85   2                      DELAY_1US;
  86   2                      DELAY_1US;
  87   2                      dat<<=1;
  88   2                      if(CH452_SDA_IN) dat++;  // 输入1位
  89   2                      CH452_SCL_CLR;
  90   2                      DELAY_1US;
  91   2      //              DELAY_1US;
  92   2              }
  93   1              CH452_SDA_SET;
  94   1              DELAY_1US;
  95   1              CH452_SCL_SET;  // 发出无效应答
  96   1              DELAY_1US;
  97   1              DELAY_1US;
  98   1              CH452_SCL_CLR;
  99   1              DELAY_1US;
 100   1              return(dat);
 101   1      }
 102          
 103          void CH452_Write(unsigned short cmd)    //写命令
 104          {
 105   1              CH452_I2c_Start_2();               /*启动总线*/
 106   1      #ifdef  ENABLE_2_CH452                          // 若有两个CH452并连
                      CH452_I2c_WrByte((unsigned char)(cmd>>7)&CH452_I2C_MASK|CH452_I2C_ADDR1);  // CH452的ADDR=0时
              #else 
 109   1              CH452_I2c_WrByte((unsigned char)(cmd>>7)&CH452_I2C_MASK|CH452_I2C_ADDR0);  // CH452的ADDR=1时(默认)
 110   1      #endif
 111   1              CH452_I2c_WrByte((unsigned char)cmd);     /*发送数据*/
 112   1              CH452_I2c_Stop_2();                 /*结束总线*/ 
 113   1      }
 114          
 115          unsigned char CH452_Read(void)          //读取按键
 116          {
 117   1              unsigned char keycode;
C51 COMPILER V7.01  CH452W2                                                                05/26/2009 13:59:49 PAGE 3   

 118   1              CH452_I2c_Start_2();                /*启动总线*/
 119   1      #ifdef  ENABLE_2_CH452                          // 若有两个CH452并连
                      CH452_I2c_WrByte((unsigned char)(CH452_GET_KEY>>7)&CH452_I2C_MASK|CH452_I2C_ADDR1|0x01);  // CH452的AD
             -DR=0时
              #else 
 122   1              CH452_I2c_WrByte((unsigned char)(CH452_GET_KEY>>7)&CH452_I2C_MASK|CH452_I2C_ADDR0|0x01);  // CH452的AD
             -DR=1时(默认)
 123   1      #endif
 124   1      
 125   1              keycode=CH452_I2c_RdByte();      /*读取数据*/
 126   1              CH452_I2c_Stop_2();                /*结束总线*/ 
 127   1              return(keycode);
 128   1      }


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


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

⌨️ 快捷键说明

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