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