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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smoke detector.c

?? Smoke Detector Code for F2002
?? C
字號:
//******************************************************************************
//  Smoke Detector Code for F2002
//
// THIS PROGRAM IS PROVIDED "AS IS". TI MAKES NO WARRANTIES OR
// REPRESENTATIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
// INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
// COMPLETENESS OF RESPONSES, RESULTS AND LACK OF NEGLIGENCE.
// TI DISCLAIMS ANY WARRANTY OF TITLE, QUIET ENJOYMENT, QUIET
// POSSESSION, AND NON-INFRINGEMENT OF ANY THIRD PARTY
// INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE PROGRAM OR
// YOUR USE OF THE PROGRAM.
//
// IN NO EVENT SHALL TI BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
// CONSEQUENTIAL OR INDIRECT DAMAGES, HOWEVER CAUSED, ON ANY
// THEORY OF LIABILITY AND WHETHER OR NOT TI HAS BEEN ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGES, ARISING IN ANY WAY OUT
// OF THIS AGREEMENT, THE PROGRAM, OR YOUR USE OF THE PROGRAM.
// EXCLUDED DAMAGES INCLUDE, BUT ARE NOT LIMITED TO, COST OF
// REMOVAL OR REINSTALLATION, COMPUTER TIME, LABOR COSTS, LOSS
// OF GOODWILL, LOSS OF PROFITS, LOSS OF SAVINGS, OR LOSS OF
// USE OR INTERRUPTION OF BUSINESS. IN NO EVENT WILL TI'S
// AGGREGATE LIABILITY UNDER THIS AGREEMENT OR ARISING OUT OF
// YOUR USE OF THE PROGRAM EXCEED FIVE HUNDRED DOLLARS
// (U.S.$500).
//
// Unless otherwise stated, the Program written and copyrighted
// by Texas Instruments is distributed as "freeware".  You may,
// only under TI's copyright in the Program, use and modify the
// Program without any charge or restriction.  You may
// distribute to third parties, provided that you transfer a
// copy of this license to the third party and the third party
// agrees to these terms by its first use of the Program. You
// must reproduce the copyright notice and any other legend of
// ownership on each copy or partial copy, of the Program.
//
// You acknowledge and agree that the Program contains
// copyrighted material, trade secrets and other TI proprietary
// information and is protected by copyright laws,
// international copyright treaties, and trade secret laws, as
// well as other intellectual property laws.  To protect TI's
// rights in the Program, you agree not to decompile, reverse
// engineer, disassemble or otherwise translate any object code
// versions of the Program to a human-readable form.  You agree
// that in no event will you alter, remove or destroy any
// copyright notice included in the Program.  TI reserves all
// rights not specifically granted under this license. Except
// as specifically provided herein, nothing in this agreement
// shall be construed as conferring by implication, estoppel,
// or otherwise, upon you, any license or other right under any
// TI patents, copyrights or trade secrets.
//
// You may not use the Program in non-TI devices.
//
//******************************************************************************

#include  <msp430x20x2.h>

#define  LED 0x01
#define  IRLED 0x40
#define  OA_power 0x20

unsigned int dark_buffer[4];            // buffer for 4 ADC samples
unsigned int light_buffer[4];           // buffer for 4 ADC samples
unsigned int dark_average;              // Average 4 samples with no IRLED
unsigned int light_average;             // Average 4 samples with IRLED on
unsigned char smoke_detect_count = 0;   // Counter for smoke detections
unsigned char alarm_flag = 0;           // Alarm status. 1 means smoke

void Setup(void);                       // Function protos
void Sample (void);
void Average (void);
unsigned int Cal_VLO(void);

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  Setup();                              // Call init routine

  for (;;)
  {
    LPM3;
    Sample();
    Average();

    if (light_average > (dark_average + 30))
    {

      if (alarm_flag == 0)
      {
        smoke_detect_count++;         // Increment detection counter
        smoke_detect_count &= 0x03;   // Only count values of up to 3

        if (smoke_detect_count == 1)
          TACTL &= ~ID0;              // Clear ID0 in TACTL.  This sets the
                                      // TA clock divider to /4 instead of /8.
                                      // This cuts the sample period in half to 4s
        else if (smoke_detect_count == 2)
          TACTL &= ~ID_3;             // This sets the TA clock divider to /1
                                      // which makes the sample period 1s
        else if (smoke_detect_count == 3)
        {
          alarm_flag = 1;             // Set alarm flag
          P1OUT |= LED;               // Turn on visible LED

          // Enable TA1 output for .5 second alarm cadence
          P1SEL |= BIT2;              // Enable P1.2 for TA1 output
          TACCTL1 = OUTMOD_3;         // Set/Reset mode for PWM
        }
      }
    }
    else   // light_average not > dark_average+30
    {
      P1OUT &= ~LED;                  // Turn off visible LED, but leave pull-up
      P1SEL &= ~BIT2;                 // Put P1.6 back to I/O function = no buzzer
      alarm_flag = 0;                 // If no smoke present, clear alarm flag
      smoke_detect_count = 0;         // Clear smoke detect counter
      TACCTL1 = 0;                    // Clear output mode of buzzer driver
      TACTL |= ID_3;                  // Back to divide by 8 for TACLK for 8s interrupt
    }
  }
}


void Setup(void)
{
  unsigned int a, counts;
  signed long temp = 8000000;

// Ports
  P1DIR  = 0xed;                        // All P1 but P1.1 and P1.4 as outputs
  P1OUT = BIT1;                         // All P1 outputs low, P1.1 is pulled up
  P1SEL = BIT4;                         // P1.4 as analog, other I/O
  P1IE = BIT1;                          // Enable switch interrupt
  P1IES = BIT1;                         // H to L transition for interrupt
  P1REN = BIT1;                         // Enable internal pull-up
  P1IFG = 0;                            // Clear any pending IFGs
  P2DIR  = 0xff;                        // Output direction, except P2.3
  P2OUT = 0;                            // All P2 low
  ADC10AE = BIT4;                       // Disable A4 CMOS buffer

// Setup DCO and VLO
  BCSCTL1 = CALBC1_1MHZ;                // Use 1Mhz cal data for DCO
  DCOCTL = CALDCO_1MHZ;                 // Use 1Mhz cal data for DCO
  BCSCTL3 = LFXT1S_2;                   // Use VLO for ACLK

  counts = Cal_VLO();                   // counts is # of VLO clocks in 8MHz

// setup TA for 8 second interrupt
  TACTL = TASSEL_1 + ID_3 + TACLR;      // TA = ACLK/8
  TACCTL0 = CCIE;                       // Enable CCR0 interrupt

// Divide 8Mhz by counts to get # of VLO counts in 1 second period
  a = 0;
  do {
    temp -= counts;
    a++;
  } while (temp > 0);

  TACCR0 = a;                           // TACCR0 period for 1 second
  TACCR1 = TACCR0 >> 1;                 // Put half-period into TACCR1 for use
                                        // when alarming.
// Start timer
  TACTL |= MC_1;                        // Up mode

  _EINT();
}

unsigned int Cal_VLO (void)
{
  unsigned int First_Cap, counts;

  BCSCTL1 |= DIVA_3;                    // Divide ACLK by 8
  TACCTL0 = CM_1 + CCIS_1 + CAP;        // Capture on ACLK
  TACTL = TASSEL_2 + MC_2 + TACLR;      // Start TA, MCLK(DCO), Continuous
  while ((TACCTL0 & CCIFG) == 0);       // Wait until capture

  TACCR0 = 0;                           // Ignore first capture
  TACCTL0 &= ~CCIFG;                    // Clear CCIFG

  while ((TACCTL0 & CCIFG) == 0);       // Wait for next capture

  First_Cap = TACCR0;                   // Save first capture
  TACCTL0 &= ~CCIFG;                    // Clear CCIFG

  while ((TACCTL0 & CCIFG) ==0);        // Wait for next capture

  counts = (TACCR0 - First_Cap);        // # of VLO clocks in 8Mhz
  BCSCTL1 &= ~DIVA_3;                   // Clear ACLK/8 settings
  return counts;
}

void Sample (void)
{
  unsigned volatile int i, temp;

  temp = P1OUT;                         // Preserve LED "on" if alarming
  P1OUT |= OA_power + LED;              // Turn on OA. Settling delay is below
  ADC10CTL0 = ADC10ON + REFON + ADC10SHT_1 + MSC + ADC10IE + SREF_1;
                                        // ADC on, ref = 1.5V, sampling = 8 clocks
                                        // NOTE: REF takes 30us to settle, But
                                        // because of other instructs
                                        // no need for additional delay loop
  ADC10CTL1 = INCH_4 + CONSEQ_2;        // Channel A4, repeat single channel mode
  ADC10DTC1 = 4;                        // Do 4 conversions
  ADC10SA = (unsigned int)dark_buffer;  // Start address for DTC

  i = 6;                                // Delay for OA settling
  do i--;
  while (i != 0);

  ADC10CTL0 |= ENC + ADC10SC;           // Enable and start conversions
  LPM3;                                 // Enter LPM3 while 4 conversions made

  ADC10CTL0 &= ~ENC;                    // Clear ENC to stop conversion

  P1OUT |= IRLED;                       // Turn on IRLED
  ADC10SA = (unsigned int)light_buffer; // Start address for DTC

  i = 4;                                // Short delay for settling
  do i--;
  while (i != 0);

  ADC10CTL0 |= ENC + ADC10SC;           // Enable and start conversions
  LPM3;                                 // Enter LPM3 while 4 conversions made

  P1OUT = temp;                         // Restore P1OUT, turns off IRLED and OA
  ADC10CTL0 &= ~ENC;                    // Clear ENC to stop conversions
  ADC10CTL0 = 0;                        // Turn off ADC and reference
}


void Average (void)
{
  unsigned int i;

  dark_average = 0;
  light_average = 0;

  for (i = 0; i < 4; i++)
    {
    dark_average += dark_buffer[i];
    light_average += light_buffer[i];
    }
  dark_average = (dark_average >> 2);
  light_average = (light_average >> 2);
}


// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
  LPM3_EXIT;
}


// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10 (void)
{
    LPM3_EXIT;
}


// P1.0 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR (void)
{
  unsigned volatile int i;
  i = 5000;                             // ~50ms Debounce delay
  do i--;                               //
  while (i != 0);

  P1IFG = 0;                            // Clear IFG
  P1OUT ^= BIT2;                        // Toggle of P1.2 to turn on/off siren
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区在线播放 | 精品中文av资源站在线观看| 色哟哟一区二区三区| 国产精品大尺度| 成人激情视频网站| 亚洲欧美国产高清| 欧美日韩亚洲另类| 日韩 欧美一区二区三区| 日韩欧美国产精品一区| 精品一区二区三区免费播放| 亚洲精品一线二线三线无人区| 紧缚奴在线一区二区三区| 国产午夜精品一区二区三区四区 | 国产经典欧美精品| 国产精品婷婷午夜在线观看| 色婷婷精品久久二区二区蜜臀av| 一区二区三区在线观看动漫| 制服丝袜在线91| 韩国女主播一区| 国产精品美女久久久久久2018| 色成人在线视频| 日韩va亚洲va欧美va久久| 久久久91精品国产一区二区精品| 成人app软件下载大全免费| 一区二区三区日韩欧美| 777xxx欧美| 国产成人在线看| 亚洲一区二区3| 久久久久久久久蜜桃| av色综合久久天堂av综合| 亚洲国产精品麻豆| 久久精品人人做人人爽人人| 99国产精品久| 久久成人免费电影| 一区二区三区四区视频精品免费| 91精品综合久久久久久| 成人av网站免费| 视频一区欧美精品| 亚洲天堂网中文字| 精品欧美乱码久久久久久1区2区| 99免费精品在线观看| 亚洲va韩国va欧美va| 久久久www成人免费无遮挡大片| 在线免费观看视频一区| 国产成人综合网站| 日本成人中文字幕在线视频 | 国产精品久久久久一区| 欧美久久一二区| 国产白丝网站精品污在线入口| 亚洲国产精品一区二区久久| 国产精品嫩草99a| 日韩精品一区二区三区中文精品| 色婷婷亚洲婷婷| 国产精品91一区二区| 美女视频黄免费的久久| 一区二区欧美精品| 中文字幕一区二区视频| 国产婷婷色一区二区三区四区| 欧美男生操女生| 在线观看国产一区二区| 99久久久国产精品免费蜜臀| 国产东北露脸精品视频| 久久国产三级精品| 日韩电影免费一区| 午夜av一区二区三区| 亚洲一区二区三区三| 亚洲乱码中文字幕| 国产精品久久久久一区| 欧美激情在线观看视频免费| 久久久久国产免费免费| 久久伊人蜜桃av一区二区| 欧美一区国产二区| 91超碰这里只有精品国产| 欧美日韩精品福利| 在线播放国产精品二区一二区四区| 一本一道久久a久久精品| www.亚洲精品| 91在线观看污| 972aa.com艺术欧美| 波多野结衣中文字幕一区| 成人理论电影网| 91在线云播放| 色综合天天视频在线观看| 99久久精品久久久久久清纯| 不卡视频免费播放| 91麻豆自制传媒国产之光| 色综合天天性综合| 欧美性大战久久| 欧美一区二区三区在线观看 | 日本精品裸体写真集在线观看| 色偷偷久久人人79超碰人人澡| 91日韩在线专区| 日本韩国一区二区三区视频| 欧洲精品一区二区三区在线观看| 欧美性猛交xxxx乱大交退制版 | 亚洲曰韩产成在线| 五月天久久比比资源色| 奇米一区二区三区| 国产一区二区h| 国产精品白丝av| 91丨九色丨国产丨porny| 欧美网站一区二区| 日韩亚洲欧美一区二区三区| 欧美www视频| 中文子幕无线码一区tr| 亚洲美女偷拍久久| 日韩av网站免费在线| 国产精品性做久久久久久| 91在线视频播放| 欧美日韩在线直播| 精品久久久久99| 亚洲视频在线一区| 天天av天天翘天天综合网 | 韩国v欧美v日本v亚洲v| 成人手机电影网| 欧美日韩精品欧美日韩精品一综合| 日韩女同互慰一区二区| 国产精品久久久久aaaa| 亚洲电影一级片| 国产经典欧美精品| 欧美日韩亚洲国产综合| 国产欧美精品在线观看| 亚洲国产视频a| 国产麻豆精品在线观看| 91官网在线免费观看| 久久先锋影音av| 一区二区三区在线视频免费| 激情综合色播激情啊| 色88888久久久久久影院按摩| 精品国产一区二区精华| 亚洲精品美国一| 国产一区二区在线观看视频| 在线国产亚洲欧美| 欧美激情中文字幕| 日韩av不卡一区二区| 色婷婷久久久亚洲一区二区三区 | 在线观看网站黄不卡| 久久亚洲欧美国产精品乐播| 亚洲第一在线综合网站| av中文一区二区三区| 精品福利视频一区二区三区| 亚洲国产欧美在线人成| 成人18视频在线播放| 精品国产一二三区| 日韩高清欧美激情| 色婷婷av一区二区三区gif| 久久久午夜精品| 奇米影视7777精品一区二区| 在线观看一区不卡| 亚洲欧洲综合另类在线| 成人精品电影在线观看| 欧美成人欧美edvon| 日韩av中文字幕一区二区三区| 色999日韩国产欧美一区二区| 国产欧美一二三区| 韩国成人福利片在线播放| 欧美一级国产精品| 天天亚洲美女在线视频| 在线亚洲免费视频| 国产精品成人网| 成人精品国产福利| 欧美激情一区二区三区在线| 国产乱理伦片在线观看夜一区| 欧美欧美午夜aⅴ在线观看| 亚洲国产精品精华液网站| 在线视频欧美精品| 亚洲第一搞黄网站| 欧美在线观看禁18| 亚洲一线二线三线久久久| 色欧美片视频在线观看| 亚洲美女免费在线| 一本一道久久a久久精品综合蜜臀| 国产精品成人一区二区三区夜夜夜| 福利电影一区二区| 亚洲欧洲日本在线| 99精品视频在线免费观看| 中文字幕一区二区三区精华液 | 色域天天综合网| 亚洲欧美日本韩国| 色婷婷av一区二区| 亚洲h在线观看| 6080日韩午夜伦伦午夜伦| 日本不卡一二三区黄网| 日韩欧美一区二区免费| 国产在线播放一区| 国产精品日韩成人| 91久久人澡人人添人人爽欧美| 亚洲国产精品麻豆| 欧美tickling网站挠脚心| 国产一区二区中文字幕| 国产精品久久久久久一区二区三区| 91在线观看地址| 亚洲五月六月丁香激情| 911精品国产一区二区在线| 激情图片小说一区| 国产精品日韩成人| 欧美日韩一卡二卡| 国产精品中文字幕一区二区三区| 国产精品理伦片| 在线播放欧美女士性生活|