📄 z_i2c.lst
字号:
173 1 return(recdata);
174 1 }
175 /*******************************************************
176 应答子函数
177 函数原形:void ack_i2c(bit a);
178 功能:主控器进行应答信号,可以是应答或非应答信号。
179 参数:a应答信号
C51 COMPILER V8.02 Z_I2C 08/07/2008 09:21:33 PAGE 4
180 返回值:无
181 ********************************************************/
182 void ack_i2c(bit a)
183 { if(a==0)
184 1 SDA=0;
185 1 else SDA=1;
186 1 _Nop();
187 1 _Nop();
188 1 _Nop();
189 1 _Nop();
190 1 SCL=1;
191 1 wait();
192 1 SCL=0; // 清除时钟线,以便继续接收
193 1 _Nop();
194 1 _Nop();
195 1 _Nop();
196 1 _Nop();
197 1 }
198 /**********************************************************************************
199 向有子地址器件发送多字节数据函数
200 函数原形:
201 bit sendstr(uchar subaddress1,uchar subaddress2,uchar *source,uchar num);
202 功能:
203 从启动总线到发送地址,子地址,结束总线的过程
204 参数:
205 subaddress1:子地址1
206 subaddress2:子地址2
207 source:发送内容的指针
208 num:发送字节个数
209 返回值:
210 如果返回1,表示操作成功;否则操作有误
211 注意:使用前必须已结束总线
212 /**********************************************************************************/
213 bit sendstr(uchar subaddress1,uchar subaddress2,uchar *source,uchar num)
214 {
215 1 uchar i;
216 1 start_I2C(); //启动总线
217 1 sendbyte(ADDRWR); //发送器件地址
218 1 if(ack==0) return(0);
219 1 sendbyte(subaddress1); //发送器件高子地址
220 1 if(ack==0) return(0);
221 1 sendbyte(subaddress2); //发送器件低子地址
222 1 if(ack==0) return(0);
223 1 for(i=0;i<num;i++)
224 1 {
225 2 sendbyte(*source); //发送数据
226 2 if(ack==0) return(0);
227 2 source++;
228 2 }
229 1 stop_I2C(); //结束总线
230 1 return(1);
231 1 }
232 /**********************************************************************************
233 向有子地址器件读多字节数据函数
234 函数原形:
235 bit recstr(uchar subaddress1,uchar subaddress2,uchar *source,uchar num);
236 功能:
237 从启动总线到发送地址,子地址,读数据,结束总线的过程
238 参数:
239 subaddress1:子地址1,subaddress2:子地址2,source:指向读出的内容放入的存储区的指针,num:读字节个数
240 返回值:
241 如果返回1,表示操作成功;否则操作有误
C51 COMPILER V8.02 Z_I2C 08/07/2008 09:21:33 PAGE 5
242 注意:使用前必须已结束总线
243 **********************************************************************************/
244 /*bit recstr(uchar subaddress1,uchar subaddress2,uchar *source,uchar num)
245 { uchar i;
246 start_I2C(); // 启动总线
247 sendbyte(ADDRWR); //发送器件地址—写
248 if(ack==0)return(0);
249 sendbyte(subaddress1); //发送器件高子地址
250 if(ack==0)return(0);
251 sendbyte(subaddress2); //发送器件低子地址
252 if(ack==0)return(0);
253 start_I2C(); // 再次启动总线
254 sendbyte(ADDRRD); //再次发送器件地址—读
255 if(ack==0)return(0);
256 for(i=0;i<num-1;i++)
257 {*source=recbyte(); //接收数据
258 ack_i2c(0); //发应答位
259 source++;
260 }
261 ack_i2c(1); //发非应答位
262 stop_I2C(); //结束总线
263 return(1);
264 }*/
265 /**********************************************************************************
266 向有子地址器件读多字节数据函数
267 函数原形:
268 bit recstr(uchar subaddress1,uchar subaddress2,uchar *source,uchar num);
269 功能:
270 从启动总线到发送地址,子地址,读数据,结束总线的过程
271 参数:
272 subaddress1:子地址1,subaddress2:子地址2,source:指向读出的内容放入的存储区的指针,num:读字节个数
273 返回值:
274 如果返回1,表示操作成功;否则操作有误
275 注意:使用前必须已结束总线
276 **********************************************************************************/
277 bit recstr(uchar subaddress1,uchar subaddress2)
278 {
279 1 start_I2C(); // 启动总线
280 1 sendbyte(ADDRWR); //发送器件地址—写
281 1 if(ack==0)return(0);
282 1 sendbyte(subaddress1); //发送器件高子地址
283 1 if(ack==0)return(0);
284 1 sendbyte(subaddress2); //发送器件低子地址
285 1 if(ack==0)return(0);
286 1 start_I2C(); // 再次启动总线
287 1 sendbyte(ADDRRD); //再次发送器件地址—读
288 1 if(ack==0)return(0);
289 1 Rshu=recbyte(); //接收数据
290 1 ack_i2c(1); //发非应答位
291 1 stop_I2C(); //结束总线
292 1 return(1);
293 1 }
294 void main()
295 {
296 1 uchar *Point1,*Point2;
297 1 uchar ADDRWR=0xa0,ADDRRD=0xa1;
298 1 Point1=Wshujiu;
299 1 Point2=Rshujiu;
300 1 SDA=0;
301 1 SCL=0;
302 1 WP=0;
303 1 _Nop();
C51 COMPILER V8.02 Z_I2C 08/07/2008 09:21:33 PAGE 6
304 1 //sendstr(0x00,0x00,Point1,1);
305 1 //recstr (0x00,0x00);
306 1 while(1)
307 1 {
308 2 sendstr(0x00,0xee,Point1,1);
309 2 delay (200);
310 2 recstr (0x00,0xee);
311 2 P0=Rshu;
312 2 delay (100);
313 2 }
314 1 }
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 380 ----
CONSTANT SIZE = 2 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 14
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 + -