⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adda.lst

📁 silicon公司c8051F020集成以太网接口核心模块ADCDAC例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -