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