📄 i2ctest.lst
字号:
154
155 //**********Send n bety ,n<16,page[0-7],add[0-255].error return 0********//
156 bit I2C_Send_Nbyte(unsigned char page,unsigned char add,unsigned char *buffer,unsigned char n)
157 {
158 1 unsigned char i;
159 1
160 1 I2C_start(); //send start//
161 1
162 1 I2C_Send_byte(0xa0|(page<<1)); //send device address//
163 1 if(I2C_Cack()==1)
164 1 {
165 2 I2C_stop();
166 2 return 0;
167 2 }
168 1
169 1 I2C_Send_byte(add); //send data address//
170 1 if(I2C_Cack()==1)
171 1 {
172 2 I2C_stop();
173 2 return 0;
174 2 }
175 1
176 1 for(i=0;i<n;i++) //send data//
177 1 {
178 2 I2C_Send_byte(buffer[i]);
179 2 if(I2C_Cack()==1)
C51 COMPILER V7.02a I2CTEST 09/30/2004 14:29:31 PAGE 4
180 2 {
181 3 I2C_stop();
182 3 return 0;
183 3 }
184 2 }
185 1
186 1 I2C_stop(); //send stop//
187 1 return 1;
188 1 }
189
190
191 //***********receive n byte n<16,page[0-7],add[0-255],error return 0*********//
192 bit I2C_Receive_Nbyte(unsigned char page,unsigned char add,unsigned char *buffer,unsigned char n)
193 {
194 1 unsigned char i;
195 1
196 1 I2C_start(); //send start//
197 1
198 1 I2C_Send_byte(0xa0|(page<<1)); //send device address//
199 1 if(I2C_Cack()==1)
200 1 {
201 2 I2C_stop();
202 2 return 0;
203 2 }
204 1
205 1 I2C_Send_byte(add); //send data address//
206 1 if(I2C_Cack()==1)
207 1 {
208 2 I2C_stop();
209 2 return 0;
210 2 }
211 1
212 1 I2C_stop(); //send stop//
213 1
214 1 I2C_start(); //send start//
215 1
216 1 I2C_Send_byte(0xa1|(page<<1)); //send device address read//
217 1 if(I2C_Cack()==1)
218 1 {
219 2 I2C_stop();
220 2 return 0;
221 2 }
222 1
223 1 for(i=0;i<n;i++) //send data//
224 1 {
225 2 buffer[i]=I2C_Receive_byte();
226 2 if(i!=n)
227 2 {
228 3 I2C_ack();
229 3 }
230 2 else
231 2 {
232 3 I2C_nack();
233 3 }
234 2 }
235 1
236 1 I2C_stop(); //send stop//
237 1
238 1 return 1;
239 1 }
240
241
C51 COMPILER V7.02a I2CTEST 09/30/2004 14:29:31 PAGE 5
242 //********main************//
243 void main(void)
244 {
245 1 unsigned char buffer[8],i;
246 1
247 1 SCON = 0x52;
248 1 TMOD=0x29;
249 1 TH1=0xfd;
250 1 TL1=0xfd; //** 9600 baud **//
251 1 TR1=1; //** start timer 1 **//
252 1 TI=1;
253 1 EA=1;
254 1
255 1 /* I2C_start();
256 1 I2C_Send_byte(0x64);
257 1 if(I2C_Cack()==1)
258 1 {
259 1 I2C_stop();
260 1 }
261 1 I2C_Send_byte(0x00);
262 1 if(I2C_Cack()==1)
263 1 {
264 1 I2C_stop();
265 1 }
266 1 I2C_stop()*/;
267 1 while(1)
268 1 {
269 2 I2C_start();
270 2 I2C_Send_byte(0x65);
271 2 if(I2C_Cack()==1)
272 2 {
273 3 I2C_stop();
274 3 }
275 2
276 2 for(i=0;i<8;i++)
277 2 {
278 3 buffer[i]=I2C_Receive_byte();
279 3 if(i!=8)
280 3 {
281 4 I2C_ack();
282 4 }
283 3 else
284 3 {
285 4 I2C_nack();
286 4 }
287 3 }
288 2
289 2 I2C_stop();
290 2
291 2 for(i=0;i<8;i++)
292 2 {
293 3 printf(",%x,\n",(int)buffer[i]);
294 3 }
295 2 delay_ms(2000);
296 2 }
297 1 while(1);
298 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 538 ----
CONSTANT SIZE = 6 ----
C51 COMPILER V7.02a I2CTEST 09/30/2004 14:29:31 PAGE 6
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 23
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -