📄 i2c.lst
字号:
159 SDA=0;
160 else SDA=1;
161 _Nop();
162 _Nop();
163 _Nop();
164 _Nop();
165 SCL=1;
166 _Nop();
167 _Nop();
168 _Nop();
169 _Nop();
170 _Nop();
171 _Nop();
172 SCL=0; // 清除时钟线,以便继续接收
173 _Nop();
174 _Nop();
175 _Nop();
176 _Nop();
177 }
C51 COMPILER V8.02 I2C 04/18/2008 11:57:43 PAGE 4
178
179 /**********************************************************************************
180 向无子地址器件发送字节数据函数
181 函数原形:
182 bit sendbytedata(BYTE slave,BYTE data);
183 功能:
184 从启动总线到发送地址、数据,结束总线的过程
185 参数:
186 Slave:从器件地址
187 Data:要发送的数据
188 返回值:
189 如果返回1,表示操作成功;否则操作有误
190 注意:使用前必须已结束总线
191 **********************************************************************************/
192 bit sendbytedate(BYTE slave,BYTE Data)
193 {
194 start_I2C(); //启动总线
195 sendbyte(slave); //发送器件地址
196 if(ack==0)
197 return(0);
198 sendbyte(Data); //发送数据
199 if(ack==0)
200 return(0);
201 stop_I2C(); //结束总线
202 return(1);
203 }
204 /**********************************************************************************
205 向有子地址器件发送多字节数据函数
206 函数原形:
207 bit sendstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num);
208 功能:
209 从启动总线到发送地址,子地址,结束总线的过程
210 参数:
211 Slave:从器件地址
212 subaddress:子地址
213 source:发送内容的指针
214 num:发送字节个数
215 返回值:
216 如果返回1,表示操作成功;否则操作有误
217 注意:使用前必须已结束总线
218 **********************************************************************************/
219 /* bit sendstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num)
220 {
221 BYTE i;
222 start_I2C(); //启动总线
223 sendbyte(slave); //发送器件地址
224 if(ack==0)
225 return(0);
226 sendbyte(subaddress); //发送器件子地址
227 if(ack==0)
228 return(0);
229 for(i=0;i<num;i++)
230 {
231 sendbyte(*source); //发送数据
232 if(ack==0)
233 return(0);
234 source++;
235 }
236 stop_I2C(); //结束总线
237 return(1);
238 }
239 */
C51 COMPILER V8.02 I2C 04/18/2008 11:57:43 PAGE 5
240 /**********************************************************************************
241 向有子地址器件发送多字节数据函数
242 函数原形:
243 bit sendstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num);
244 功能:
245 从启动总线到发送地址,子地址,结束总线的过程
246 参数:
247 Slave:从器件地址
248 subaddress:子地址
249 source:发送内容的指针
250 num:发送字节个数
251 返回值:
252 如果返回1,表示操作成功;否则操作有误
253 注意:使用前必须已结束总线
254 **********************************************************************************/
255 bit sendstr(BYTE slave,BYTE subaddress,BYTE zuzhi)
256 {
257 BYTE i;
258 start_I2C(); //启动总线
259 sendbyte(slave); //发送器件地址
260 if(ack==0)
261 return(0);
262 sendbyte(subaddress); //发送器件子地址
263 if(ack==0)
264 return(0);
265 sendbyte(zuzhi); //发送数据
266 stop_I2C(); //结束总线
267 return(1);
268 }
269 /**********************************************************************************
270 向无子地址器件读字节数据函数
271 函数原形:
272 bit recbytedata(BYTE slave,BYTE *Data);
273 功能:
274 从启动总线到发送地址,读数据,结束总线的过程
275 参数:
276 Slave:从器件地址,返回值在Data
277 返回值:
278 如果返回1,表示操作成功;否则操作有误
279 注意:使用前必须已结束总线
280 **********************************************************************************/
281
282 bit recbytedata(BYTE slave,BYTE *Data)
283 { start_I2C(); // 启动总线
284 sendbyte(slave); //发送器件地址
285 if(ack==0)return(0);
286 *Data=recbyte(); //读取数据
287 ack_i2c(1) ; //发非应答位
288 stop_I2C(); //结束总线
289 return(1);
290 }
291 /**********************************************************************************
292 向有子地址器件读多字节数据函数
293 函数原形:
294 bit recstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num);
295 功能:
296 从启动总线到发送地址,子地址,读数据,结束总线的过程
297 参数:
298 Slave:从器件地址,subaddress:子地址,source:指向读出的内容放入的存储区的指针,num:读字节个数
299 返回值:
300 如果返回1,表示操作成功;否则操作有误
301 注意:使用前必须已结束总线
C51 COMPILER V8.02 I2C 04/18/2008 11:57:43 PAGE 6
302 **********************************************************************************/
303 bit recstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num)
304 』{BYTE i;
305 start_I2C(); // 启动总线
306 sendbyte(slave); //发送器件地址
307 if(ack==0)return(0);
308 sendbyte(subaddress); //发送器件子地址
309 if(ack==0)return(0);
310 for(i=0;i<num-1;num++)
311 { source=recbyte(); //发送数据
312 ack_i2c(0); //发应答位
313 source++;
314 stop_I2C(); //结束总线
315 return(1);
316 }
317 }
318 void main()
319 {start_I2C();
320 sendstr(50H,90H,BYTE *source,BYTE num);
321 }
322
C51 COMPILATION COMPLETE. 1 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -