📄 i2c.lst
字号:
C51 COMPILER V8.02 I2C 10/01/2007 00:33:26 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\obj\i2c.obj
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE i2c.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\i2c.lst) OBJECT(.\obj\i2c.obj)
line level source
1 //i2c.c
2 //
3
4 #include "AppDefine.h"
5
6
7 /******************************24C01*****************************/
8 /****************************************************************/
9 void start24(void)
10 {
11 1 _nop_();SCL=0;SDA=1;SCL=1;_nop_();SDA=0;_nop_();SCL=0;
12 1 }
13 /****************************************************************/
14 void stop24(void)
15 {
16 1 SDA=0;SCL=1;_nop_();SDA=1;
17 1 }
18 /****************************************************************/
19 unsigned char read24(void)
20 {
21 1 SDA=1;
22 1 SCL=1;acc7=SDA;SCL=0;
23 1 SCL=1;acc6=SDA;SCL=0;
24 1 SCL=1;acc5=SDA;SCL=0;
25 1 SCL=1;acc4=SDA;SCL=0;
26 1 SCL=1;acc3=SDA;SCL=0;
27 1 SCL=1;acc2=SDA;SCL=0;
28 1 SCL=1;acc1=SDA;SCL=0;
29 1 SCL=1;acc0=SDA;SCL=0;
30 1 SDA=1;SCL=1;SCL=0;
31 1 return(ACC);
32 1 }
33 /****************************************************************/
34 void write24(unsigned char dd)
35 {
36 1 ACC=dd;
37 1 SDA=acc7;SCL=1;SCL=0;
38 1 SDA=acc6;SCL=1;SCL=0;
39 1 SDA=acc5;SCL=1;SCL=0;
40 1 SDA=acc4;SCL=1;SCL=0;
41 1 SDA=acc3;SCL=1;SCL=0;
42 1 SDA=acc2;SCL=1;SCL=0;
43 1 SDA=acc1;SCL=1;SCL=0;
44 1 SDA=acc0;SCL=1;SCL=0;
45 1 SDA=1;SCL=1;
46 1 }
47 /****************************************************************/
48 /* 这里是随机读数据,其过程是先写数据地址,再读出数据
49 address是数据存放地址,cdata是返回数据*/
50 unsigned char xbRead24(unsigned int address)
51 {
52 1 unsigned char device;
53 1 unsigned char cdata;
54 1 /*24C01的地址为1010,000,0即硬件上A0A1A2为000,这里是R/W=1*/
55 1 device=0xa1;
C51 COMPILER V8.02 I2C 10/01/2007 00:33:26 PAGE 2
56 1 start24();write24(0xa0);SCL=0;write24(address);SCL=0;
57 1 start24();write24(0xa1);SCL=0;cdata=read24();stop24();return(cdata);
58 1 }
59 /****************************************************************/
60 /*address是数据存放地址,cdata是数据*/
61 void xbWrite24(unsigned int address,unsigned char cdata)
62 {
63 1 unsigned char device;
64 1 unsigned char time;
65 1 /*24C01的地址为1010,000,0即硬件上A0A1A2为000,这里是R/W=0*/
66 1 device=0xa0;
67 1 start24();write24(device);SCL=0;write24(address);SCL=0;write24(cdata);SCL=0;stop24();
68 1 time=0; /*time为定时器时间参考,time增加1代表1ms,如果没有用定时器,取消该行*/
69 1 while (1) {
70 2 start24();
71 2 write24(device);/*write24(0xa0|ddd);*/
72 2 SDA=1;
73 2 if (SDA==0)
74 2 break;
75 2 /*if (time>10)
76 2 break;*/ /*此行防止由于eeprom器件损坏后的死循环*/
77 2 SCL=0;
78 2 }
79 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 254 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -