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

📄 hi2csla_c51.lst

📁 上学时做的一个51单片机按键显示程序
💻 LST
字号:
C51 COMPILER V7.07   HI2CSLA_C51                                                           11/18/2005 14:52:01 PAGE 1   


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

stmt level    source

   1          /***************************************************************** 
   2          *               从方式的LPC932硬件I2C
   3          * 1  使用I2C总线软件包时P1.2,P1.3切勿写为0,并要设置为开漏输出。
   4          * 2  总线定义为P1.2=SCL,P1.3=SDA,需外接上拉电阻2-10k。
   5          * 3  相应寄存器:
   6          *    地址寄存器  I2ADR   用于存放自身从地址(从方式时才有用)
   7          *    数据寄存器  I2DAT   接收/发送数据用
   8          *    控制寄存器  I2CON   用于硬件I2C的设置、使能、启动、结束,
   9          *                        应答控制,中断标志等。
  10          *    状态寄存器  I2STAT  指示I2C总线的操作状态码,高5位有效,
  11          *                        若I2C中断志置位,可查询此寄存器判断
  12          *                        总线情况。
  13          *    SCL占空比寄存器  I2SCLH、I2SCLL  设置SCL的频率发生。
  14          *                     设置最好与主机的SCL频率基本一至。  
  15          * 使用:使用前要先开中断:总中断EA和I2C中断允许EI2C,其中断入口地址为33H;
  16          *       在中断里进行接收或发送数据操作,调用操作如下:
  17          *       若是从接收,则循环调用RcvByte接收字节数据,直至总线结束/重启;
  18          *       若是从发送,则循环调用SendByte发送数据,直至接收到非应答信号;
  19          * 为了防止从器件因总线出错而死机,可用定时器实现超时处理。
  20          *****************************************************************/
  21          #include "./include/datatypes.h"
  22          
  23          #define GENERATE_STOP        0x54     /* 置位 STO, 复位 STA 、 SI          */
  24          #define RELEASE_BUS_ACK      0x44     /* 复位 STO,STA,SI 并置位  AA (ack)  */
  25          #define RELEASE_BUS_NOACK    0x40     /* 复位 STO,STA,SI 并置位 AA (noack) */
  26          #define RELEASE_BUS_STA      0x64     /* 起动总线/重新起动总线, 置位 STA   */
  27          
  28          /* 定义LPC932的I2C相关寄存器的定义 */
  29          sfr             I2ADR  = 0xDB;
  30          sfr     I2DAT  = 0xDA;
  31          sfr             I2CON  = 0xD8;
  32          sfr             I2STAT = 0xD9;
  33          sfr             I2SCLH = 0xDD;
  34          sfr             I2SCLL = 0xDC;
  35          sbit    STA        = I2CON^5;
  36          sbit    SI         = I2CON^3;
  37          
  38          
  39          /***************************************************************
  40          *                                                       接收字节函数
  41          * 功能:读取总线传来的字节数据并发送应答位,正常接收返回1。
  42          * 入口参数:c           此时读入的数据变量的地址
  43          * 出口参数:接收到总线结束信号或重新启动总线信号时返回0
  44          ***************************************************************/
  45          bit RcvByte(UINT8 *c)
  46          { I2CON = RELEASE_BUS_ACK;              /* 清除标志位                           */
  47   1        while( SI==0 );                               /* 放开总线,等待接收           */
  48   1        if( I2STAT==0xA0 )                            /* 接收到停止位或重新启动位 */
  49   1        { I2CON = RELEASE_BUS_ACK;            /* 先放开总线,再返回0          */
  50   2          return(0);
  51   2        }
  52   1        *c = I2DAT;                                   /* 取数据                                       */
  53   1        return(1);
  54   1      }
  55          
C51 COMPILER V7.07   HI2CSLA_C51                                                           11/18/2005 14:52:01 PAGE 2   

  56          
  57          /***************************************************************
  58          *                                                       发送数据
  59          * 功能:向总线发送数据
  60          * 入口参数:c           所要发送的数据
  61          * 出口参数:当接收到非应答位时返回0,否则返回1
  62          ***************************************************************/
  63          bit SendByte(UINT8 c)
  64          { if( I2STAT==0xC0 )                /* 上次发送数据后,接收到非应答位 */
  65   1        { I2CON = RELEASE_BUS_ACK;
  66   2          return(0);
  67   2        }
  68   1        I2DAT = c;                                            /* 发送数据                                     */
  69   1        I2CON = RELEASE_BUS_ACK;              /* 释放总线                                     */
  70   1        while( SI==0 );                                       /* 等待字节数据发送完成         */
  71   1        return(1);
  72   1      }
  73          
  74          
  75          
  76          /****************************************************************
  77          *                                               设置总线函数(设置为从机)
  78          * 功能:用于设置I2C控制寄存器,包括总线时钟选择及从地址.不接受广播地址。
  79          * 入口参数:addr      从地址 
  80          ****************************************************************/
  81          void SetBus(UINT8 addr)
  82          { I2ADR = addr&0xfe;            /* 设置从地址不接收广播地址                     */
  83   1        I2CON =  RELEASE_BUS_ACK; /* 启动硬件I2C                                              */
  84   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     52    ----
   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 + -