📄 i2c.lst
字号:
C51 COMPILER V7.50 I2C 08/19/2005 10:45:36 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C DEBUG OBJECTEXTEND
line level source
1 //***************************************************************
2 // I2C functions for ST72321 - master mode only
3 // Function : Delay10us
4 // Description : delay 10us each time is called
5 // can be modified for different CPU speed
6 // **************************************************************
7 #include "reg52.h"
8 #include "globedef.h"
9 #include "i2c.h"
10 #include "delay.h"
11
12
13 //***************************************************************
14 // Send start condition
15 // ensure data is high then issue a start condition
16 // see also i2c_Start() macro
17 //***************************************************************
18 void I2C_Start (void)
19 {
20 1 Pin_I2CSDA = 1;
21 1 Delay5US();
22 1 Delay5US();
23 1 Pin_I2CSCL = 1;
24 1 Delay5US();
25 1 Delay5US();
26 1 Pin_I2CSDA = 0;
27 1 Delay5US();
28 1 Delay5US();
29 1 Delay5US();
30 1 Pin_I2CSCL = 0;
31 1 }
32
33 //***************************************************************
34 // Send stop condition
35 // data low-high while clock high
36 //***************************************************************
37 void I2C_Stop (void)
38 {
39 1 Pin_I2CSDA = 0;
40 1 Delay5US();
41 1 Pin_I2CSCL = 1;
42 1 Delay5US();
43 1 Delay5US();
44 1 Pin_I2CSDA = 1;
45 1 }
46
47 //***************************************************************
48 //ROUTINE NAME : I2C_Ack
49 //INPUT/OUTPUT : None.
50 //DESCRIPTION : Acknoledge generation from now.
51 //COMMENTS : Transfer sequence = DATA, ACK.
52 //***************************************************************
53
54 void I2C_Rack(void)
55 {
C51 COMPILER V7.50 I2C 08/19/2005 10:45:36 PAGE 2
56 1
57 1 Pin_I2CSCL = 0;
58 1 Pin_I2CSDA = 1;
59 1 Delay5US();
60 1 Delay5US();
61 1 Pin_I2CSCL = 1;
62 1 Delay5US();
63 1 Delay5US();
64 1 Delay5US();
65 1 Pin_I2CSDA = 0;
66 1 Pin_I2CSCL = 0;
67 1 Delay5US();
68 1
69 1 }
70
71
72 /*
73 void I2C_Ack (void)
74 {
75 Pin_I2CSCL = 0;
76 Delay5US();
77 Pin_I2CSDA = 0;
78 Delay5US();
79 Pin_I2CSCL = 1;
80 Delay5US();
81 Pin_I2CSCL = 0;
82 Delay5US();
83 Pin_I2CSDA = 1;
84 }
85
86 */
87 //***************************************************************
88 //ROUTINE NAME : I2C_nAck
89 //INPUT/OUTPUT : None.
90 //DESCRIPTION : Non acknoledge generation from now.
91 //COMMENTS : Transfer sequence = DATA, NACK.
92 //***************************************************************
93 void I2C_nAck (void)
94 {
95 1 Pin_I2CSCL = 0;
96 1 Delay5US();
97 1 Pin_I2CSDA = 1;
98 1 Delay5US();
99 1 Pin_I2CSCL = 1;
100 1 Delay5US();
101 1 Delay5US();
102 1 Delay5US();
103 1 Pin_I2CSCL = 0;
104 1 Delay5US();
105 1 Pin_I2CSDA = 1;
106 1 }
107
108 //***************************************************************
109 // Send a byte to the slave
110 // return I2C_ERROR on error
111 //***************************************************************
112 void I2C_TxData (BYTE i2c_data)
113 {
114 1 BYTE send_i;
115 1
116 1 for(send_i=0; send_i<8; send_i++)
117 1 {
C51 COMPILER V7.50 I2C 08/19/2005 10:45:36 PAGE 3
118 2 Pin_I2CSCL = 0;
119 2 Delay5US();
120 2 if(i2c_data & 0x80)
121 2 Pin_I2CSDA = 1;
122 2 else
123 2 Pin_I2CSDA = 0;
124 2 Delay5US();
125 2 Pin_I2CSCL = 1;
126 2 Delay5US();
127 2 i2c_data <<= 1;
128 2 }
129 1
130 1 }
131
132 //***************************************************************
133 //ROUTINE NAME : I2Cm_RxData
134 //INPUT/OUTPUT : Last byte to receive flag (active high)/Received data byte.
135 //DESCRIPTION : Receive a data byte.
136 //COMMENTS : Transfer sequence = DATA, ACK, EV7...
137 //***************************************************************
138 BYTE I2C_RxData (void)
139 {
140 1 BYTE read_i;
141 1 BYTE readbyte=0;
142 1 Pin_I2CSCL = 0;
143 1 Pin_I2CSDA = 1;
144 1 Delay5US();
145 1
146 1 for(read_i=0; read_i<8; read_i++)
147 1 {
148 2 Pin_I2CSCL = 1;
149 2 readbyte <<= 1;
150 2 Delay5US();
151 2 if(Pin_I2CSDA)
152 2 readbyte |= 0x01;
153 2
154 2 Pin_I2CSCL = 0;
155 2 Delay5US();
156 2
157 2 }
158 1 return readbyte;
159 1
160 1 }
161 //***************************************************************
162 //ROUTINE NAME : I2Cm_SetAddr
163 //INPUT/OUTPUT : external I2C device address / None.
164 //DESCRIPTION : Generates Start-bit and transmits the address byte.
165 //COMMENTS : Transfer sequence = START, EV5, ADD, ACK...
166 //***************************************************************
167 void I2C_SetAddr(char i2c_addr)
168 {
169 1 I2C_TxData (i2c_addr);
170 1 }
171
172
173
174 //***************************************************************
175 // Send a byte to the slave and acknowledges the transfer
176 // return I2C_ERROR, or I2C_OK
177 //***************************************************************
178
179 /*
C51 COMPILER V7.50 I2C 08/19/2005 10:45:36 PAGE 4
180 void I2C_PutByte(BYTE DevAddr,BYTE subAddr, BYTE ucData)
181 {
182 I2C_Start();
183 I2C_SetAddr(DevAddr);
184 I2C_Rack();
185 I2C_SetAddr(subAddr);
186 I2C_Rack();
187 I2C_TxData(ucData);
188 I2C_Rack();
189 I2C_Stop();
190 }
191 */
192
193 //***************************************************************
194 // Get a byte from the slave and acknowledges the transfer
195 // return I2C_OK or I2C_ERROR
196 //***************************************************************
197
198 /*
199 BYTE I2C_GetByte(BYTE DevAddr,BYTE subAddr)
200 {
201 BYTE ucData;
202
203 I2C_Start ();
204 I2C_SetAddr(DevAddr);
205 I2C_Rack();
206 I2C_SetAddr(subAddr);
207 I2C_Rack();
208
209 I2C_Start ();
210 I2C_SetAddr(DevAddr+1);
211 I2C_Rack();
212 ucData = I2C_RxData();
213
214 I2C_nAck();
215
216 I2C_Stop();
217 return(ucData);
218 }
219 */
220 //***************************************************************
221 // Send an array of bytes to the slave
222 // -and acknowledges the transfer
223 // return I2C_OK or I2C_ERROR
224 //***************************************************************
225
226 /*
227 void I2C_PutString(BYTE DevAddr,BYTE subAddr, BYTE *str, BYTE length)
228 {
229 BYTE send_cc;
230 send_cc = 0;
231 I2C_Start ();
232 I2C_SetAddr(DevAddr);
233 I2C_Rack();
234 I2C_SetAddr(subAddr);
235 I2C_Rack();
236
237 while(length)
238 {
239 I2C_TxData(*str);
240 I2C_Rack();
241 length--;
C51 COMPILER V7.50 I2C 08/19/2005 10:45:36 PAGE 5
242 send_cc++;
243 if(length > 0)
244 str++;
245
246
247 if((send_cc % 8 == 0) && (length > 0))
248 {
249 I2C_Stop();
250 DelayX1ms(4);
251
252 {
253 I2C_Start ();
254 I2C_SetAddr(DevAddr);
255 I2C_Rack();
256 I2C_SetAddr(subAddr+send_cc);
257 I2C_Rack();
258 }
259
260 }
261 }
262 I2C_Stop();
263 }
264
265 */
266
267 /*
268 void I2C_OutString(BYTE DevAddr,BYTE subAddr, BYTE *str, BYTE length)
269 {
270 BYTE CCC;
271 I2C_Start ();
272 I2C_SetAddr(DevAddr);
273 I2C_Rack();
274 I2C_SetAddr(subAddr);
275 I2C_Rack();
276
277 while(length)
278 {
279
280 I2C_TxData(*str);
281 I2C_Rack();
282 length--;
283
284 if(length > 0)
285 str++;
286 }
287 I2C_Stop();
288 for(CCC = 0; CCC <2;CCC++)
289 ;
290
291 }
292 */
293
294 //***************************************************************
295 // Reads number bytes from the slave, stores them at str
296 // -and acknowledges the transfer
297 // return I2C_OK or I2C_ERROR not successfully read
298 //***************************************************************
299
300 /*
301 void I2C_GetString(BYTE DevAddr,BYTE subAddr, BYTE *str, BYTE number)
302 {
303 I2C_Start ();
C51 COMPILER V7.50 I2C 08/19/2005 10:45:36 PAGE 6
304 I2C_SetAddr(DevAddr);
305 I2C_Rack();
306 I2C_SetAddr(subAddr);
307 I2C_Rack();
308
309 I2C_Start ();
310 I2C_SetAddr(DevAddr+1);
311 I2C_Rack();
312
313 while(number)
314 {
315 *str = I2C_RxData();
316 if (number==1)
317 I2C_nAck();
318 else
319 I2C_Ack();
320 str++;
321 number -= 1;
322 }
323 I2C_Stop();
324 }
325 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 198 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -