📄 i2c.lst
字号:
C51 COMPILER V6.12 I2C 04/20/2006 17:14:57 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2c.OBJ
COMPILER INVOKED BY: C:\c51\BIN\C51.EXE I2c.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include <main.h>
2
3 #define H 1
4 #define L 0
5
6 bit sda_v1;
7 bit sda_v2;
8
9 void i2cA_delay(void)//5us Time
10 {
11 1 _nop_();
12 1 _nop_();
13 1 _nop_();
14 1 _nop_();
15 1 _nop_();
16 1 _nop_();
17 1 _nop_();
18 1 _nop_();
19 1 _nop_();
20 1 _nop_();
21 1 _nop_();
22 1 _nop_();
23 1 _nop_();
24 1 _nop_();
25 1 _nop_();
26 1 _nop_();
27 1 _nop_();
28 1 _nop_();
29 1 _nop_();
30 1 _nop_();
31 1
32 1 }
33
34 void i2cA_start(void)
35 {
36 1 SDA1 = 1;
37 1 SCL1 = 1;
38 1 i2cA_delay();
39 1 SDA1 = 0;
40 1 i2cA_delay();
41 1 SCL1 = 0;
42 1 i2cA_delay();
43 1 }
44
45 void i2cA_stop(void)
46 {
47 1 SDA1 = 0;
48 1 i2cA_delay();
49 1 SCL1 = 1;
50 1 i2cA_delay();
51 1 SDA1 = 1;
52 1 i2cA_delay();
53 1 }
54
55 void i2cA_ini(void)
C51 COMPILER V6.12 I2C 04/20/2006 17:14:57 PAGE 2
56 {
57 1 i2cA_stop();
58 1 }
59
60 byte i2cA_scl(void)
61 {
62 1 bit pri_sda;
63 1 SCL1 = 1;
64 1 pri_sda = SDA1;
65 1 i2cA_delay();
66 1 sda_v1 = SDA1;
67 1 if(pri_sda)
68 1 {
69 2 if(!SDA1)
70 2 {
71 3 return(I2CA_DET_START);// Detection Start
72 3 }
73 2 }
74 1 else
75 1 {
76 2 if(SDA1)
77 2 {
78 3 return(I2CA_DET_STOP);// Detection Stop
79 3 }
80 2 }
81 1 SCL1 = 0;
82 1 i2cA_delay();
83 1 return(0x00);
84 1 }
85
86
87 byte i2cA_detack(void)
88 {
89 1 byte ovr_cnt = 0x00;
90 1 SDA1= 1;
91 1 while(SDA1 == 1)
92 1 {
93 2 ovr_cnt++;
94 2 if(ovr_cnt > OVR_VAL)
95 2 {
96 3 return(I2CA_NO_ACK);//Detection ACK Time Over
97 3 }
98 2 }
99 1 return(i2cA_scl());
100 1 }
101
102 void i2cA_genack(void)
103 {
104 1 byte y;
105 1 SDA1 = 0;
106 1 _nop_();
107 1 y = i2cA_scl();
108 1 SDA1 = 1;
109 1 _nop_();
110 1 }
111
112 byte i2cA_send(byte wData)
113 {
114 1 byte i;
115 1 byte wErr;
116 1 //wData = 0x68;
117 1 for(i=0; i<8; i++)
C51 COMPILER V6.12 I2C 04/20/2006 17:14:57 PAGE 3
118 1 {
119 2 SDA1 = (bit)(wData & 0x80);
120 2 wData <<= 1;
121 2 wErr = i2cA_scl();
122 2 if(wErr)
123 2 {
124 3 return wErr;
125 3 }
126 2 }
127 1 wErr = i2cA_detack();
128 1 return(wErr);
129 1 }
130
131 byte i2cA_receive(void)
132 {
133 1 byte i;
134 1 byte wData = 0x00;
135 1 byte y;
136 1 for(i=0; i<8; i++)
137 1 {
138 2 wData *= 2;
139 2 y = i2cA_scl();
140 2 if(sda_v1)
141 2 {
142 3 wData++;
143 3 }
144 2 }
145 1 return wData;
146 1 }
147
148 byte i2cA_senddata(byte Addr,byte *pData, byte Data_Len)//写 正确0 错误1
149 {
150 1 byte wErr;
151 1 byte i;
152 1 i2cA_start();
153 1
154 1 wErr = i2cA_send(I2C_WR_ADR);
155 1 if(wErr)
156 1 {
157 2 return wErr;
158 2 }
159 1 wErr = i2cA_send(Addr);
160 1 if(wErr)
161 1 {
162 2 return wErr;
163 2 }
164 1 for(i = 0x00; i < Data_Len; i++)
165 1 {
166 2 wErr = i2cA_send(*(pData + i));
167 2 if(wErr)
168 2 {
169 3 return wErr;
170 3 }
171 2 }
172 1 i2cA_stop();
173 1 return(0x00);
174 1 }
175
176 byte i2cA_readdata(byte Addr, byte *pData,byte Data_Len)//读 正确0 错误1
177 {
178 1 byte i;
179 1 byte wErr;
C51 COMPILER V6.12 I2C 04/20/2006 17:14:57 PAGE 4
180 1 i2cA_start();
181 1 wErr = i2cA_send(I2C_WR_ADR);
182 1 if(wErr)
183 1 {
184 2 return wErr;
185 2 }
186 1 wErr = i2cA_send(Addr);
187 1 if(wErr)
188 1 {
189 2 return wErr;
190 2 }
191 1 i2cA_start();
192 1 wErr = i2cA_send(I2C_RD_ADR);
193 1 if(wErr)
194 1 {
195 2 return wErr;
196 2 }
197 1 if(Data_Len > 1)
198 1 {
199 2 for(i=0; i<(Data_Len - 1); i++)
200 2 {
201 3 *(pData + i) = i2cA_receive();
202 3 i2cA_genack();
203 3 }
204 2 }
205 1 *(pData + (Data_Len - 1)) = i2cA_receive();
206 1 i2cA_stop();
207 1 return(0x00);
208 1 }
209
210
211
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 377 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
IDATA SIZE = ---- ----
BIT SIZE = 2 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -