亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ds182x.c

?? ds18b20 thermometer with lcd, ds18b20 thermometer with lcd, ds18b20 thermometer with lcd
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************************\
*           Development board - DS182X 1-Wire Digital Thermometer         *
*-------------------------------------------------------------------------*
* Description : The DS1822 digital thermometer provides 9- to 12-bit      *
*               centigrade temperature measurements and has an alarm      *
*               function with NV user-programmable upper and lower trigger*
*               points. The DS1822 communicates over a 1-Wire bus that by *
*               definition requires only one data line (and ground) for   *
*               communication with a central microprocessor.              *
*                                                                         *
*               It has an operating temperature range of -55癈 to +125癈  *
*               and is accurate to +-2.0癈 over the range of -10癈 to     *
*               +85癈. In addition, the DS1822 can derive power directly  *
*               from the data line ("parasite power"), eliminating the    *
*               need for an external power supply.                        *
*-------------------------------------------------------------------------*
* Author(s)   : CEBA & www.DFSOFT.cz & www.HW.cz                          *
* Developed   : xx.03.2003                Last Update : 07.11.2003        *
* Version     : 1.1.0                                                     *
*-------------------------------------------------------------------------*
* Compiler    : AVR-GCC                   Version : 3.3                   *
* Source file : ds182x.c                                                  *
* Licence     : www.HW.cz - GNU GPL                                       *
*-------------------------------------------------------------------------*
* Target system : Charon II. - ATmega128, Quartz 14.7456 MHz              *
*                              UART - 19200,N,8,1                         *
*                 DS1822 1-Wire Digital Thermometer                       *
*                                                                         *
* Pin assignment:                                                         *
*   Thermometer DS1822                        Charon II. - dev. board     *
*     1  GND                                      GND                     *
*     2  DQ Data In/Out                           PD0                     *
*     3  Vcc                                      Vcc                     *
*-------------------------------------------------------------------------*
* History :                                                               *
* 07.11.03 - added support for DS18B20 devices - CEBA                     *
* 06.11.03 - added support for DS1820, fixed bug with sign bit - CEBA     *
* 27.04.03 - source code ported from x51 platform by - CEBA               *
*                                                                         *
* FIXME :                                                                 *
* - test DS1822 timing with scope                                         *
\*************************************************************************/
#ifndef _DEV_BOARD_DS182X_C
#define _DEV_BOARD_DS182X_C

#include "ds182x.h"

/* forward definitions of local functions */
static void   TM_Write_byte(u_char);
static u_char TM_Read_byte(void);
static void   TM_Write_bit(u_char);
static u_char TM_Read_bit(void);
static u_char TM_Reset(void);

#if DS_DEBUG
 static void hex_dump (u_char *buf, u_int length);
#endif

#define TM_Enter_Critical()    NutEnterCritical() /* disable all interrupts */
#define TM_Exit_Critical()     NutExitCritical()  /* reenable interrupts */

#include <util/delay.h>

u_char tm_romdta[8*MAX_CHIP];  /* storage to hold memory pattern */
u_char tm_lst0;                /* last detected zero bit */

/*
 *  TM_Convert_temperature()
 *
 *	This function converts value from raw into an integer data format.
 *	Conversion is chosen based on an 8-bit family code.
 *
 *	Assume:	0x10 - DS1820,
 *			0x10 - DS18S20 - software compatible with the DS1820.
 *	        0x22 - DS1822
 *	        0x28 - DS18B20 - software compatible with the DS1822.
 */
void TM_Convert_temperature(u_char idx, u_int *temp, u_int *frac)
{
	switch(tm_romdta[8*idx])
	{ case 0x10: if(*temp & 0x01) *frac = 5000; /* 4 decimal char. precision */
	             else *frac = 0;

				 *temp >>= 1;
                 break;

	  case 0x22:
	  case 0x28: *frac = ((*temp & (1 << 3)) ? 10000/(1 << 1) : 0) +
                         ((*temp & (1 << 2)) ? 10000/(1 << 2) : 0) +
                         ((*temp & (1 << 1)) ? 10000/(1 << 3) : 0) +
                         ((*temp & (1 << 0)) ? 10000/(1 << 4) : 0);

                 *temp >>= 4;
				 break;
      default:
#if DS_DEBUG
                 printf_P(PSTR("\n\rUnknown family code - %02X.\n\r"), tm_romdta[8*idx]);
#endif
				 *temp = 85;
				 *frac = 0;
				 break;
	}

    if(*temp & 0x80)		/* check the sign bit */
    { *temp &= 0x007F;		/* clear sign bits */
      *temp |= 0x8000;		/* set sign bit */
    }
}

/*
 *  TM_Read_temperature()
 *
 *    This function expects a previous call to TM_Search_rom() which
 *    fills an array of ROM patterns of found devices.
 *
 *  Arguments:
 *    idx is index to this array.
 *
 *  Returns:
 *    0xFFFF (-1) Device not present
 *    0x8000      Error during read (improper CRC)
 *    > 0         Temperature value
 */
u_int TM_Read_temperature(u_char idx)
{
    u_char cnt;
    u_char crc;
    u_int temper;
    u_char temp_buf[9];
    #define crc_read  ((u_char)temp_buf[8]) /* last byte is CRC */

    #if (DS_DEBUG && MULTI_DEVICE) || MULTI_DEVICE
     u_char *ptr_tmp = &tm_romdta[8*idx];
    #endif
    /*
    if (*ptr_tmp != 0x22)
        return -2;          // other device type
    */

    #if DS_DEBUG && MULTI_DEVICE
     hex_dump((char *)ptr_tmp, 8);
    #endif

    TM_Enter_Critical();   /* disable interrupts */

    /* Read previously sampled value ("packet" which last byte is CRC of previous) */
    if (TM_Reset())
    { TM_Exit_Critical();   /* reenable interrupts */
      return -1;            /* device not present (e.g. unplugged) */
    }

    #if !MULTI_DEVICE
     TM_Write_byte(0xCC); /* skip ROM */
    #else
     TM_Write_byte(0x55); /* match ROM */

     cnt = 8;
     do
        TM_Write_byte(*ptr_tmp++);
     while (--cnt);
    #endif

    TM_Write_byte(0xBE);  /* read Scratch Pad */

    for(cnt=0; cnt <= 8; cnt++) temp_buf[cnt] = TM_Read_byte();

    TM_Exit_Critical();   /* reenable interrupts */

    /* check if read byte stream has correct CRC */

    crc = 0;
    for(cnt=0; cnt<sizeof(temp_buf); cnt++) crc = TM_Crc(crc, temp_buf[cnt]);

    #if DS_DEBUG
     hex_dump((char *)&temp_buf, sizeof(temp_buf));
    #endif

    temper = ((temp_buf[1] & 0x0F) << 8) | temp_buf[0];

    if (crc)
    {
        temper |= 0x8000;    /* return error (conversion can be pending) */

        #if DS_DEBUG
         printf_P(PSTR("\n\rTM_read - err:%X(%X!=%X) "), temper, crc, crc_read);
        #endif
    }

    return temper;
}

/*
 *  TM_Sample_temperature()
 *
 *    This function initiates temperature conversion.
 *
 *  Arguments:
 *     idx == 0xFF   skip ROM and initiate conversion on all devices
 */
void TM_Sample_temperature(u_char idx)
{
    u_char *ptr_tmp = &tm_romdta[8*idx];
    u_char cnt;

    /* Issue command to sample temperature to be prepared for next read */

    TM_Enter_Critical();     /* disable interrupts */

    TM_Reset();

    if (idx == 0xFF)
        TM_Write_byte(0xCC); /* skip ROM */
    else
    {
        TM_Write_byte(0x55); /* match ROM */

        cnt = 8;
        do
            TM_Write_byte(*ptr_tmp++);
        while (--cnt);
    }

    TM_Write_byte(0x44);    /* start conversion */

    TM_Exit_Critical();     /* reenable interrupts */
}

#if !MULTI_DEVICE
/*
 *  TM_Read_rom()
 *
 *    If there is a single device on a 1-wire bus
 *    its ROM code can be read by this function.
 *
 *    If more devices are present logical AND of their ROM will be read.
 *
 *    Currently not used. Will be removed from link automatically.
 */
u_char TM_Read_rom(u_char *ptr)
{
    u_char stat = 0,
           cnt = 8,
           crc = 0,
           *fam_ptr = ptr;

    #if DS_DEBUG
     printf_P(PSTR("\n\rReading ROM Code\n\r"));
    #endif

    TM_Enter_Critical();              /* disable interrupts */

    if (!TM_Reset())
    {
        TM_Write_byte(0x33);

        do
          *ptr++ = TM_Read_byte();    /* read ROM code */
        while(--cnt);

        TM_Exit_Critical();           /* reenable interrupts */

	cnt = 8;
  	ptr = fam_ptr;

        do
          crc = TM_Crc(crc, *ptr++);  /* calculate CRC */
        while(--cnt);

        if ( !crc && *fam_ptr != 0)
	 stat = 1;                    /* reading successfully finished */
    }
    else  TM_Exit_Critical();         /* reenable interrupts */

    return stat;
}
#endif

/*
 *  TM_Search_rom()
 *
 *    This function scans all devices up to MAX_CHIP on 1-wire "network".
 *    It fills passed array with ROM patterns of found devices.
 *    This array is supposed to be used with TM_Read_temperature().
 */
u_char TM_Search_rom(u_char *ptr)
{
    u_char  tm_cnt,   /* number of found devices (thermometers) */
            st;
    u_char  cnt = MAX_SEARCH;

    memset(ptr, (u_char)0, 8 * MAX_CHIP);

    tm_lst0 = 0;
    tm_cnt = 0;

    do
    {
        st = TM_Search_next(ptr);

        #if DS_DEBUG
         printf_P(PSTR("st:%u "), st);
        #endif

        if (st)
        {
            tm_cnt++;
            if ((st == 1) && (tm_cnt < MAX_CHIP))
            {
                memcpy(ptr + 8, ptr, 8);
                ptr += 8;
            }
        }
        else
        {
            /*  if 1-wire bus is empty no device responds, this prevents endless loop */
            if (!--cnt)
                break;
        }

    } while ((st != 2) && (tm_cnt < MAX_CHIP));

    return (tm_cnt | ((st != 2) ? 0x80 : 0));
}

/*
 *  TM_Search_next()
 *
 *    Search for a single device.
 */
u_char TM_Search_next(u_char *ptr)
{
    u_char  i = 0, x = 0, lst_dif = tm_lst0;
    u_char  mask = 0x01;
    u_char  tm_rombit;

    TM_Enter_Critical();    /* disable interrupts */

    if (!TM_Reset())
        TM_Write_byte(0xF0);
    else
     {  TM_Exit_Critical(); /* reenable interrupts */
        return 0;
     }

    ptr--;                          /* adjust pointer to satisfy algorithm within loop below */

    while ((i++ < 64) && (x < 3))   /* 8 bytes */
    {
        if (!((i-1) % 8))
        {
            mask = 0x01;            /* mask within a byte */
            ptr++;                  /* skip to next byte if 8 bits passed */
        }
        else
            mask <<= 1;             /* next bit */

        x = ((u_char)TM_Read_bit()) << 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
图片区小说区区亚洲影院| 色综合视频在线观看| 成人av在线电影| 91.com在线观看| 国产精品剧情在线亚洲| 另类的小说在线视频另类成人小视频在线 | 岛国一区二区在线观看| 欧美一区二区黄色| 亚洲综合免费观看高清完整版| 国产老妇另类xxxxx| 91精品国产全国免费观看| 一区二区三区蜜桃| 成人国产精品免费| 久久久久久亚洲综合影院红桃| 日韩av在线播放中文字幕| 91老司机福利 在线| 国产日韩欧美高清在线| 黑人巨大精品欧美一区| 日韩一区二区三区电影在线观看| 亚洲一区二区三区自拍| 欧美性极品少妇| 综合激情成人伊人| 成人av网站在线观看免费| 久久精品人人做人人爽97| 蜜桃传媒麻豆第一区在线观看| 欧美在线观看视频一区二区三区| 亚洲图片激情小说| 91丨九色丨尤物| 亚洲免费在线观看视频| 97精品超碰一区二区三区| 中文字幕中文字幕一区二区| 国产精品夜夜爽| 中文字幕乱码亚洲精品一区| 国产不卡高清在线观看视频| 国产欧美日韩久久| 成人美女在线观看| ㊣最新国产の精品bt伙计久久| 成人理论电影网| 亚洲婷婷在线视频| 在线精品视频小说1| 亚洲v精品v日韩v欧美v专区| 欧美日韩视频在线第一区| 天天综合网天天综合色| 日韩一区二区中文字幕| 国产揄拍国内精品对白| 欧美极品xxx| 99久久伊人精品| 亚洲一区二区欧美| 欧美一区二区视频在线观看| 精品一区二区三区在线播放 | 亚洲成人福利片| 91.xcao| 狠狠色2019综合网| 中文字幕一区二区三区四区不卡| 色综合久久六月婷婷中文字幕| 亚洲最大成人网4388xx| 91精品啪在线观看国产60岁| 国内精品伊人久久久久av影院| 久久久久久亚洲综合| 97精品久久久午夜一区二区三区| 一区二区三区四区视频精品免费| 91精品视频网| 成人午夜私人影院| 亚洲午夜久久久| 久久这里只有精品首页| 91在线云播放| 青青草国产成人99久久| 专区另类欧美日韩| 日韩一区国产二区欧美三区| 成人av电影免费在线播放| 亚洲成av人影院在线观看网| 精品成人a区在线观看| 一本色道久久综合精品竹菊| 美女国产一区二区三区| 国产精品拍天天在线| 666欧美在线视频| 成人综合婷婷国产精品久久免费| 亚洲bt欧美bt精品777| 精品国产一区久久| 欧美性生交片4| 国产99精品国产| 美女一区二区久久| 一区二区三区四区高清精品免费观看 | 亚洲国产精品久久人人爱| 国产喷白浆一区二区三区| 欧美日韩成人综合| 99免费精品视频| 狠狠色狠狠色综合日日91app| 亚洲高清免费观看高清完整版在线观看| 精品国产sm最大网站| 欧美午夜宅男影院| 99精品视频一区二区三区| 精品一区二区av| 日本不卡视频一二三区| 尤物在线观看一区| 亚洲手机成人高清视频| 国产欧美日韩综合| 精品国产乱码久久久久久久久 | 在线不卡中文字幕播放| 99re在线视频这里只有精品| 国产福利91精品一区| 老司机一区二区| 日韩电影在线免费看| 亚洲妇女屁股眼交7| 亚洲精品乱码久久久久久| 国产精品久久久久婷婷| 久久美女艺术照精彩视频福利播放 | 欧美国产精品一区二区三区| 欧美大片在线观看| 日韩欧美一级二级三级| 欧美一区二区免费观在线| 欧美日韩国产在线观看| 欧美色大人视频| 欧美日韩激情一区二区三区| 欧美日韩在线播放| 欧美日韩视频第一区| 欧美高清激情brazzers| 欧美男生操女生| 日韩一区二区在线免费观看| 日韩小视频在线观看专区| 欧美成人三级在线| 久久嫩草精品久久久久| 欧美经典一区二区| 亚洲天堂免费在线观看视频| 亚洲精品欧美综合四区| 亚洲一区二区三区四区五区黄 | 久久国产剧场电影| 激情欧美日韩一区二区| 国产精品1区2区| a级精品国产片在线观看| 色婷婷av久久久久久久| 在线不卡中文字幕播放| 欧美大片日本大片免费观看| 国产午夜精品一区二区| 亚洲欧洲综合另类在线| 午夜久久久久久久久| 久久国产精品第一页| 春色校园综合激情亚洲| 欧美色综合影院| 精品国精品国产尤物美女| 国产精品午夜在线观看| 亚洲一区二区综合| 极品尤物av久久免费看| 99久久婷婷国产综合精品| 欧美日韩一区二区欧美激情| 精品国产123| 亚洲欧洲精品成人久久奇米网| 亚洲高清不卡在线观看| 狠狠色狠狠色合久久伊人| 99久久99久久综合| 91精品国产日韩91久久久久久| 国产日韩欧美精品综合| 亚洲va天堂va国产va久| 国产馆精品极品| 欧美视频第二页| 国产日韩精品一区二区三区| 亚洲国产毛片aaaaa无费看| 国产在线麻豆精品观看| 欧美亚洲国产bt| 国产精品乱码人人做人人爱 | 91精品国产黑色紧身裤美女| 中文字幕av在线一区二区三区| 婷婷一区二区三区| 国产精品1区二区.| 色猫猫国产区一区二在线视频| 久久99精品久久久久久国产越南| www.欧美亚洲| 精品日韩成人av| 日韩激情一区二区| 成人app网站| 欧美丰满少妇xxxbbb| 久久久久久久国产精品影院| 一区二区三区国产豹纹内裤在线| 国产在线精品一区二区三区不卡| 欧美丝袜丝nylons| 午夜亚洲福利老司机| 国产成人精品免费在线| 91精品国产综合久久久久久漫画| 日韩理论片一区二区| 国产传媒日韩欧美成人| 欧美电影免费观看高清完整版在| 亚洲主播在线播放| 91在线视频观看| 中文字幕一区二区三| 国产精品一色哟哟哟| 日韩精品一区二区在线观看| 亚洲大型综合色站| 欧美亚洲另类激情小说| 中文字幕欧美一区| 成人h动漫精品| 国产日韩av一区二区| 国产91在线看| 久久精品视频网| 国产成人午夜精品5599| xnxx国产精品| 国产精品主播直播| 国产婷婷色一区二区三区四区 | 狠狠久久亚洲欧美| 精品国产乱码久久久久久蜜臀| 日本伊人精品一区二区三区观看方式|