?? vi2c_c51.lst
字號:
180 1 }
181
182
183
184 /*******************************************************************
185 用戶接口函數(shù)
186 *******************************************************************/
187
188
189 /*******************************************************************
190 向無子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)
191 函數(shù)原型: bit ISendByte(uchar sla,ucahr c);
192 功能: 從啟動(dòng)總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla.
193 如果返回1表示操作成功,否則操作有誤。
194 注意: 使用前必須已結(jié)束總線。
195 ********************************************************************/
196 bit ISendByte(uchar sla,uchar c)
197 {
198 1 Start_I2c(); /*啟動(dòng)總線*/
199 1 SendByte(sla); /*發(fā)送器件地址*/
200 1 if(ack==0)return(0);
201 1 SendByte(c); /*發(fā)送數(shù)據(jù)*/
202 1 if(ack==0)return(0);
203 1 Stop_I2c(); /*結(jié)束總線*/
204 1 return(1);
205 1 }
206
207
208
209
210 /*******************************************************************
211 向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)
212 函數(shù)原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
213 功能: 從啟動(dòng)總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件
214 地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。
215 如果返回1表示操作成功,否則操作有誤。
216 注意: 使用前必須已結(jié)束總線。
217 ********************************************************************/
218 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
219 {
220 1 uchar i;
221 1
222 1 Start_I2c(); /*啟動(dòng)總線*/
223 1 SendByte(sla); /*發(fā)送器件地址*/
224 1 if(ack==0)return(0);
225 1 SendByte(suba); /*發(fā)送器件子地址*/
226 1 if(ack==0)return(0);
227 1
228 1 for(i=0;i<no;i++)
229 1 {
230 2 SendByte(*s); /*發(fā)送數(shù)據(jù)*/
231 2 if(ack==0)return(0);
232 2 s++;
233 2 }
234 1 Stop_I2c(); /*結(jié)束總線*/
235 1 return(1);
236 1 }
237
238
239 /*******************************************************************
240 向無子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)
241 函數(shù)原型: bit ISendStr(uchar sla,ucahr *s,uchar no);
C51 COMPILER V7.10 VI2C_C51 12/01/2006 22:38:24 PAGE 5
242 功能: 從啟動(dòng)總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件
243 地址sla,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。
244 如果返回1表示操作成功,否則操作有誤。
245 注意: 使用前必須已結(jié)束總線。
246 ********************************************************************/
247 bit ISendStrExt(uchar sla,uchar *s,uchar no)
248 {
249 1 uchar i;
250 1
251 1 Start_I2c(); /*啟動(dòng)總線*/
252 1 SendByte(sla); /*發(fā)送器件地址*/
253 1 if(ack==0)return(0);
254 1
255 1 for(i=0;i<no;i++)
256 1 {
257 2 SendByte(*s); /*發(fā)送數(shù)據(jù)*/
258 2 if(ack==0)return(0);
259 2 s++;
260 2 }
261 1 Stop_I2c(); /*結(jié)束總線*/
262 1 return(1);
263 1 }
264
265
266
267
268
269 /*******************************************************************
270 向無子地址器件讀字節(jié)數(shù)據(jù)函數(shù)
271 函數(shù)原型: bit IRcvByte(uchar sla,ucahr *c);
272 功能: 從啟動(dòng)總線到發(fā)送地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件地
273 址sla,返回值在c.
274 如果返回1表示操作成功,否則操作有誤。
275 注意: 使用前必須已結(jié)束總線。
276 ********************************************************************/
277 bit IRcvByte(uchar sla,uchar *c)
278 {
279 1 Start_I2c(); /*啟動(dòng)總線*/
280 1 SendByte(sla+1); /*發(fā)送器件地址*/
281 1 if(ack==0)return(0);
282 1 *c=RcvByte(); /*讀取數(shù)據(jù)*/
283 1 Ack_I2c(1); /*發(fā)送非就答位*/
284 1 Stop_I2c(); /*結(jié)束總線*/
285 1 return(1);
286 1 }
287
288
289
290 /*******************************************************************
291 向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)
292 函數(shù)原型: bit RecndStr(uchar sla,uchar suba,ucahr *s,uchar no);
293 功能: 從啟動(dòng)總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件
294 地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲(chǔ)區(qū),讀no個(gè)字節(jié)。
295 如果返回1表示操作成功,否則操作有誤。
296 注意: 使用前必須已結(jié)束總線。
297 ********************************************************************/
298 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
299 {
300 1 uchar i;
301 1
302 1 Start_I2c(); /*啟動(dòng)總線*/
303 1 SendByte(sla); /*發(fā)送器件地址*/
C51 COMPILER V7.10 VI2C_C51 12/01/2006 22:38:24 PAGE 6
304 1 if(ack==0)return(0);
305 1 SendByte(suba); /*發(fā)送器件子地址*/
306 1 if(ack==0)return(0);
307 1
308 1 Start_I2c(); /*重新啟動(dòng)總線*/
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(); /*發(fā)送數(shù)據(jù)*/
314 2 Ack_I2c(0); /*發(fā)送就答位*/
315 2 s++;
316 2 }
317 1 *s=RcvByte();
318 1 Ack_I2c(1); /*發(fā)送非應(yīng)位*/
319 1 Stop_I2c(); /*結(jié)束總線*/
320 1 return(1);
321 1 }
322
323
324 /*******************************************************************
325 向無子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)
326 函數(shù)原型: bit ISendStrExt(uchar sla,ucahr *s,uchar no);
327 功能: 從啟動(dòng)總線到發(fā)送地址,讀數(shù)據(jù),結(jié)束總線的全過程.
328 從器件地址sla,讀出的內(nèi)容放入s指向的存儲(chǔ)區(qū),
329 讀no個(gè)字節(jié)。如果返回1表示操作成功,否則操作有誤。
330 注意: 使用前必須已結(jié)束總線。
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(); /*發(fā)送數(shù)據(jù)*/
343 2 Ack_I2c(0); /*發(fā)送就答位*/
344 2 s++;
345 2 }
346 1 *s=RcvByte();
347 1 Ack_I2c(1); /*發(fā)送非應(yīng)位*/
348 1 Stop_I2c(); /*結(jié)束總線*/
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -