📄 iic.lst
字号:
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 + -