?? iic(ok).lst
字號:
197 /*******************************************************************
198 向無子地址器件發送字節數據函數
199 函數原型: bit ISendByte(uchar sla,ucahr c);
200 功能: 從啟動總線到發送地址,數據,結束總線的全過程,從器件地址sla.
201 如果返回1表示操作成功,否則操作有誤。
202 注意: 使用前必須已結束總線。
203 ********************************************************************/
204 bit ISendByte(uchar sla,uchar c)
205 {
206 1 Start_I2c(); /*啟動總線*/
207 1 SendByte(sla); /*發送器件地址*/
208 1 if(ack==0)return(0);
209 1 SendByte(c); /*發送數據*/
210 1 if(ack==0)return(0);
211 1 Stop_I2c(); /*結束總線*/
212 1 return(1);
213 1 }
214
215
216
217
218 /*******************************************************************
219 向有子地址器件發送多字節數據函數
220 函數原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
221 功能: 從啟動總線到發送地址,子地址,數據,結束總線的全過程,從器件
222 地址sla,子地址suba,發送內容是s指向的內容,發送no個字節。
223 如果返回1表示操作成功,否則操作有誤。
224 注意: 使用前必須已結束總線。
225 ********************************************************************/
226 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
227 {
228 1 uchar i;
229 1
230 1 Start_I2c(); /*啟動總線*/
231 1 SendByte(sla); /*發送器件地址*/
232 1 if(ack==0)return(0);
233 1 SendByte(suba); /*發送器件子地址*/
234 1 if(ack==0)return(0);
235 1
236 1 for(i=0;i<no;i++)
237 1 {
238 2 SendByte(*s); /*發送數據*/
239 2 if(ack==0)return(0);
240 2 s++;
C51 COMPILER V7.20 IIC_OK_ 06/07/2006 17:13:03 PAGE 5
241 2 }
242 1 Stop_I2c(); /*結束總線*/
243 1 return(1);
244 1 }
245
246
247 /*******************************************************************
248 向無子地址器件發送多字節數據函數
249 函數原型: bit ISendStr(uchar sla,ucahr *s,uchar no);
250 功能: 從啟動總線到發送地址,子地址,數據,結束總線的全過程,從器件
251 地址sla,發送內容是s指向的內容,發送no個字節。
252 如果返回1表示操作成功,否則操作有誤。
253 注意: 使用前必須已結束總線。
254 ********************************************************************/
255 bit ISendStrExt(uchar sla,uchar *s,uchar no)
256 {
257 1 uchar i;
258 1
259 1 Start_I2c(); /*啟動總線*/
260 1 SendByte(sla); /*發送器件地址*/
261 1 if(ack==0)return(0);
262 1
263 1 for(i=0;i<no;i++)
264 1 {
265 2 SendByte(*s); /*發送數據*/
266 2 if(ack==0)return(0);
267 2 s++;
268 2 }
269 1 Stop_I2c(); /*結束總線*/
270 1 return(1);
271 1 }
272
273
274
275
276
277 /*******************************************************************
278 向無子地址器件讀字節數據函數
279 函數原型: bit IRcvByte(uchar sla,ucahr *c);
280 功能: 從啟動總線到發送地址,讀數據,結束總線的全過程,從器件地
281 址sla,返回值在c.
282 如果返回1表示操作成功,否則操作有誤。
283 注意: 使用前必須已結束總線。
284 ********************************************************************/
285 bit IRcvByte(uchar sla,uchar *c)
286 {
287 1 Start_I2c(); /*啟動總線*/
288 1 SendByte(sla+1); /*發送器件地址*/
289 1 if(ack==0)return(0);
290 1 *c=RcvByte(); /*讀取數據*/
291 1 Ack_I2c(1); /*發送非就答位*/
292 1 Stop_I2c(); /*結束總線*/
293 1 return(1);
294 1 }
295
296
297
298 /*******************************************************************
299 向有子地址器件讀取多字節數據函數
300 函數原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
301 功能: 從啟動總線到發送地址,子地址,讀數據,結束總線的全過程,從器件
302 地址sla,子地址suba,讀出的內容放入s指向的存儲區,讀no個字節。
C51 COMPILER V7.20 IIC_OK_ 06/07/2006 17:13:03 PAGE 6
303 如果返回1表示操作成功,否則操作有誤。
304 注意: 使用前必須已結束總線。
305 ********************************************************************/
306 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
307 {
308 1 uchar i;
309 1
310 1 Start_I2c(); /*啟動總線*/
311 1 SendByte(sla); /*發送器件地址*/
312 1 if(ack==0)return(0);
313 1 SendByte(suba); /*發送器件子地址*/
314 1 if(ack==0)return(0);
315 1
316 1 Start_I2c(); /*重新啟動總線*/
317 1 SendByte(sla+1);
318 1 if(ack==0)return(0);
319 1 for(i=0;i<no-1;i++)
320 1 {
321 2 *s=RcvByte(); /*發送數據*/
322 2 Ack_I2c(0); /*發送就答位*/
323 2 s++;
324 2 }
325 1 *s=RcvByte();
326 1 Ack_I2c(1); /*發送非應位*/
327 1 Stop_I2c(); /*結束總線*/
328 1 return(1);
329 1 }
330
331
332 /*******************************************************************
333 向無子地址器件讀取多字節數據函數
334 函數原型: bit ISendStrExt(uchar sla,ucahr *s,uchar no);
335 功能: 從啟動總線到發送地址,讀數據,結束總線的全過程.
336 從器件地址sla,讀出的內容放入s指向的存儲區,
337 讀no個字節。如果返回1表示操作成功,否則操作有誤。
338 注意: 使用前必須已結束總線。
339 ********************************************************************/
340 bit IRcvStrExt(uchar sla,uchar *s,uchar no)
341 {
342 1 uchar i;
343 1
344 1 Start_I2c();
345 1 SendByte(sla+1);
346 1 if(ack==0)return(0);
347 1
348 1 for(i=0;i<no-1;i++)
349 1 {
350 2 *s=RcvByte(); /*發送數據*/
351 2 Ack_I2c(0); /*發送就答位*/
352 2 s++;
353 2 }
354 1 *s=RcvByte();
355 1 Ack_I2c(1); /*發送非應位*/
356 1 Stop_I2c(); /*結束總線*/
357 1 return(1);
358 1 }
359 main()
360 {
361 1 bit flag;
362 1 flag=ISendStr(write24c01,writeaddr,T,6);
363 1 delay(10);
364 1 flag=IRcvStr(write24c01,readaddr,R,6);
C51 COMPILER V7.20 IIC_OK_ 06/07/2006 17:13:03 PAGE 7
365 1 display();}
366 void display()
367 {
368 1 uchar i,j=0x20;
369 1 for(;i<6;i++){
370 2 P0=tab[R[i]];
371 2 P2=j;
372 2 j>>=1;
373 2 delay(5);
374 2 }
375 1 i=0;
376 1 delay(5);
377 1 }
378 void delay(uchar x)
379 {
380 1 uchar i,j;
381 1 for(j=0;j<x;j++)
382 1 for(i=0;i<120;i++)
383 1 {;}
384 1 }
385
386
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 560 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 24
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -