📄 adda.lst
字号:
460 1 DAC0L = ADC0L;
461 1 DAC0H = ADC0H;
462 1
463 1
464 1 nRet = ADC0H;
465 1 nRet<<=8;
466 1 nRet+=ADC0L;
467 1
468 1 lt = nRet+1;
469 1 lt =lt*AD_VREF;
470 1 lt >>=12;
471 1
472 1 nRet = lt;
473 1
474 1 return nRet;
475 1
476 1
477 1 }
478
479 //------------------------------
480 // 测量温度
481 // Vtemp=0.00286*Temp+0.776
482 //-----------------------------
483
484 float SampleTemperature()
485 {
486 1 WORD nRet;
487 1 DWORD lt;
488 1 //float fTemp;
489 1
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 9
490 1 AMX0SL = 8; // 采集通道8
491 1 AD0INT = 0;
492 1
493 1 AD0BUSY = 1;
494 1
495 1
496 1 while(AD0INT==0);
497 1 AD0INT = 0;
498 1
499 1
500 1
501 1 // 计算实际的电压
502 1 nRet = ADC0H<<8;
503 1 nRet+=ADC0L;
504 1
505 1 lt =nRet+1;
506 1 lt =lt*AD_VREF;
507 1 lt >>=12;
508 1
509 1 // 1000V
510 1 lt-=776;
511 1 return (float)lt/2.86;
512 1
513 1 }
514
515
516 //------------------------------------------------------------------
517 // 主函数开始
518 //-------------------------------------------------------------------
519 void main()
520 {
521 1
522 1 EA=0; // 禁止看门狗
523 1 WDTCN = 0xDE; // 实验中不使用看门狗
524 1 WDTCN = 0xAD;
525 1
526 1
527 1 Init_Device(); // 初始化系统
528 1 InitVariable(); // 初始化变量
529 1
530 1 EA = 1;
531 1
532 1 //
533 1
534 1 TR0 = 1; // 启动定时器0
535 1
536 1 SendString("C8051F02x core Module EC1,v1.0\r\n");
537 1 SendString("AD DA Test\r\n");
538 1
539 1 g_Voltage = SampleVoltageAndOut();
540 1 g_Temperature = SampleTemperature();
541 1
542 1 while(1)
543 1 {
544 2
545 2 if(g_cMainSignal&SECD_SIGNAL)
546 2 {// 秒信号
547 3 g_cMainSignal&=~SECD_SIGNAL;
548 3
549 3 P_LED2 = !P_LED2;
550 3
551 3
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 10
552 3 // 电压测量并从DA输出电压
553 3 g_Voltage=SampleVoltageAndOut();
554 3 sprintf(g_SendBuffer,"Voltage=%.3f\r\n",(float)g_Voltage/1000);
555 3 SendString(g_SendBuffer);
556 3
557 3 // 温度转换
558 3 g_Temperature += SampleTemperature();
559 3 g_Temperature/=2;
560 3
561 3 sprintf(g_SendBuffer,"Temperature=%.1f\r\n",g_Temperature);
562 3 SendString(g_SendBuffer);
563 3
564 3
565 3 }
566 2
567 2 if(g_cMainSignal&MINU_SIGNAL)
568 2 {// 分信号
569 3 g_cMainSignal&=~MINU_SIGNAL;
570 3
571 3
572 3 }
573 2
574 2 if(g_cMainSignal&UART0RECV_SIGNAL)
575 2 {// UART0接收完成信号
576 3 g_cMainSignal&=~UART0RECV_SIGNAL;
577 3
578 3 // 确保接收缓冲区内的字符串有结尾
579 3 g_cRecvBuffer[RECVBUF_LEN-1] = 0;
580 3 // 分析接收的命令
581 3 CommandProc(g_cRecvBuffer);
582 3
583 3 }
584 2
585 2 }
586 1
587 1 }
588
589 //......................................
590 // 功能:分析接收的命令
591 // 输入参数:
592 // pRecvString,char *:输入字符串
593 // 输出参数:无
594 // 命令格式说明:
595 // setled=灯序号,开关状态 \r
596 // 灯序号: 1,LED1;2,LED2
597 // 开关状态:ON,打开灯;OFF,关闭灯
598 // 命令字符不区分大小写
599 //.......................................
600 void CommandProc(char *pRecvString)
601 {
602 1 BYTE cRet=0;
603 1 int iPos;
604 1
605 1
606 1 if(strncmp(pRecvString,"setled=",7)==0)
607 1 {// 设置LED状态命令
608 2
609 2 pRecvString+=7;
610 2
611 2 iPos=strpos(pRecvString,',');
612 2
613 2 if(iPos==-1)
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 11
614 2 {// 无效命令
615 3 cRet = 0;
616 3 }
617 2 else
618 2 {
619 3
620 3 if(strncmp(pRecvString,"2",1)==0)
621 3 {// 控制LED2
622 4 pRecvString+=2;
623 4
624 4 if(strcmp(pRecvString,"on")==0)
625 4 {// 打开LED
626 5 P_LED2 = 1;
627 5
628 5 cRet = 1;
629 5 }
630 4 else if(strcmp(pRecvString,"off")==0)
631 4 {// 关闭LED
632 5 P_LED2 = 0;
633 5
634 5 cRet = 1;
635 5 }
636 4 else
637 4 {
638 5 cRet = 0;
639 5 }
640 4 }
641 3 }
642 2
643 2 }
644 1 else
645 1 {// 无效命令
646 2 cRet = 0;
647 2 }
648 1
649 1 // 向主机发送应答
650 1 if(cRet)
651 1 {
652 2 SendString("\r\nOK\r\n");
653 2 }
654 1 else SendString("\r\nError\r\n");
655 1
656 1 }
657
658 //-----------------------------------------------------
659 // 函数功能:循环方式发送字符串
660 // 输出参数:pSendString,char*:欲发送的字符串的缓冲区
661 // 输出:无
662 //-----------------------------------------------------
663 void SendString(char *pSendString)
664 {
665 1
666 1 // 循环发送,首先关闭中断
667 1 ES0 =0;
668 1
669 1 while(*pSendString!=0)
670 1 {
671 2 SBUF0 = *pSendString++;
672 2 while(TI0==0);
673 2 TI0=0;
674 2 }
675 1
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 12
676 1 ES0 = 1;
677 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1045 ----
CONSTANT SIZE = 114 ----
XDATA SIZE = 200 ----
PDATA SIZE = ---- ----
DATA SIZE = 12 16
IDATA SIZE = 20 ----
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 + -