專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

AD采樣程序的設(shè)計

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2010年10月30日   【字體:
    通過采樣某點的電壓值,與預(yù)設(shè)定值作比較,得出下一步MCU該如何工作。

例如:當(dāng)檢測到某點的電壓,大于預(yù)設(shè)定值,則產(chǎn)生過壓保護,通過單片機控制減小輸入的電壓值、斷電、鳴叫,等一系列保護電路措施...

1.主函數(shù):

void main(void)
{
    // USER CODE BEGIN (MAIN_Main,2)
       uword temp1=0,temp2=0,temp3=0,temp4=0;

       // USER CODE END

       MAIN_vInit();

      // USER CODE BEGIN (MAIN_Main,3)

      // USER CODE END

      while(1)
     {

            // USER CODE BEGIN (MAIN_Main,4)
           ADC_vStartSeqReqChNum(0,0,0,3);
           temp1=ADC_uwGetResultData0();
           temp1=temp1*10+24;
           temp1=temp1/48;
           temp2=temp1/10;
           temp3=temp1%10;
           temp4=temp2<<4|temp3;
           P3_DATA=temp4;
           // USER CODE END

     }

} //  End of function main

2.ADC函數(shù):

在檢測到某點電壓大于或小于與設(shè)定值,單片機產(chǎn)生中斷,產(chǎn)生相應(yīng)措施。

void ADC_vIsr(void) interrupt ADCINT
{

       // USER CODE BEGIN (ADC_Isr,2)
       uword i=0,j=0;
       // USER CODE END

       SFR_PAGE(_su0, SST0);          // switch to page 0

       //   Check Interrupt Request 0 Flag
       if (((IRCON1 & 0x08) != 0)) //判斷中斷0標(biāo)志位是否置位
       {
                 IRCON1 &= ~(ubyte)0x08; // 置位了,清除該標(biāo)志位,  為下次做準(zhǔn)備


                 // USER CODE BEGIN (ADC_Isr,3)
                for(i=0;i<1000;i++)   //八個發(fā)光二極管間隔亮,延時時間約0.45s
                      for(j=0;j<500;j++)
                              P3_DATA=0xaa;
                for(i=0;i<1000;i++)
                      for(j=0;j<500;j++)
                               P3_DATA=0x55;
               // USER CODE END
       }


      //   Check Interrupt Request 1 Flag
      if (((IRCON1 & 0x10) != 0)) //判斷中斷1標(biāo)志位是否置位
      {
                IRCON1 &= ~(ubyte)0x10;  //置位了,清除該標(biāo)志位,為下次做準(zhǔn)備


                // USER CODE BEGIN (ADC_Isr,4)
 
                for(i=0;i<1000;i++)  //八個發(fā)光二極管高低半間隔亮,
                       for(j=0;j<500;j++)
                              P3_DATA=0xf0;
                for(i=0;i<1000;i++)
                       for(j=0;j<500;j++)
                              P3_DATA=0x0f;
               // USER CODE END
     }


     // USER CODE BEGIN (ADC_Isr,5)

     // USER CODE END

    SFR_PAGE(_su0, RST0);        // restore the old SCU page
} //  End of function ADC_vIsr


 
關(guān)閉窗口

相關(guān)文章