?? vi2c_c51.lst
字號:
180 1 }
181
182
183
184 /*******************************************************************
185 用戶接口函數
186 *******************************************************************/
187
188
189 /*******************************************************************
190 向無子地址器件發送字節數據函數
191 函數原型: bit ISendByte(uchar sla,ucahr 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,ucahr *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 ISendStr(uchar sla,ucahr *s,uchar no);
C51 COMPILER V7.10 VI2C_C51 07/02/2005 10:56:29 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 RecndStr(uchar sla,uchar suba,ucahr *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.10 VI2C_C51 07/02/2005 10:56:29 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,ucahr *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 = 450 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
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 + -