📄 iic.lst
字号:
105 uchar retc;
106 uchar BitCnt;
107 retc = 0;
*** ERROR C231 IN LINE 107 OF IIC.C: 'retc': redefinition
108 SDA = 1; //置数据线为输入方式
*** ERROR C231 IN LINE 108 OF IIC.C: 'SDA': redefinition
*** ERROR C231 IN LINE 108 OF IIC.C: 'SDA': redefinition
109 for(BitCnt = 0;BitCnt < 8;BitCnt++)
*** ERROR C141 IN LINE 109 OF IIC.C: syntax error near 'for'
*** ERROR C141 IN LINE 109 OF IIC.C: syntax error near '=', expected ')'
*** ERROR C129 IN LINE 109 OF IIC.C: missing ';' before '<'
110 {
111 _nop_();
112 SCL = 0; //置时钟线为低,准备接收
113 _nop_();
114 nop();
115 nop();
116 nop();
117 nop();
118 SCL = 1; //置时钟线为高使得数据有效
119 nop();
120 nop();
121 retc = retc << 1; //左移补零
122 if (SDA == 1)
123 retc = retc + 1; //当数据为真加一
C51 COMPILER V6.23a IIC 08/23/2003 10:33:04 PAGE 4
124 nop();
125 nop();
126 }
127 SCL = 0;
128 nop();
129 nop();
130 return(retc);
131 }
132
133 /*-----------------------------------------
134 应答子函数
135 原型:void Ack_I2c(bit a);
136 功能:主控器进行应答信号,(可以是应答或者非应答信号)
137 -----------------------------------------*/
138 void Ack_I2C (bit a)
139 {
140 if( a == 0)SDA = 0; //在此发出应答信号或者非应答信号
141 else SDA = 1;
142 nop();
143 nop();
144 nop();
145 SCL = 1;
146 nop();
147 nop();
148 nop();
149 nop();
150 nop();
151 SCL = 0;
152 nop();
153 nop();
154 }
155
156 /*----------------------------------
157 向无子地址器件发送字节数据函数
158 函数原型:bit ISendByte( uchar sla,uchar c);
159 功能:从启动总线到发送地址,数据,结束总线的全过程,从器件地址
160 sla。如果返回1表示操作成功,否则表示有误
161 -----------------------------------*/
162 bit ISendByte (uchar sla,uchar c)
163 {
164 Start_I2C(); //启动
165 SendByte(sla); //发送器件地址
166 if(ack == 0)
167 return(0);
168 SendByte(c); //发送数据
169 if(ack == 0)
170 return(0);
171 Stop_I2C(); //结束
172 return(1);
173 }
174
175 /*------------------------------------
176 向有子地址器件发送多字节数据函数
177 函数原型:bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
178 功能:启动地址,发送地址,数据,结束全过程
179 从器件地址sla,子地址suba,发送内容是s指向的内容,发送
180 no个字节,如果返回1表示成功,否则表示有问题
181 ---------------------------------*/
182 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
183 {
184 uchar i;
185 Start_I2C(); //启动总线
C51 COMPILER V6.23a IIC 08/23/2003 10:33:04 PAGE 5
186 SendByte(sla); //发送器件地址
187 if(ack == 0)
188 return(0);
189 SendByte(suba); //发送器件子地址
190 if(ack == 0);
191 return(0);
192 for (i = 0;i < no; i++)
193 {
194 SendByte(*s); //发送数据
195 if(ack == 0)
196 return(0);
197 s++;
198 }
199 Stop_I2C(); //结束总线
200 return(1);
201 }
202
203 /*-----------------------------------
204 向无子地址器件读取字节数据函数
205 函数原型: bit IRcvByte(uchar sla,uchar *c)
206 功能:从启动总线到发送地址、读数据,结束总线全部过程,从器件地址sla
207 子地址suba,读出内容放在s指向的存储区,读no个字节
208 如果返回1表示操作成功,否则表示操作有误
209 ---------------------------------*/
210 bit IRcvByte(uchar sla,uchar *c)
211 {
212 Start_I2C(); //启动总线
213 SendByte(sla+1); //发送器件地址
214 if(ack==0)
215 return(0);
216 *c = RcvByte();
217 Ack_I2C(1); //发送非就应答位
218 Stop_I2C(); //结束总线
219 return(1);
220 }
221
222 /*-----------------------------------
223 向有子地址器件读取多字节数据函数
224
225
226
227 ----------------------------------*/
228 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
229 {
230 uchar i;
231 Start_I2C(); //启动总线
232 SendByte(sla); //发送器件地址
233 if(ack == 0)
234 return(0);
235 SendByte(suba); //发送子地址
236 if(ack == 0)
237 return(0);
238 Start_I2C(); //启动
239 StartByte(sla+1);
240 if(ack == 0)
241 return(0);
242 for(i = 0;i < no - 1;i++)
243 {
244 *s = RcvByte(); //接收数据
245 Ack_I2C(0); //发送应答位
246 s++;
247 }
C51 COMPILER V6.23a IIC 08/23/2003 10:33:04 PAGE 6
248 *s = RcvByte();
249 Ack_I2C(1); //发送就答位
250 Stop_I2C();
251 return(1);
252 }
253
254
255 }
C51 COMPILATION COMPLETE. 1 WARNING(S), 55 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -