1 /*************************此部分为AT2402的驱动程序使用I2C总线连接*************************************/
2
3 #include<I2C.c>
4
5 //AT2402的功能函数
6 /*******************************************************************
7 向有子地址器件发送多字节数据函数
8 函数原型: bit ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);
9 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
10 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
11 如果返回1表示操作成功,否则操作有误。
12 注意: 使用前必须已结束总线。
13 ********************************************************************/
14 bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
15 {
16 unsigned char i;
17
18 Start_I2c(); /*启动总线*/
19 SendByte(sla); /*发送器件地址*/
20 if(ack==0)return(0);
21 SendByte(suba); /*发送器件子地址*/
22 if(ack==0)return(0);
23
24 for(i=0;i<no;i++)
25 {
26 SendByte(*s); /*发送数据*/
27 if(ack==0)return(0);
28 s++;
29 }
30 Stop_I2c(); /*结束总线*/
31
32 return(1);
33 }
34
35 /*******************************************************************
36 向有子地址器件读取多字节数据函数
37 函数原型: bit RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);
38 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
39 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
40 如果返回1表示操作成功,否则操作有误。
41 注意: 使用前必须已结束总线。
42 ********************************************************************/
43 bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
44 {
45 unsigned char i;
46
47 Start_I2c(); /*启动总线*/
48 SendByte(sla); /*发送器件地址*/
49 if(ack==0)return(0);
50 SendByte(suba); /*发送器件子地址*/
51 if(ack==0)return(0);
52
53 Start_I2c(); /*重新启动总线*/
54 SendByte(sla+1);
55 if(ack==0)return(0);
56 for(i=0;i<no-1;i++)
57 {
58 *s=RcvByte(); /*发送数据*/
59 Ack_I2c(0); /*发送就答位*/
60 s++;
61 }
62 *s=RcvByte();
63 Ack_I2c(1); /*发送非应位*/
64 Stop_I2c(); /*结束总线*/
65 return(1);
66 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步