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

📄 iic.lst

📁 此代码实现功能为:在philips P89LPC935单片机上实现红外遥(对应红外发送芯片为:HT6222)控解码接收
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 1   


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

line level    source

   1          
   2          /*********************************************************************/
   3          /* 模 块 名:单片机(C51)             文件名:IIC.c                                   */
   4          /* 提交日期:2005年11月15日          作  者:金雨和                  */
   5          /* 版    本:V1.0 --Copyright(c) 2005-2006中太视讯技术有限公司       */
   6          /* 描    述:单片机(C51)串口2处理程序                                                            */
   7          /* 修改记录:                                                                                                         */
   8          /*        日  期        版本      修改人     修改内容                            */
   9          /*         1.                                                                                                                    */
  10          /*********************************************************************/
  11          
  12          #include <Reg935.h>
  13          #include "uart.h"
  14          #include "string.h"
  15          
  16          #define IIC_INT                         KB1             //P0.1 IIC中断脚
  17          #define IIC_ADDR                        0x04    //IIC地址
  18          #define IIC_CON_SET                     0x44    //IIC命令设置
  19          #define IIC_END_SYMBOL      0xFF        //IIC发送结束符
  20          
  21          unsigned char xdata g_ucI2CSendBuf[MAX_I2CDATALEN];     //IIC数据缓存
  22          unsigned char xdata g_ucI2CSendBuf_Len;     //IIC数据缓存内容长度
  23          unsigned char xdata g_ucI2CSendBuf_offset;  //IIC缓存数据读取当前位移
  24          
  25          unsigned char xdata g_ucI2CRecvBuf[MAX_I2CDATALEN];     //IIC数据缓存
  26          unsigned char xdata g_ucI2CRecvBuf_Len;     //IIC数据缓存内容长度
  27          unsigned char xdata g_ucI2CRecvBuf_offset;  //IIC缓存数据读取当前位移
  28          
  29          extern uchar xdata g_sndBuf[MAX_I2CDATALEN];    //数据发送缓冲
  30          extern uchar g_sndBufLen;                       //数据发送缓冲长度
  31          extern uchar g_sndBufOffset;            //数据发送偏移
  32          
  33          unsigned char xdata g_ucBspOnLine = 1;      //默认值1,BSP当前存在
  34          unsigned char xdata g_usBspTimeOut = 0;         //Bsp是否超时时间纪录
  35          
  36          bit g_workFlag = 0;                                                     //工作灯工作标志
  37          bit     g_verFlag = 0;                                                  //获取版本标志
  38          unsigned char g_WorkCount = 0;                          //工作灯工作控制计数器
  39          unsigned char g_resetFlag = 0;                          //C51复位密码
  40          
  41          /*******************************************************************
  42          ** 函 数 名: IIC_Isr()
  43          ** 输    入: 无
  44          ** 输    出: 无
  45          ** 描    述: IIC中断函数。
  46          ** 全局变量: 无
  47          ** 调用模块: 
  48          **                       SetIICSendRegData      -- IIC发送数据
  49          **                       SetIICRecvRegData      -- IIC接收数据
  50          ** 被调模块: 无
  51          ** 作    者: 
  52          ** 创建日期: 2005年11月15日
  53          ** 修    改:
  54          **        日  期        版本      修改人     修改内容                            
  55          **         1. 
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 2   

  56          ********************************************************************/
  57          void IIC_Isr() interrupt 6
  58          {
  59   1          switch(I2STAT)
  60   1          { 
  61   2          case 0xA8:      /*   从发送模式,收到自身地址,已返回ACK   */     
  62   2              IICSendRegData();
  63   2              break;
  64   2      
  65   2          case 0x60:
  66   2              IICRecvRegData();
  67   2              break;
  68   2      
  69   2              default:
  70   2                      break;
  71   2          }
  72   1      }
  73          
  74          
  75          /*******************************************************************
  76          ** 函 数 名: IICInit()
  77          ** 输    入: 无
  78          ** 输    出: 无
  79          ** 描    述: 初始化IIC寄存器。
  80          ** 全局变量: 无
  81          ** 调用模块: 无
  82          ** 被调模块: 无
  83          ** 作    者: 
  84          ** 创建日期: 2005年11月15日
  85          ** 修    改:
  86          **        日  期        版本      修改人     修改内容                            
  87          **         1. 
  88          ********************************************************************/
  89          void IICInit()
  90          {
  91   1              //使能IIC  
  92   1              EI2C = 1;
  93   1          /***********************************************
  94   1          P1.5-RST:仅为输入即P1M1.5=1,P1M2.5=0,     
  95   1          P1.2,P1.3为SDA,SCL输出为开漏即P1M1.2=1, P1M1.3=1, P1M2.2=1, P1M2.3=1
  96   1          **************************************************/
  97   1              P1M1 = 0x2C;
  98   1              P1M2 = 0x0C;
  99   1      
 100   1              I2ADR = IIC_ADDR;
 101   1          /***********************************************************
 102   1          I2EN = 1;   //IIC使能
 103   1          STA = 0;    //从模式
 104   1          STO = 0;
 105   1          SI = 0;     //复位中断
 106   1          AA = 1;
 107   1          CRSEL = 0;  //使用内部SCL发生器
 108   1          ***********************************************************/
 109   1          I2CON = IIC_CON_SET;
 110   1      }
 111          
 112          
 113          /*******************************************************************
 114          ** 函 数 名: IICSendRegData()
 115          ** 输    入: 无
 116          ** 输    出: 无
 117          ** 描    述: 将g_ucI2CBuf的数据通过IIC发送到BSP15。
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 3   

 118          ** 全局变量: 
 119          **                       g_ucI2CSendBuf         -- IIC发送缓冲
 120          **                       g_ucI2CSendBuf_Len -- IIC发送缓冲长度
 121          **           g_ucI2CSendBuf_offset      -- IIC发送缓冲偏移
 122          ** 调用模块: 无
 123          ** 被调模块: 
 124          **                       IIC_Isr                        -- IIC中断服务
 125          ** 作    者: 
 126          ** 创建日期: 2005年11月15日
 127          ** 修    改:
 128          **        日  期        版本      修改人     修改内容                            
 129          **         1. 
 130          ********************************************************************/
 131          void IICSendRegData()
 132          {
 133   1          /*   循环发送,在数据没有发送完毕前,不退出发送程序   */
 134   1          while(g_ucI2CSendBuf_offset < g_ucI2CSendBuf_Len)
 135   1          {   
 136   2              if (I2STAT == 0xC0)
 137   2              {            
 138   3                  I2CON = IIC_CON_SET;                        
 139   3                              if(g_ucI2CSendBuf_offset >= g_ucI2CSendBuf_Len)
 140   3                              {
 141   4                                      g_ucI2CSendBuf_offset = 0;
 142   4                              }
 143   3                  return;
 144   3              }
 145   2              else /*if (I2STAT == 0xB8)*/
 146   2              {
 147   3                  I2DAT = g_ucI2CSendBuf[g_ucI2CSendBuf_offset];
 148   3                  g_ucI2CSendBuf_offset++;
 149   3      
 150   3                  I2CON = IIC_CON_SET;
 151   3              }
 152   2      
 153   2              /*   等待发送字节完毕   */
 154   2              while( SI==0 );
 155   2          }
 156   1      
 157   1          do
 158   1          {
 159   2              /*   发送结束符    */
 160   2              I2DAT = IIC_END_SYMBOL;
 161   2              I2CON = IIC_CON_SET;
 162   2              while( SI==0 );
 163   2          }while(I2STAT != 0xC0);
 164   1      
 165   1          g_ucI2CSendBuf_Len = 0;
 166   1              g_ucI2CSendBuf_offset = 0;
 167   1          I2CON = IIC_CON_SET;
 168   1      }
 169          
 170          
 171          /*******************************************************************
 172          ** 函 数 名: IICRecvRegData()
 173          ** 输    入: 无
 174          ** 输    出: 无
 175          ** 描    述: 接收BSP15通过IIC发送过来的数据,保存至g_ucI2CBuf中。
 176          ** 全局变量: 
 177          **                       g_ucI2CRecvBuf         -- IIC接收缓冲
 178          **                       g_ucI2CRecvBuf_Len -- IIC接收缓冲长度
 179          **           g_ucI2CRecvBuf_offset      -- IIC接收缓冲偏移
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 4   

 180          ** 调用模块: 
 181          **                       OnIICRecv                      -- 处理接收的IIC数据
 182          ** 被调模块: 
 183          **                       IIC_Isr                        -- IIC中断服务

⌨️ 快捷键说明

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