📄 mainloop.lst
字号:
162 5 case 0x0004: //24c08
163 5 case 0x0005: //24c16
164 5 {
165 6 operate_type=1;
166 6 break;
167 6 }
168 5 case 0x0006: //24c64
169 5 {
170 6 operate_type=2;
171 6 break;
172 6 }
173 5 default:
174 5 {
175 6 operate_type=0;
176 6 break;
177 6 }
178 5 }//end of switch
179 4 }//end of if
C51 COMPILER V7.00 MAINLOOP 06/16/2004 13:29:52 PAGE 4
180 3 else
181 3 {
182 4 GenEpBuf[0]=0xaa;
183 4 GenEpBuf[1]=0x55;
184 4 bEPPflags.bits.command=0;
185 4 }
186 3 D12_WriteEndpoint(3, 2, GenEpBuf);
187 3 bEPPflags.bits.timer=0;
188 3 }//end of if
189 2 else
190 2 {
191 3 ComEpBuf[0]=GenEpBuf[0];
192 3 ComEpBuf[1]=GenEpBuf[1];
193 3 ComEpBuf[2]=GenEpBuf[2];
194 3 ComEpBuf[3]=GenEpBuf[3];
195 3 bEPPflags.bits.command=0;
196 3 bEPPflags.bits.timer=1;
197 3 }//end of else
198 2 }//end of if
199 1
200 1 //Read operate
201 1 if ((ComEpBuf[0]=='R') && (bEPPflags.bits.command))
202 1 {
203 2 bEPPflags.bits.command=0;
204 2 rwrom_addr.word=(ComEpBuf[4] <<8)+ComEpBuf[3];
205 2 rwlen.byte.high=0;
206 2 rwlen.byte.low=ComEpBuf[5];
207 2 if (rwlen.byte.low>64) rwlen.byte.low=64;
208 2 if ((rwrom_addr.word+rwlen.byte.low)>rom_size[rwrom_type.byte.low])
209 2 {
210 3 rwlen.word=rom_size[rwrom_type.byte.low]-rwrom_addr.word;
211 3 if (rwrom_addr.word>rom_size[rwrom_type.byte.low])
212 3 {
213 4 operate_type=0;
214 4 }
215 3 }
216 2
217 2 if ((operate_type==1) || (operate_type==2))
218 2 {
219 3 read_24cxx();
220 3 }
221 2
222 2 //default operate
223 2 if (operate_type==0)
224 2 {
225 3 D12_WriteEndpoint(5, 0, EpBuf);
226 3 }
227 2 }//end of read
228 1
229 1 //write operate
230 1 if ((bEPPflags.bits.ep2_rxdone) && (bEPPflags.bits.command) && (ComEpBuf[0]=='W'))
231 1 {
232 2 bEPPflags.bits.command=0;
233 2 bEPPflags.bits.ep2_rxdone=0;
234 2 if (ComEpBuf[5]>64) ComEpBuf[5]=64;
235 2 rwrom_addr.word=(ComEpBuf[4] <<8)+ComEpBuf[3];
236 2 rwlen.byte.high=0;
237 2 rwlen.byte.low=((~rwrom_addr.byte.low) & i2crom_mask[rwrom_type.byte.low])+1;
238 2 rwcount=0;
239 2
240 2 if ((operate_type==1) || (operate_type==2))
241 2 {
C51 COMPILER V7.00 MAINLOOP 06/16/2004 13:29:52 PAGE 5
242 3 write_24cxx();
243 3 }//end of write 24cxx
244 2
245 2 }//end of ep2_rxd
246 1
247 1 }//end of sub
248
249
250 void write_24cxx(void)
251 {
252 1 do
253 1 {
254 2 if (ComEpBuf[5]>rwlen.byte.low)
255 2 {
256 3 ComEpBuf[5]=ComEpBuf[5]-rwlen.byte.low;
257 3 }
258 2 else
259 2 {
260 3 rwlen.byte.low=ComEpBuf[5];
261 3 ComEpBuf[5]=0;
262 3 }
263 2 if ((rwrom_addr.word+rwlen.byte.low)>rom_size[rwrom_type.byte.low])
264 2 {
265 3 rwlen.word=rom_size[rwrom_type.byte.low]-rwrom_addr.word;
266 3 if (rwrom_addr.word>rom_size[rwrom_type.byte.low])
267 3 {
268 4 operate_type=0;
269 4 }
270 3 ComEpBuf[5]=0;
271 3 }
272 2 if (operate_type==1)
273 2 {
274 3 do
275 3 {
276 4 i=Iwcheck(0xa0);
277 4 }while (i==0);
278 3 eprom_sla=0xa0 | rwrom_addr.byte.high;
279 3 i=ISendStr(eprom_sla, rwrom_addr.byte.low, &(EpBuf[rwcount]), rwlen.byte.low);
280 3 }
281 2 if (operate_type==2)
282 2 {
283 3 do
284 3 {
285 4 i=Iwcheck(0xa0);
286 4 }while (i==0);
287 3 eprom_sub=&(rwrom_addr.byte.high);
288 3 i=ISendStr2(0xa0, eprom_sub, &(EpBuf[rwcount]), rwlen.byte.low);
289 3 }
290 2 rwrom_addr.word=rwrom_addr.word+rwlen.byte.low;
291 2 rwcount=rwcount+rwlen.byte.low;
292 2 rwlen.byte.low=i2crom_mask[rwrom_type.byte.low]+1;
293 2 rwlen.byte.high=0;
294 2 }while (ComEpBuf[5]!=0);//end of do
295 1 }//end of write_24cxx sub
296
297 void read_24cxx(void)
298 {
299 1 if (operate_type==1)
300 1 {
301 2 eprom_sla=0xa0 | rwrom_addr.byte.high;
302 2 i=IRcvStr(eprom_sla, rwrom_addr.byte.low, EpBuf, rwlen.byte.low);
303 2 D12_WriteEndpoint(5, rwlen.byte.low, EpBuf);
C51 COMPILER V7.00 MAINLOOP 06/16/2004 13:29:52 PAGE 6
304 2 }//end of read 24c01,02,04,08,
305 1 if (operate_type==2)
306 1 {
307 2 eprom_sub=&(rwrom_addr.byte.high);
308 2 i=IRcvStr2(0xa0, eprom_sub, EpBuf, rwlen.byte.low);
309 2 D12_WriteEndpoint(5, rwlen.byte.low, EpBuf);
310 2 }//end of read 24c64
311 1 }//end of read_24cxx sub
312
313
314
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1023 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
IDATA SIZE = 8 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -