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

📄 iic.lst

📁 此代码实现功能为:在philips P89LPC935单片机上实现红外遥(对应红外发送芯片为:HT6222)控解码接收
💻 LST
📖 第 1 页 / 共 2 页
字号:
 184          ** 作    者: 
 185          ** 创建日期: 2005年11月15日
 186          ** 修    改:
 187          **        日  期        版本      修改人     修改内容                            
 188          **         1. 
 189          ********************************************************************/
 190          void IICRecvRegData()
 191          {
 192   1              unsigned char ucRecvLen = 0;
 193   1              unsigned char ucRecvInfo[2];
 194   1      
 195   1          /*   循环发送,在数据没有发送完毕前,不退出发送程序   */
 196   1          while(g_ucI2CRecvBuf_offset < MAX_I2CDATALEN)
 197   1          {
 198   2              /*   等待接收字节完毕   */
 199   2              while( SI==0 );
 200   2              /*   接收到停止条件   */
 201   2              if (I2STAT == 0xA0)
 202   2              {            
 203   3                  I2CON = IIC_CON_SET;            
 204   3                              if(g_ucI2CRecvBuf_offset > 0)
 205   3                              {
 206   4                      if (g_ucI2CRecvBuf_Len == 0)
 207   4                              g_ucI2CRecvBuf_Len = g_ucI2CRecvBuf_offset;                     
 208   4      
 209   4                          OnIICRecv();
 210   4                              }
 211   3                  return;
 212   3              }
 213   2              else /*if (I2STAT == 0xB8)*/
 214   2              {
 215   3                  if (I2DAT != IIC_END_SYMBOL)
 216   3                  {
 217   4                                  if (ucRecvLen < 2)
 218   4                                      {
 219   5                                              ucRecvInfo[ucRecvLen] = I2DAT;
 220   5                                              ucRecvLen ++;
 221   5                                      }
 222   4                                      else
 223   4                                      {
 224   5                                          g_ucI2CRecvBuf[g_ucI2CRecvBuf_offset] = I2DAT;
 225   5                              g_ucI2CRecvBuf_offset++;
 226   5                                      }
 227   4                  }
 228   3                  else
 229   3                  {
 230   4                      g_ucI2CRecvBuf_Len = g_ucI2CRecvBuf_offset;
 231   4                      I2CON = IIC_CON_SET;
 232   4                  }
 233   3                  I2CON = IIC_CON_SET;
 234   3              }
 235   2          }//end while
 236   1      
 237   1          /*   下面部分为异常处理,正常情况下应该不会运行到这里   */
 238   1          if (g_ucI2CRecvBuf_Len == 0)
 239   1              g_ucI2CRecvBuf_Len = g_ucI2CRecvBuf_offset;
 240   1      
 241   1              if(g_ucI2CRecvBuf_offset > 0)
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 5   

 242   1              {
 243   2                  OnIICRecv();
 244   2              }
 245   1      
 246   1          g_ucI2CRecvBuf_offset = 0;
 247   1          I2CON = IIC_CON_SET;
 248   1      
 249   1      }
 250          
 251          
 252          /*******************************************************************
 253          ** 函 数 名: OnIICRecv()
 254          ** 输    入: 无
 255          ** 输    出: 无
 256          ** 描    述: 对接收IIC数据后,IIC缓存g_ucI2CBuf中数据进行处理。
 257          ** 全局变量: 
 258          **                       g_workFlag                     -- 工作灯闪\灭控制
 259          **                       g_resetFlag            -- C51复位标志
 260          **                       g_ucI2CRecvBuf         -- IIC接收缓冲
 261          **                       g_ucI2CRecvBuf_Len -- IIC接收缓冲长度
 262          ** 调用模块: 无
 263          ** 被调模块: 无
 264          ** 作    者: 
 265          ** 创建日期: 2005年11月15日
 266          ** 修    改:
 267          **        日  期        版本      修改人     修改内容                            
 268          **         1. 
 269          ********************************************************************/
 270          void OnIICRecv()
 271          {
 272   1          unsigned char ucIdx = 0;
 273   1              if (!g_ucI2CRecvBuf_Len)
 274   1                      return;
 275   1      
 276   1          switch(g_ucI2CRecvBuf[0])
 277   1          {
 278   2          case ONLINE:
 279   2              g_ucBspOnLine = 1;
 280   2              g_usBspTimeOut = 0;
 281   2              break;
 282   2      
 283   2              case WORKLEDON:         //工作灯亮
 284   2                      g_workFlag = 1;
 285   2                      break;
 286   2      
 287   2              case WORKLEDOFF:        //工作灯灭
 288   2                      g_workFlag = 0;
 289   2                      break;
 290   2      
 291   2              case RESET:             //C51复位
 292   2                      g_resetFlag = 1;
 293   2                      OCB = 0;        //复位拉低
 294   2                      break;
 295   2      
 296   2              case VER:               //得到BSP15取版本号消息
 297   2                      g_verFlag = 1;  
 298   2                      break;
 299   2      
 300   2              case UART1:             //串口1数据
 301   2              case UART2:             //串口1数据
 302   2                      if((g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len-1] == 0x0A) || (g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len-1] == 0x0D))
 303   2                      {
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 6   

 304   3                              g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len-1] = 0x0A;
 305   3                              g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len] = 0x0D;
 306   3                      }
 307   2                  if((g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len] == 0x0A) || (g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len] == 0x0D))
 308   2                      {
 309   3                              g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len] = 0x0A;
 310   3                              g_ucI2CRecvBuf[g_ucI2CRecvBuf_Len+1] = 0x0D;
 311   3                              g_ucI2CRecvBuf_Len++;
 312   3                      }
 313   2                      if(g_ucI2CRecvBuf[0] == UART1)
 314   2                              UART1SendData(&g_ucI2CRecvBuf[1],g_ucI2CRecvBuf_Len-1);
 315   2                      else
 316   2                      {
 317   3                              memcpy(g_sndBuf, &g_ucI2CRecvBuf[1], g_ucI2CRecvBuf_Len-1);
 318   3                              g_sndBufLen = g_ucI2CRecvBuf_Len-1;
 319   3                              g_sndBufOffset = 0;
 320   3                      }
 321   2                      break;
 322   2      
 323   2          default:
 324   2                      break;
 325   2          }
 326   1              g_ucI2CRecvBuf_offset = 0;
 327   1              g_ucI2CRecvBuf_Len = 0;
 328   1      }
 329          
 330          
 331          /*******************************************************************
 332          ** 函 数 名: IICSendIntToCPU()
 333          ** 输    入: 无
 334          ** 输    出: 无
 335          ** 描    述: 通知BSP,C51准备发送数据。
 336          ** 全局变量: 无
 337          ** 调用模块: 无
 338          ** 被调模块: 无
 339          ** 作    者: 
 340          ** 创建日期: 2005年11月15日
 341          ** 修    改:
 342          **        日  期        版本      修改人     修改内容                            
 343          **         1. 
 344          ********************************************************************/
 345          void IICSendIntToCPU()
 346          {
 347   1              unsigned char usPos;
 348   1      
 349   1          /*    通知CPU准备发送数据      */
 350   1          IIC_INT = 1;
 351   1              for(usPos=0; usPos<7; usPos++)
 352   1                      ;
 353   1              
 354   1              IIC_INT = 0;
 355   1              for(usPos=0; usPos<5; usPos++)
 356   1                      ;
 357   1              
 358   1              IIC_INT = 1;
 359   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    607    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     46    ----
C51 COMPILER V7.09   IIC                                                                   12/05/2005 10:23:18 PAGE 7   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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