📄 vi2c_c51.lst
字号:
186 1 _Nop();
187 1 _Nop();
188 1 SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/
189 1 _Nop();
190 1 _Nop();
191 1 }
192
193
194
195 /*******************************************************************
196 用户接口函数
197 *******************************************************************/
198
199
200 /*******************************************************************
201 向无子地址器件发送字节数据函数
202 函数原型: bit ISendByte(uchar sla,ucahr c);
203 功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
204 如果返回1表示操作成功,否则操作有误。
205 注意: 使用前必须已结束总线。
206 ********************************************************************/
207 bit ISendByte(uchar sla,uchar c)
208 {
209 1 Start_I2c(); /*启动总线*/
210 1 SendByte(sla); /*发送器件地址*/
211 1 if(ack==0)return(0);
212 1 SendByte(c); /*发送数据*/
213 1 if(ack==0)return(0);
214 1 Stop_I2c(); /*结束总线*/
215 1 return(1);
216 1 }
217
218
219
220
221 /*******************************************************************
222 向有子地址器件发送多字节数据函数
223 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
224 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
225 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
226 如果返回1表示操作成功,否则操作有误。
227 注意: 使用前必须已结束总线。
228 ********************************************************************/
229 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
230 {
231 1 uchar i;
232 1
233 1 Start_I2c(); /*启动总线*/
234 1 SendByte(sla); /*发送器件地址*/
235 1 if(ack==0)return(0);
236 1 SendByte(suba); /*发送器件子地址*/
237 1 if(ack==0)return(0);
238 1
239 1 for(i=0;i<no;i++)
240 1 {
C51 COMPILER V7.07 VI2C_C51 01/12/2005 19:48:29 PAGE 5
241 2 SendByte(*s); /*发送数据*/
242 2 if(ack==0)return(0);
243 2 s++;
244 2 }
245 1 Stop_I2c(); /*结束总线*/
246 1 return(1);
247 1 }
248
249
250 /*******************************************************************
251 向无子地址器件发送多字节数据函数
252 函数原型: bit ISendStr(uchar sla,ucahr *s,uchar no);
253 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
254 地址sla,发送内容是s指向的内容,发送no个字节。
255 如果返回1表示操作成功,否则操作有误。
256 注意: 使用前必须已结束总线。
257 ********************************************************************/
258 bit ISendStrExt(uchar sla,uchar *s,uchar no)
259 {
260 1 uchar i;
261 1
262 1 Start_I2c(); /*启动总线*/
263 1 SendByte(sla); /*发送器件地址*/
264 1 if(ack==0)return(0);
265 1
266 1 for(i=0;i<no;i++)
267 1 {
268 2 SendByte(*s); /*发送数据*/
269 2 if(ack==0)return(0);
270 2 s++;
271 2 }
272 1 Stop_I2c(); /*结束总线*/
273 1 return(1);
274 1 }
275
276
277
278
279
280 /*******************************************************************
281 向无子地址器件读字节数据函数
282 函数原型: bit IRcvByte(uchar sla,ucahr *c);
283 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
284 址sla,返回值在c.
285 如果返回1表示操作成功,否则操作有误。
286 注意: 使用前必须已结束总线。
287 ********************************************************************/
288 bit IRcvByte(uchar sla,uchar *c)
289 {
290 1 Start_I2c(); /*启动总线*/
291 1 SendByte(sla+1); /*发送器件地址*/
292 1 if(ack==0)return(0);
293 1 *c=RcvByte(); /*读取数据*/
294 1 Ack_I2c(1); /*发送非就答位*/
295 1 Stop_I2c(); /*结束总线*/
296 1 return(1);
297 1 }
298
299
300
301 /*******************************************************************
302 向有子地址器件读取多字节数据函数
C51 COMPILER V7.07 VI2C_C51 01/12/2005 19:48:29 PAGE 6
303 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
304 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
305 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
306 如果返回1表示操作成功,否则操作有误。
307 注意: 使用前必须已结束总线。
308 ********************************************************************/
309 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
310 {
311 1 uchar i;
312 1
313 1 Start_I2c(); /*启动总线*/
314 1 SendByte(sla); /*发送器件地址*/
315 1 if(ack==0)return(0);
316 1 SendByte(suba); /*发送器件子地址*/
317 1 if(ack==0)return(0);
318 1
319 1 Start_I2c(); /*重新启动总线*/
320 1 SendByte(sla+1);
321 1 if(ack==0)return(0);
322 1 for(i=0;i<no-1;i++)
323 1 {
324 2 *s=RcvByte(); /*发送数据*/
325 2 Ack_I2c(0); /*发送就答位*/
326 2 s++;
327 2 }
328 1 *s=RcvByte();
329 1 Ack_I2c(1); /*发送非应位*/
330 1 Stop_I2c(); /*结束总线*/
331 1 return(1);
332 1 }
333
334
335 /*******************************************************************
336 向无子地址器件读取多字节数据函数
337 函数原型: bit ISendStrExt(uchar sla,ucahr *s,uchar no);
338 功能: 从启动总线到发送地址,读数据,结束总线的全过程.
339 从器件地址sla,读出的内容放入s指向的存储区,
340 读no个字节。如果返回1表示操作成功,否则操作有误。
341 注意: 使用前必须已结束总线。
342 ********************************************************************/
343 bit IRcvStrExt(uchar sla,uchar *s,uchar no)
344 {
345 1 uchar i;
346 1
347 1 Start_I2c();
348 1 SendByte(sla+1);
349 1 if(ack==0)return(0);
350 1
351 1 for(i=0;i<no-1;i++)
352 1 {
353 2 *s=RcvByte(); /*发送数据*/
354 2 Ack_I2c(0); /*发送就答位*/
355 2 s++;
356 2 }
357 1 *s=RcvByte();
358 1 Ack_I2c(1); /*发送非应位*/
359 1 Stop_I2c(); /*结束总线*/
360 1 return(1);
361 1 }
362
363
364
C51 COMPILER V7.07 VI2C_C51 01/12/2005 19:48:29 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 626 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 ----
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 + -