📄 vi2c_c51.lst
字号:
201 1 _Nop();
202 1 }
203
204
205
206
207
208
209 /*******************************************************************
210 向无子地址器件发送字节数据函数
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.00 VI2C_C51 06/16/2004 13:29: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.00 VI2C_C51 06/16/2004 13:29: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 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
321 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
322 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
323 如果返回1表示操作成功,否则操作有误。
324 注意: 使用前必须已结束总线。
325 ********************************************************************/
326 bit ISendStr2(uchar sla,uchar *suba,uchar *s,uchar no)
327 {
328 1 uchar i;
329 1 Start_I2c(); //启动总线
330 1 SendByte(sla); //发送器件地址
331 1 if(ack==0)return(0);
332 1 SendByte(*suba); //发送器件子地址
333 1 if(ack==0)return(0);
334 1 SendByte(*(suba+1)); //发送器件子地址
335 1 if(ack==0)return(0);
336 1
337 1 for(i=0;i<no;i++)
338 1 {
339 2 SendByte(*s); //发送数据
340 2 if(ack==0)return(0);
341 2 s++;
342 2 }
343 1 Stop_I2c(); //结束总线
344 1 return(1);
345 1 }
346
347 /*******************************************************************
348 向有子地址器件读取多字节数据函数
349 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
350 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
351 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
352 如果返回1表示操作成功,否则操作有误。
353 注意: 使用前必须已结束总线。
354 ********************************************************************/
355 bit IRcvStr2(uchar sla,uchar *suba,uchar *s,uchar no)
356 {
357 1 uchar i;
358 1
359 1 Start_I2c(); //启动总线
360 1 SendByte(sla); //发送器件地址
361 1 if(ack==0)return(0);
362 1 SendByte(*suba); //发送器件子地址
363 1 if(ack==0)return(0);
364 1 SendByte(*(suba+1)); //发送器件子地址
365 1 if(ack==0)return(0);
C51 COMPILER V7.00 VI2C_C51 06/16/2004 13:29:52 PAGE 7
366 1
367 1 Start_I2c();
368 1 SendByte(sla+1);
369 1 if(ack==0)return(0);
370 1
371 1 for(i=0;i<no-1;i++)
372 1 {
373 2 *s=RcvByte(); //发送数据
374 2 Ack_I2c(0); //发送就答位
375 2 s++;
376 2 }
377 1 *s=RcvByte();
378 1 Ack_I2c(1); //发送非应位
379 1 Stop_I2c(); //结束总线
380 1 return(1);
381 1 }
382
383 bit Iwcheck(uchar sla)
384 {
385 1 Start_I2c(); /*启动总线*/
386 1 SendByte(sla); /*发送器件地址*/
387 1 if(ack==0)return(0);
388 1 //SendByte(c); /*发送数据*/
389 1 // if(ack==0)return(0);
390 1 Stop_I2c(); /*结束总线*/
391 1 return(1);
392 1 }
393
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 682 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 28
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 + -