📄 24c64.lst
字号:
198 /*******************************************************************
199 向有子地址器件发送多字节数据函数
200 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);
201 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
202 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
203 如果返回1表示操作成功,否则操作有误。
204 注意: 使用前必须已结束总线。
205 ********************************************************************/
206 bit ISendStr(Uchar sla, Uint suba, Uchar *s, Uchar no)
207 {
208 1 Uchar i, subah, subal;
209 1
210 1 subah=suba>>8;
211 1 subal=suba & 0x00FF;
212 1 Start_I2c(); /*启动总线*/
213 1 SendByte(sla); /*发送器件地址, 0xA0,0xA2,0xA4,...,0xAE*/
214 1 if(ack==0)return(0);
215 1 SendByte(subah); /*发送器件子地址*/
216 1 if(ack==0)return(0);
217 1 SendByte(subal); /*发送器件子地址*/
218 1 if(ack==0)return(0);
219 1
220 1 for(i=0;i<no;i++)
221 1 {
222 2 SendByte(*s); /*发送数据*/
223 2 if(ack==0)return(0);
224 2 s++;
225 2 }
226 1 Stop_I2c(); /*结束总线*/
227 1 return(1);
228 1 }
229
230
231
232
233
234
235 /*******************************************************************
236 向无子地址器件读字节数据函数
237 函数原型: bit IRcvByte(unsigned char sla,ucahr *c);
238 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
239 址sla,返回值在c.
240 如果返回1表示操作成功,否则操作有误。
241 注意: 使用前必须已结束总线。
C51 COMPILER V7.06 24C64 08/09/2005 17:42:21 PAGE 5
242 ********************************************************************/
243 bit IRcvByte(Uchar sla, Uchar *c)
244 {
245 1 Start_I2c(); /*启动总线*/
246 1 SendByte(sla+1); /*发送器件地址*/
247 1 if(ack==0)return(0);
248 1 *c=RcvByte(); /*读取数据*/
249 1 Ack_I2c(1); /*发送非就答位*/
250 1 Stop_I2c(); /*结束总线*/
251 1 return(1);
252 1 }
253
254
255
256 /*******************************************************************
257 向有子地址器件读取多字节数据函数
258 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);
259 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
260 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
261 如果返回1表示操作成功,否则操作有误。
262 注意: 使用前必须已结束总线。
263 ********************************************************************/
264 bit IRcvStr(Uchar sla, Uint suba, Uchar *s, Uchar no)
265 {
266 1 Uchar i, subah, subal;
267 1
268 1 subah=suba>>8;
269 1 subal=suba & 0x00FF;
270 1 Start_I2c(); /*启动总线*/
271 1 SendByte(sla); /*发送器件地址*/
272 1 if(ack==0)return(0);
273 1 SendByte(subah); /*发送器件子地址*/
274 1 if(ack==0)return(0);
275 1 SendByte(subal); /*发送器件子地址*/
276 1 if(ack==0)return(0);
277 1
278 1 Start_I2c();
279 1 SendByte(sla+1);
280 1 if(ack==0)return(0);
281 1
282 1 for(i=0;i<no-1;i++)
283 1 {
284 2 *s=RcvByte(); /*发送数据*/
285 2 Ack_I2c(0); /*发送就答位*/
286 2 s++;
287 2 }
288 1 *s=RcvByte();
289 1 Ack_I2c(1); /*发送非应位*/
290 1 Stop_I2c(); /*结束总线*/
291 1 return(1);
292 1 }
293
294
295 //need improve
296 bit SelectAddress(Uchar caddr, Uint addr)
297 {
298 1 Uchar addrh, addrl;
299 1
300 1 addrh=addr>>8;
301 1 addrl=addr & 0x00FF;
302 1 Start_I2c(); /*启动总线*/
303 1 SendByte(caddr); /*发送器件地址*/
C51 COMPILER V7.06 24C64 08/09/2005 17:42:21 PAGE 6
304 1 if(ack==0)return(0);
305 1 SendByte(addrh);
306 1 if(ack==0)return(0);
307 1 SendByte(addrl); /*发送地址*/
308 1 if(ack==0)return(0);
309 1 //Stop_I2c(); /*结束总线*/
310 1 return(1);
311 1 }
312
313 Uchar ByteSend_TEST(Uchar *ch, Uchar chip) //for test
314 {
315 1 Uchar ch2;
316 1 Uchar *ch1=&ch2;
317 1 Uint i;
318 1
319 1 if (ISendByte(0xA0,*ch))
320 1 {
321 2 ET0=0;
322 2 printf("send\n");
323 2 ET0=1;
324 2 }
325 1 else
326 1 {
327 2 printf("error\n"); //for test
328 2 }
329 1 ch=0;
330 1 if (SelectAddress(chip, 0x1010))
331 1 {
332 2 ET0=0;
333 2 printf("sel\n"); //for test
334 2 ET0=1;
335 2 }
336 1 else
337 1 {
338 2 printf("error\n"); //for test
339 2 }
340 1 if (IRcvByte(0xA0,ch1))
341 1 {
342 2 ET0=0;
343 2 printf("rcv\n"); //for test
344 2 ET0=1;
345 2 }
346 1 else
347 1 {
348 2 printf("error\n"); //for test
349 2 }
350 1
351 1 // DisplayOneChar(2,0,*ch1); //(for test)
352 1
353 1 for (i=0;i<1000;i++);
354 1 ET0=0;
355 1 printf("recieved:%c\n",*ch1); //for test
356 1 ET0=1;
357 1
358 1 // DisplayOneChar(3,0,ch2); //(for test)
359 1
360 1 return(ch2);
361 1 }
362
363 void PageSend_TEST(Uchar *ch) //for test
364 {
365 1 Uint i;
C51 COMPILER V7.06 24C64 08/09/2005 17:42:21 PAGE 7
366 1
367 1 if (ISendStr(0xA0,0x1022,"abcdefg",7))
368 1 {
369 2 ET0=0; printf("yes1\n"); ET0=1;
370 2 }
371 1 else
372 1 {
373 2 ET0=0; printf("error"); ET0=1;
374 2 }
375 1 for (i=0;i<7;i++)
376 1 {
377 2 if (IRcvStr(0xA0,0x1022,ch,7))
378 2 {
379 3 ET0=0; printf("yes2\n"); ET0=1;
380 3 }
381 2 }
382 1 ET0=0; printf("ch=%s\n",ch); ET0=1;
383 1 ET0=0;
384 1 ET0=1;
385 1 }
386
387
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 745 ----
CONSTANT SIZE = 69 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 29
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 + -