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

📄 ad26.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. //--------------------------------------------------------------------------////  ad26.c - Reads the voltage on the 1-Wire//  version 1.00//// Include Files#include <stdio.h>#include "ownet.h"#include "ad26.h"int Volt_AD(int portnum, int vdd, uchar *SNum){   uchar send_block[50];   uchar test;   int send_cnt=0;   int i;   ushort lastcrc8;   int busybyte;    owSerialNum(portnum,SNum,FALSE);   // Recall the Status/Configuration page   // Recall command   send_block[send_cnt++] = 0xB8;   // Page to Recall   send_block[send_cnt++] = 0x00;   if(!owBlock(portnum,FALSE,send_block,send_cnt))      return FALSE;   send_cnt = 0;   if(owAccess(portnum))   {      // Read the Status/Configuration byte      // Read scratchpad command      send_block[send_cnt++] = 0xBE;      // Page for the Status/Configuration byte      send_block[send_cnt++] = 0x00;      for(i=0;i<9;i++)         send_block[send_cnt++] = 0xFF;      if(owBlock(portnum,FALSE,send_block,send_cnt))      {	setcrc8(portnum,0);         for(i=2;i<send_cnt;i++)	   lastcrc8 = docrc8(portnum,send_block[i]);         if(lastcrc8 != 0x00)            return FALSE;      }//Block      else         return FALSE;      test = send_block[2] & 0x08;      if(((test == 0x08) && vdd) || ((test == 0x00) && !(vdd)))         return TRUE;   }//Access   if(owAccess(portnum))   {      send_cnt = 0;      // Write the Status/Configuration byte      // Write scratchpad command      send_block[send_cnt++] = 0x4E;      // Write page      send_block[send_cnt++] = 0x00;      if(vdd)         send_block[send_cnt++] = send_block[2] | 0x08;      else         send_block[send_cnt++] = send_block[2] & 0xF7;      for(i=0;i<7;i++)         send_block[send_cnt++] = send_block[i+4];      if(owBlock(portnum,FALSE,send_block,send_cnt))      {         send_cnt = 0;         if(owAccess(portnum))         {            // Copy the Status/Configuration byte            // Copy scratchpad command            send_block[send_cnt++] = 0x48;            // Copy page            send_block[send_cnt++] = 0x00;            if(owBlock(portnum,FALSE,send_block,send_cnt))            {               busybyte = owReadByte(portnum);                        while(busybyte == 0)                  busybyte = owReadByte(portnum);               return TRUE;            }//Block         }//Access      }//Block   }//Access   return FALSE;}      float Volt_Reading(int portnum, int vdd, uchar *SNum){   uchar send_block[50];   int send_cnt=0;   int i;   int busybyte;    uchar lastcrc8;   ushort volts;   float ret=-1.0;   if(Volt_AD(portnum,vdd,SNum))   {      if(owAccess(portnum))      {         if(!owWriteByte(portnum,0xB4))         {	   //output_status(LV_ALWAYS,(char *)"DIDN'T WRITE CORRECTLY\n");	   printf ("DIDN'T WRITE CORRECTLY\n");	   return ret;         }         busybyte = owReadByte(portnum);                  while(busybyte == 0)            busybyte = owReadByte(portnum);      }      if(owAccess(portnum))      {         // Recall the Status/Configuration page         // Recall command         send_block[send_cnt++] = 0xB8;         // Page to Recall         send_block[send_cnt++] = 0x00;         if(!owBlock(portnum,FALSE,send_block,send_cnt))            return ret;      }      send_cnt = 0;      if(owAccess(portnum))      {         // Read the Status/Configuration byte         // Read scratchpad command         send_block[send_cnt++] = 0xBE;         // Page for the Status/Configuration byte         send_block[send_cnt++] = 0x00;         for(i=0;i<9;i++)            send_block[send_cnt++] = 0xFF;         if(owBlock(portnum,FALSE,send_block,send_cnt))         {            setcrc8(portnum,0);            for(i=2;i<send_cnt;i++)               lastcrc8 = docrc8(portnum,send_block[i]);            if(lastcrc8 != 0x00)               return ret;         }         else            return ret;                   volts = ((int)send_block[6] << 8) | send_block[5];         ret = (float) volts/100;      }//Access   }   return ret;}double Get_Temperature(int portnum,uchar *SNum){   double ret=-1.0;   uchar send_block[50];   int send_cnt=0;   int i;   uchar lastcrc8;   owSerialNum(portnum,SNum,FALSE);   if(owAccess(portnum))      // Convert Temperature command      owWriteByte(portnum,0x44);   msDelay(10);   if(owAccess(portnum))   {      // Read the Status/Configuration byte      // Read scratchpad command      send_block[send_cnt++] = 0xBE;      // Page for the Status/Configuration byte      send_block[send_cnt++] = 0x00;      for(i=0;i<9;i++)         send_block[send_cnt++] = 0xFF;      if(owBlock(portnum,FALSE,send_block,send_cnt))      {         setcrc8(portnum,0);         for(i=2;i<send_cnt;i++) {            lastcrc8 = docrc8(portnum,send_block[i]);	 } printf ("\n");         if(lastcrc8 != 0x00)            return ret;      }      else         return ret;                ret = ((((unsigned int)send_block[4] << 8) | send_block[3]) >> 3) * 0.03125;   }//Access   return ret;}

⌨️ 快捷键说明

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