📄 viic_c51.lst
字号:
173
174
175
176
177 /********************************************************************
178 应答子函数
179 原型: void Ack_I2c(bit a);
C51 COMPILER V7.06 VIIC_C51 09/01/2006 15:13:00 PAGE 4
180
181 功能:主控器进行应答信号,(可以是应答或非应答信号)
182 ********************************************************************/
183 void Ack_I2c(bit a)
184 {
185 1
186 1 if(a==0)SDA=0; /*在此发出应答或非应答信号 */
187 1 else SDA=1;
188 1 _Nop();
189 1 _Nop();
190 1 _Nop();
191 1 SCL=1;
192 1 _Nop();
193 1 _Nop(); /*时钟低电平周期大于4μs*/
194 1 _Nop();
195 1 _Nop();
196 1 _Nop();
197 1 SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/
198 1 _Nop();
199 1 _Nop();
200 1 }
201
202
203
204
205
206
207 /*******************************************************************
208 向无子地址器件发送字节数据函数
209 函数原型: bit ISendByte(uchar sla,ucahr c);
210 功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
211 如果返回1表示操作成功,否则操作有误。
212 注意: 使用前必须已结束总线。
213 ********************************************************************/
214 /*
215 bit ISendByte(uchar sla,uchar c)
216 {
217 Start_I2c(); //启动总线
218 SendByte(sla); //发送器件地址
219 if(ack==0)return(0);
220 SendByte(c); //发送数据
221 if(ack==0)return(0);
222 Stop_I2c(); //结束总线
223 return(1);
224 }
225 //*/
226
227
228
229 /*******************************************************************
230 向有子地址器件发送多字节数据函数
231 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
232 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
233 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
234 如果返回1表示操作成功,否则操作有误。
235 注意: 使用前必须已结束总线。
236 ********************************************************************/
237 //*
238 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
239 {
240 1 uchar i;
241 1
C51 COMPILER V7.06 VIIC_C51 09/01/2006 15:13:00 PAGE 5
242 1 Start_I2c(); //启动总线
243 1 SendByte(sla); //发送器件地址
244 1 if(ack==0)return(0);
245 1 SendByte(suba); //发送器件子地址
246 1 if(ack==0)return(0);
247 1
248 1 for(i=0;i<no;i++)
249 1 {
250 2 SendByte(*s); //发送数据
251 2 if(ack==0)return(0);
252 2 s++;
253 2 }
254 1 Stop_I2c(); //结束总线
255 1 return(1);
256 1 }
257 //*/
258
259
260
261
262
263 /*******************************************************************
264 向无子地址器件读字节数据函数
265 函数原型: bit IRcvByte(uchar sla,ucahr *c);
266 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
267 址sla,返回值在c.
268 如果返回1表示操作成功,否则操作有误。
269 注意: 使用前必须已结束总线。
270 ********************************************************************/
271 /*
272 bit IRcvByte(uchar sla,uchar *c)
273 {
274 Start_I2c(); //启动总线
275 SendByte(sla+1); //发送器件地址
276 if(ack==0)return(0);
277 *c=RcvByte(); //读取数据
278 Ack_I2c(1); //发送非就答位
279 Stop_I2c(); //结束总线
280 return(1);
281 }
282 //*/
283
284
285
286 /*******************************************************************
287 向有子地址器件读取多字节数据函数
288 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
289 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
290 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
291 如果返回1表示操作成功,否则操作有误。
292 注意: 使用前必须已结束总线。
293 ********************************************************************/
294 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
295 {
296 1 uchar i;
297 1
298 1 Start_I2c(); /*启动总线*/
299 1 SendByte(sla); /*发送器件地址*/
300 1 if(ack==0)return(0);
301 1 SendByte(suba); /*发送器件子地址*/
302 1 if(ack==0)return(0);
303 1
C51 COMPILER V7.06 VIIC_C51 09/01/2006 15:13:00 PAGE 6
304 1 Start_I2c();
305 1 SendByte(sla+1);
306 1 if(ack==0)return(0);
307 1
308 1 for(i=0;i<no-1;i++)
309 1 {
310 2 *s=RcvByte(); /*发送数据*/
311 2 Ack_I2c(0); /*发送就答位*/
312 2 s++;
313 2 }
314 1 *s=RcvByte();
315 1 Ack_I2c(1); /*发送非应位*/
316 1 Stop_I2c(); /*结束总线*/
317 1 return(1);
318 1 }
319
320
321
322
323
324
325
326
327 /* 完毕 */
328
329
330
331
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 310 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 1
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -