📄 vi2c_c51.lst
字号:
211 函数原型: bit ISendByte(uchar sla,ucahr c);
212 功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
213 如果返回1表示操作成功,否则操作有误。
214 注意: 使用前必须已结束总线。
215 ********************************************************************/
216 bit ISendByte(uchar sla,uchar c)
217 {
218 1 Start_I2c(); /*启动总线*/
219 1 SendByte(sla); /*发送器件地址*/
220 1 if(ack==0)return(0);
221 1 SendByte(c); /*发送数据*/
222 1 if(ack==0)return(0);
223 1 Stop_I2c(); /*结束总线*/
224 1 return(1);
225 1 }
226
227
228
229
230 /*******************************************************************
231 向有子地址器件发送多字节数据函数
232 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
233 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
234 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
235 如果返回1表示操作成功,否则操作有误。
236 注意: 使用前必须已结束总线。
237 ********************************************************************/
238 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
239 {
240 1 uchar i;
241 1
C51 COMPILER V7.06 VI2C_C51 09/06/2003 16:55:52 PAGE 5
242 1 Start_I2c(); /*启动总线*/
243 1 SendByte(sla); /*发送器件地址*/
244 1 if(ack==0)return(0);
245 1 SendByte(suba); /*发送器件子地址*/
246 1 if(ack==0)return(0);
247 1
248 1 for(i=0;i<no;i++)
249 1 {
250 2 SendByte(*s); /*发送数据*/
251 2 if(ack==0)return(0);
252 2 s++;
253 2 }
254 1 Stop_I2c(); /*结束总线*/
255 1 return(1);
256 1 }
257
258
259
260
261
262
263 /*******************************************************************
264 向无子地址器件读字节数据函数
265 函数原型: bit IRcvByte(uchar sla,ucahr *c);
266 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
267 址sla,返回值在c.
268 如果返回1表示操作成功,否则操作有误。
269 注意: 使用前必须已结束总线。
270 ********************************************************************/
271 bit IRcvByte(uchar sla,uchar *c)
272 {
273 1 Start_I2c(); /*启动总线*/
274 1 SendByte(sla+1); /*发送器件地址*/
275 1 if(ack==0)return(0);
276 1 *c=RcvByte(); /*读取数据*/
277 1 Ack_I2c(1); /*发送非就答位*/
278 1 Stop_I2c(); /*结束总线*/
279 1 return(1);
280 1 }
281
282
283
284 /*******************************************************************
285 向有子地址器件读取多字节数据函数
286 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
287 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
288 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
289 如果返回1表示操作成功,否则操作有误。
290 注意: 使用前必须已结束总线。
291 ********************************************************************/
292 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
293 {
294 1 uchar i;
295 1
296 1 Start_I2c(); /*启动总线*/
297 1 SendByte(sla); /*发送器件地址*/
298 1 if(ack==0)return(0);
299 1 SendByte(suba); /*发送器件子地址*/
300 1 if(ack==0)return(0);
301 1
302 1 Start_I2c();
303 1 SendByte(sla+1);
C51 COMPILER V7.06 VI2C_C51 09/06/2003 16:55:52 PAGE 6
304 1 if(ack==0)return(0);
305 1
306 1 for(i=0;i<no-1;i++)
307 1 {
308 2 *s=RcvByte(); /*发送数据*/
309 2 Ack_I2c(0); /*发送就答位*/
310 2 s++;
311 2 }
312 1 *s=RcvByte();
313 1 Ack_I2c(1); /*发送非应位*/
314 1 Stop_I2c(); /*结束总线*/
315 1 return(1);
316 1 }
317
318
319
320
321 /*******************************************************************
322 ********************************************************************
323 ********************************************************************
324 *******************************************************************/
325
326
327
328 /*******************************************************************
329 向有子地址器件发送多字节数据函数(2)
330 函数原型: bit ISendStr2(uchar sla,uchar *suba,ucahr *s,uchar no);
331 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
332 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
333 如果返回1表示操作成功,否则操作有误。
334 注意: 16位子地址
335 ********************************************************************/
336 bit ISendStr2(uchar sla,uchar *suba,uchar *s,uchar no)
337 {
338 1 uchar i;
339 1 Start_I2c(); //启动总线
340 1 SendByte(sla); //发送器件地址
341 1 if(ack==0)return(0);
342 1 SendByte(*suba); //发送器件子地址
343 1 if(ack==0)return(0);
344 1 SendByte(*(suba+1)); //发送器件子地址
345 1 if(ack==0)return(0);
346 1
347 1 for(i=0;i<no;i++)
348 1 {
349 2 SendByte(*s); //发送数据
350 2 if(ack==0)return(0);
351 2 s++;
352 2 }
353 1 Stop_I2c(); //结束总线
354 1 return(1);
355 1 }
356
357
358
359
360 /*******************************************************************
361 向有子地址器件读取多字节数据函数(2)
362 函数原型: bit ISendStr2(uchar sla,uchar suba,ucahr *s,uchar no);
363 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
364 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
365 如果返回1表示操作成功,否则操作有误。
C51 COMPILER V7.06 VI2C_C51 09/06/2003 16:55:52 PAGE 7
366 注意: 16位子地址
367 ********************************************************************/
368 bit IRcvStr2(uchar sla,uchar *suba,uchar *s,uchar no)
369 {
370 1 uchar i;
371 1
372 1 Start_I2c(); //启动总线
373 1 SendByte(sla); //发送器件地址
374 1 if(ack==0)return(0);
375 1 SendByte(*suba); //发送器件子地址
376 1 if(ack==0)return(0);
377 1 SendByte(*(suba+1)); //发送器件子地址
378 1 if(ack==0)return(0);
379 1
380 1 Start_I2c();
381 1 SendByte(sla+1);
382 1 if(ack==0)return(0);
383 1
384 1 for(i=0;i<no-1;i++)
385 1 {
386 2 *s=RcvByte(); //发送数据
387 2 Ack_I2c(0); //发送就答位
388 2 s++;
389 2 }
390 1 *s=RcvByte();
391 1 Ack_I2c(1); //发送非应位
392 1 Stop_I2c(); //结束总线
393 1 return(1);
394 1 }
395
396
397
398 /*******************************************************************
399 向有子地址器件读取多字节数据函数(2)
400 函数原型: bit IwCheck(uchar sla)
401 功能: 检查是否有从机应答,用于检查从机写周期是否已经结束或检查从
402 机是否存在。
403 ********************************************************************/
404 bit IwCheck(uchar sla)
405 {
406 1 Start_I2c(); /*启动总线*/
407 1 SendByte(sla); /*发送器件地址*/
408 1 if(ack==0)return(0);
409 1 Stop_I2c(); /*结束总线*/
410 1 return(1);
411 1 }
412
413
414
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 863 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 43
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -