📄 system.lst
字号:
233 ///////////////////////////////////////////////////////////////////////////////
234 ///////////////////////////////////////////////////////////////////////////////
235 //////////////////////////////////////////////// 以下是关于I2C总线的 ///////
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 5
236 //////////////////////////////////////////////// 延时6us ////////////
237 void delay6us(){
238 1 nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
239 1 nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
240 1 nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
241 1 nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
242 1 nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
243 1 nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;nop=0;
244 1 }
245 //////////////////////////////////////////////// 延时任意us ////////////
246 void delayus(unsigned int us){
247 1 unsigned int i;
248 1 for(i=0;i<us;i++);
249 1 }
250 //////////////////////////////////////////////// 启动I2C总线 ///////////
251 void i2cstart(){
252 1 SCL=0;
253 1 delay6us();
254 1 SDA=1;
255 1 delay6us();
256 1 SCL=1;
257 1 delay6us();
258 1 SDA=0;
259 1 delay6us();
260 1 SCL=0;
261 1 delay6us();
262 1 }
263 //////////////////////////////////////////////// 关闭I2C总线 ///////////
264 void i2cstop(){
265 1 SCL=0;
266 1 delay6us();
267 1 SDA=0;
268 1 delay6us();
269 1 SCL=1;
270 1 delay6us();
271 1 SDA=1;
272 1 delay6us();
273 1 SCL=0;
274 1 delay6us();
275 1 }
276
277 //////////////////////////////////////////////// 发送非应答位 //////////
278 void mnack(){
279 1 SDA=1;
280 1 delay6us();
281 1 SCL=1;
282 1 delay6us();
283 1 SCL=0;
284 1 delay6us();
285 1 SDA=0;
286 1 }
287 //////////////////////////////////////////////// 应答位检查子程序 //////
288 unsigned char checkack(){
289 1 unsigned char ack;
290 1 SDA=1;
291 1 delay6us();
292 1 SCL=1;
293 1 delay6us();
294 1 ack=SDA;
295 1 delay6us();
296 1 SCL=0;
297 1 delay6us();
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 6
298 1 return(ack);
299 1 }
300 /////////////////////////////////////////////// 向FLASH写1个字节 ///////
301 void write1byte(unsigned char input){
302 1 unsigned char i,temp;
303 1 temp = input;
304 1 for(i=0;i<8;i++){
305 2 SCL = 0;
306 2 delay6us();
307 2 temp<<=1;
308 2 SDA = CY;//temp左移溢出的位
309 2 delay6us();
310 2 SCL = 1;
311 2 delay6us();
312 2 }
313 1 SCL = 0;
314 1 delay6us();
315 1 SDA = 1;
316 1 }
317 /////////////////////////////////////////////// 从FLASH中读1个字节 /////////
318 unsigned char read1byte(){
319 1 unsigned char i,temp;
320 1 temp = 0;
321 1 SCL = 0;
322 1 delay6us();
323 1 SDA = 1;
324 1 delay6us();
325 1 for(i=0;i<8;i++){
326 2 SCL = 1;
327 2 delay6us();
328 2 temp=(temp<<=1) | SDA;
329 2 SCL = 0;
330 2 delay6us();
331 2 }
332 1 SDA = 1;
333 1 delay6us();
334 1 delayus(2000);
335 1 return(temp);
336 1 }
337 //********************************************************************************************************
-*********************************************
338 //从存储器芯片指定地址处读出一字节
339 //********************************************************************************************************
-*********************************************
340 unsigned char write_byte(unsigned char dat,unsigned int addr)
341 {
342 1 i2cstart();
343 1 write1byte(W_CONTROLBYTE);
344 1 if(checkack()==1)
345 1 return 1;
346 1 write1byte(addr>>8); //写入高8位地址
347 1 if(checkack()==1)
348 1 return 1;
349 1 write1byte((unsigned char)addr); //写入低8位地址
350 1 if(checkack()==1)
351 1 return 1;
352 1 write1byte(dat);
353 1 if(checkack()==1)
354 1 return 1;
355 1 i2cstop();
356 1 delayus(2000);
357 1 delayus(2000);
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 7
358 1 delayus(2000);
359 1 return 0;
360 1 }
361 //********************************************************************************************************
-*******************************************
362 //写入一字节到存储器芯片指定地址处
363 //********************************************************************************************************
-*******************************************
364 unsigned char read_byte(unsigned int addr)
365 {
366 1 unsigned char temp;
367 1 i2cstart();
368 1 write1byte(W_CONTROLBYTE);
369 1 if(checkack()==1)
370 1 return 1;
371 1 write1byte(addr>>8); //写入高8位地址
372 1 if(checkack()==1)
373 1 return 1;
374 1 write1byte((unsigned char)addr); //写入低8位地址
375 1 if(checkack()==1)
376 1 return 1;
377 1 i2cstart();
378 1 write1byte(R_CONTROLBYTE);
379 1 if(checkack()==1)
380 1 return 1;
381 1 temp=read1byte();
382 1 mnack();
383 1 i2cstop();
384 1 return temp;
385 1 }
386 ///////////////////////////////////////////////////////////////////////////////////////////////
387 ///////////////////////////////////////////////////////////////////////////////////////////////
388 //======================================== END ===============================================
389
390 //********************************************************************************************************
-**************************************
391 //给LCD发送一个字节
392 //********************************************************************************************************
-**************************************
393 void send_lcd_byte(unsigned char dat)
394 {
395 1 STB=1;
396 1 while(Busy==1); //等待系统空闲
397 1 delay4us(); //延时us
398 1 delay4us();
399 1 P2=dat;
400 1 STB=0; //下降沿送入
401 1 delay4us();
402 1 STB=1 ;
403 1 }
404
405 //********************************************************************************************************
-***************************************
406 //通过UART0发送一个字符
407 //********************************************************************************************************
-****************************************
408 void uart0_send_byte(unsigned char dat)
409 {
410 1
411 1 }
*** WARNING C280 IN LINE 408 OF SYSTEM.C: 'dat': unreferenced local variable
412
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 8
413
414 //********************************************************************************************************
-*********************************************
415 //读取发射率
416 //********************************************************************************************************
-********************************************
417 unsigned int get_emissivity(void)
418 {
419 1 return 0;
420 1 }
421
422 //********************************************************************************************************
-********************************************
423 //读取工作电压
424 //********************************************************************************************************
-********************************************
425 unsigned int get_voltige(void)
426 {
427 1 return 0;
428 1 }
429
430 //********************************************************************************************************
-*******************************************
431 //读取工作电流
432 //********************************************************************************************************
-********************************************
433 unsigned int get_current(void)
434 {
435 1 return 0;
436 1 }
437
438 //========================================================================================================
-===
439 //timer0中断
440 //========================================================================================================
441 void timer0_ISR(void) interrupt 1
442 {
443 1 //unsigned char i;
444 1 TL0=0x40;
445 1 TH0=0xB0;//这样T0就在20ms内中断一次
446 1 //第一个10ms时采集电压和发射率
447 1 SFRPAGE=LEGACY_PAGE;
448 1 AMX0SL=2; //发射率通道
449 1 delay4us();
450 1 AD0INT=0;
451 1 AD0BUSY=1;//启动转换
452 1 while(AD0INT==0);
453 1 AD0INT=0;
454 1 emissivity_AD=(ADC0H & 0x0F)*256+ADC0L;
455 1
456 1 if(time==6)
457 1 {
458 2 AMX0SL=1; //电压通道
459 2 delay4us();
460 2 AD0INT=0;
461 2 AD0BUSY=1;//启动转换
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -