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

📄 thermodl.c

📁 sdcc是为51等小型嵌入式cpu设计的c语言编译器支持数种不同类型的cpu
💻 C
字号:
//---------------------------------------------------------------------------// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the "Software"),// to deal in the Software without restriction, including without limitation// the rights to use, copy, modify, merge, publish, distribute, sublicense,// and/or sell copies of the Software, and to permit persons to whom the// Software is furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR// OTHER DEALINGS IN THE SOFTWARE.//// Except as contained in this notice, the name of Dallas Semiconductor// shall not be used except as stated in the Dallas Semiconductor// Branding Policy.//---------------------------------------------------------------------------////  thermodl.c - This utility uses to download the results of the//               current mission of a DS1921 Thermochron iButton.////  Version: 2.00////    History://           1.03 -> 2.00  Reorganization of Public Domain Kit//                         Y2K update, display all histogram bins, debug//                         dump.  Supports multiple thermochons.//#include <stdio.h>#include <stdlib.h>#include "ownet.h"#include "thermo21.h"// defines#define MAXDEVICES   20// local function prototypesvoid PrintResults(ThermoStateType *,FILE *,int);// tini hack#define ExitProg(msg,exit_code) {printf("%s\n",msg); exit(exit_code);}int argc=2;char *argv[]={__FILE__, "exow"};//----------------------------------------------------------------------//  This is the Main routine for thermodl.//int main() //short argc, char **argv){   int Fahrenheit=FALSE,filenum,num,i,j;   char return_msg[128];   FILE *fp;   ThermoStateType ThermoState;   uchar ThermoSN[MAXDEVICES][8]; //the serial numbers for the devices   int portnum=0;   // check arguments to see if request instruction with '?' or too many   if ((argc < 2) || (argc > 4) || ((argc > 1) && (argv[1][0] == '?' || argv[1][1] == '?')))       ExitProg("\nusage: thermodl 1wire_net_name <output_filename> </Fahrenheit>\n"              "  - Thermochron download on the 1-Wire Net port\n"              "  - 1wire_net_port required port name\n"              "    example: \"COM1\" (Win32 DS2480),\"/dev/cua0\" \n"              "    (Linux DS2480),\"1\" (Win32 TMEX)\n"              "  - <output_filename> optional output filename\n"              "  - </Fahrenheit> optional Fahrenheit mode (default Celsius)\n"              "  - version 2.00\n",1);   // attempt to acquire the 1-Wire Net   if (!owAcquire(portnum,argv[1],return_msg))      ExitProg(return_msg,1);   // success   printf("%s",return_msg);   //----------------------------------------   // Introduction   printf("\n/----------------------------------------------\n");   printf("  Find and download DS1921 Thermochron iButton(s)\n"          "  Version 2.00\n\n");   // check arguments for temperature conversion and filename   Fahrenheit = FALSE;   filenum = 0;   if (argc >= 3)   {      if (argv[2][0] != '/')         filenum = 2;      else if ((argv[2][1] == 'F') || (argv[2][1] == 'f'))         Fahrenheit = TRUE;      if (argc == 4)      {         if (argv[3][0] != '/')            filenum = 3;         else if ((argv[3][1] == 'F') || (argv[3][1] == 'f'))            Fahrenheit = TRUE;      }   }   // open the output file   fp = NULL;   if (filenum > 0)   {     fp = fopen(argv[filenum],"w+");     if(fp == NULL)       {         printf("ERROR, Could not open output file!\n");         exit(1);       }     else       printf("File '%s' opened to write mission results.\n",	      argv[filenum]);   }   // get list of Thermochron's   num = FindDevices(portnum, &ThermoSN[0],THERMO_FAM, MAXDEVICES);   // check if not present or more then 1 present   if (num == 0)      ExitProg("Thermochron not present on 1-Wire\n",1);   // loop to download each Thermochron   for (i = 0; i < num; i++)   {      // set the serial number portion in the thermo state      printf("\nDownloading: ");      for (j = 7; j >= 0; j--)      {         ThermoState.MissStat.serial_num[j] = ThermoSN[i][j];         printf("%02X",ThermoSN[i][j]);      }      printf("\n");      // download the Thermochron found      if (DownloadThermo(portnum,&ThermoSN[i][0],&ThermoState,stdout))      {	// interpret the results of the download	InterpretStatus(&ThermoState.MissStat);	InterpretAlarms(&ThermoState.AlarmData, &ThermoState.MissStat);	InterpretHistogram(&ThermoState.HistData);	InterpretLog(&ThermoState.LogData, &ThermoState.MissStat);         // print the output	PrintResults(&ThermoState,fp,Fahrenheit);      }      else      {         fprintf(fp,"\nError downloading device: ");         for (j = 0; j < 8; j++)            fprintf(fp,"%02X",ThermoSN[i][j]);         fprintf(fp,"\n");      }   }   // close opened file   if (fp != NULL)   {      printf("File '%s' closed.\n",              argv[filenum]);      fclose(fp);   }   // release the 1-Wire Net   //owRelease(portnum,return_msg);   printf("\n%s",return_msg);   ExitProg("End program normally\n",0);   return 0;}//--------------------------------------------------------------------------//  Prints the mission data optionaly to a file or standard out//void PrintResults(ThermoStateType *ThermoState, FILE *fp, int ConvertToF){  // aslink only can handle 64k, so we use the second 64k bank   char *str=(xdata char*)0x190000;   // check if need to use standard out   if (fp == NULL)      fp = stdout;#if 0   // get big block to use as a buffer   str = malloc(80000);   if (str == NULL)   {      printf("Insufficient memory available to print!\n");      return;   }#endif   // mission status   MissionStatusToString(&ThermoState->MissStat, ConvertToF, &str[0]);   fprintf(fp,"\n%s\n",str);   // alarm events   AlarmsToString(&ThermoState->AlarmData, &str[0]);   fprintf(fp,"%s\n",str);   // histogram   HistogramToString(&ThermoState->HistData, ConvertToF, &str[0]);   fprintf(fp,"%s\n",str);   // log data   LogToString(&ThermoState->LogData, ConvertToF, &str[0]);   fprintf(fp,"%s\n",str);   // debug raw data   DebugToString(&ThermoState->MissStat, &ThermoState->AlarmData,      &ThermoState->HistData, &ThermoState->LogData, &str[0]);   fprintf(fp,"%s\n",str);#if 0   // free the memory block used   free(str);#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -