📄 i2c_drv.lst
字号:
81 * NOTE:
82 *----------------------------------------------------------------------------
83 * REQUIREMENTS:
84 *****************************************************************************/
85 Byte I2c_scanLSB (void)
86 {
87 1 Byte i;
88 1 char bByte = 0x00,temp;
89 1
90 1 for (i=0; i<8; i++){
91 2 ISCL = High;
92 2 I2c_wait();
93 2 if (DTS_DIN){
94 3 temp = 0x01;
95 3 temp <<= i;
96 3 bByte |= temp;
C51 COMPILER V8.01 I2C_DRV 08/07/2006 11:16:11 PAGE 9
97 3 }
98 2 ISCL = Low;
99 2 I2c_wait();
100 2 }
101 1 return (bByte);
102 1
103 1 }
104
105 /*F**************************************************************************
106 * NAME: I2c_getLSB
107 *----------------------------------------------------------------------------
108 * PARAMS:
109 *
110 * return:
111 *----------------------------------------------------------------------------
112 * PURPOSE:
113 *----------------------------------------------------------------------------
114 * EXAMPLE:
115 *----------------------------------------------------------------------------
116 * NOTE:
117 *----------------------------------------------------------------------------
118 * REQUIREMENTS:
119 *****************************************************************************/
120 void I2c_getLSB (Byte bByte)
121 {
122 1 Byte i;
123 1
124 1 for (i=0; i<8; i++)
125 1 {
126 2 if (bByte & 0x80) ISDA = High;
127 2 else ISDA = Low;
128 2 bByte <<= 1;
129 2 I2c_wait();
130 2 ISCL = High;
131 2 I2c_wait();
132 2 ISCL = Low;
133 2 I2c_wait();
134 2 }
135 1 ISDA = High;
136 1 I2c_wait();
137 1 ISCL = High;
138 1 I2c_wait();
139 1 I2c_wait();
140 1 ISCL = Low;
141 1 I2c_wait();
142 1 }
143
144 /*F**************************************************************************
145 * NAME: I2c_start
146 *----------------------------------------------------------------------------
147 * PARAMS:
148 *
149 * return:
150 *----------------------------------------------------------------------------
151 * PURPOSE:
152 *----------------------------------------------------------------------------
153 * EXAMPLE:
154 *----------------------------------------------------------------------------
155 * NOTE:
156 *----------------------------------------------------------------------------
157 * REQUIREMENTS:
158 *****************************************************************************/
C51 COMPILER V8.01 I2C_DRV 08/07/2006 11:16:11 PAGE 10
159 void I2c_start (void)
160 {
161 1 ISDA = High;
162 1 ISCL = High;
163 1 I2c_wait();
164 1 ISDA = Low;
165 1 I2c_wait();
166 1 ISCL = Low;
167 1 }
168
169 /*F**************************************************************************
170 * NAME: I2c_stop
171 *----------------------------------------------------------------------------
172 * PARAMS:
173 *
174 * return:
175 *----------------------------------------------------------------------------
176 * PURPOSE:
177 *----------------------------------------------------------------------------
178 * EXAMPLE:
179 *----------------------------------------------------------------------------
180 * NOTE:
181 *----------------------------------------------------------------------------
182 * REQUIREMENTS:
183 *****************************************************************************/
184 void I2c_stop (void)
185 {
186 1 ISDA = Low;
187 1 I2c_wait();
188 1 ISCL = High;
189 1 I2c_wait();
190 1 ISDA = High;
191 1 I2c_wait();
192 1 }
193
194 /*F**************************************************************************
195 * NAME: I2c_ack
196 *----------------------------------------------------------------------------
197 * PARAMS:
198 *
199 * return:
200 *----------------------------------------------------------------------------
201 * PURPOSE:
202 *----------------------------------------------------------------------------
203 * EXAMPLE:
204 *----------------------------------------------------------------------------
205 * NOTE:
206 *----------------------------------------------------------------------------
207 * REQUIREMENTS:
208 *****************************************************************************/
209 void I2c_ack (void)
210 {
211 1 ISDA = Low;
212 1 I2c_wait();
213 1 ISDA = High;
214 1 I2c_wait();
215 1 }
216
217 /*F**************************************************************************
218 * NAME: I2c_init
219 *----------------------------------------------------------------------------
220 * PARAMS:
C51 COMPILER V8.01 I2C_DRV 08/07/2006 11:16:11 PAGE 11
221 *
222 * return:
223 *----------------------------------------------------------------------------
224 * PURPOSE:
225 *----------------------------------------------------------------------------
226 * EXAMPLE:
227 *----------------------------------------------------------------------------
228 * NOTE:
229 *----------------------------------------------------------------------------
230 * REQUIREMENTS:
231 *****************************************************************************/
232 void I2c_init (void)
233 {
234 1 ISDA = High;
235 1 I2c_wait();
236 1 ISCL = High;
237 1 I2c_wait();
238 1 }
239
240 /*F**************************************************************************
241 * NAME: I2c_wait
242 *----------------------------------------------------------------------------
243 * PARAMS:
244 *
245 * return:
246 *----------------------------------------------------------------------------
247 * PURPOSE:
248 *----------------------------------------------------------------------------
249 * EXAMPLE:
250 *----------------------------------------------------------------------------
251 * NOTE:
252 *----------------------------------------------------------------------------
253 * REQUIREMENTS:
254 *****************************************************************************/
255 void I2c_wait (void)
256 {
257 1 char i;
258 1 for(i=0; i<2; i++){
259 2 i = i;
260 2 }
261 1 }
262
263
C51 COMPILER V8.01 I2C_DRV 08/07/2006 11:16:11 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _I2c_ReadByte (BEGIN)
; SOURCE LINE # 32
0000 8F00 R MOV address,R7
; SOURCE LINE # 33
; SOURCE LINE # 34
0002 E4 CLR A
0003 F500 R MOV bTemp,A
; SOURCE LINE # 36
0005 120000 R LCALL I2c_start
; SOURCE LINE # 37
0008 7FA0 MOV R7,#0A0H
000A 120000 R LCALL _I2c_getLSB
; SOURCE LINE # 38
000D AF00 R MOV R7,address
000F 120000 R LCALL _I2c_getLSB
; SOURCE LINE # 39
0012 120000 R LCALL I2c_start
; SOURCE LINE # 40
0015 7FA1 MOV R7,#0A1H
0017 120000 R LCALL _I2c_getLSB
; SOURCE LINE # 41
001A 120000 R LCALL I2c_scanLSB
001D 8F00 R MOV bTemp,R7
; SOURCE LINE # 42
001F 120000 R LCALL I2c_ack
; SOURCE LINE # 43
0022 120000 R LCALL I2c_stop
; SOURCE LINE # 44
0025 AF00 R MOV R7,bTemp
; SOURCE LINE # 45
0027 ?C0001:
0027 22 RET
; FUNCTION _I2c_ReadByte (END)
; FUNCTION _I2c_WriteByte (BEGIN)
; SOURCE LINE # 62
0000 8F00 R MOV address,R7
0002 8D00 R MOV bByte,R5
; SOURCE LINE # 63
; SOURCE LINE # 64
0004 120000 R LCALL I2c_start
; SOURCE LINE # 65
0007 AF00 R MOV R7,address
0009 120000 R LCALL _I2c_getLSB
; SOURCE LINE # 66
000C AF00 R MOV R7,bByte
000E 120000 R LCALL _I2c_getLSB
; SOURCE LINE # 67
0011 020000 R LJMP I2c_stop
; FUNCTION _I2c_WriteByte (END)
; FUNCTION I2c_scanLSB (BEGIN)
; SOURCE LINE # 85
; SOURCE LINE # 86
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -