?? 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.01 VI2C_C51 09/17/2003 09:39:37 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.01 VI2C_C51 09/17/2003 09:39:37 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.01 VI2C_C51 09/17/2003 09:39:37 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 + -