日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀] 單位由一個信號源的項(xiàng)目,其中由一個功能,即實(shí)現(xiàn)一個方波信號頻率的測量。實(shí)際情況中,信號的頻率一般在15-25Hz。占空比在10%-90%之間??梢哉f頻率非常低。因?yàn)閱挝皇褂肧

 單位由一個信號源的項(xiàng)目,其中由一個功能,即實(shí)現(xiàn)一個方波信號頻率的測量。實(shí)際情況中,信號的頻率一般在15-25Hz。占空比在10%-90%之間??梢哉f頻率非常低。因?yàn)閱挝皇褂肧TC89C54的時間比較長,所以單位要求使用該單片機(jī)。這個項(xiàng)目非常簡單。因?yàn)闀r間很久了,所以我稍微回憶一下。

    電路圖邏輯上是這樣的:

            

      我將信號經(jīng)過比例縮小跟隨后直接接到INT0管腳。具體想法是這樣的,設(shè)定一個10uM的定時器計時。每兩秒中作為一個測量周期。方波最會有下跳沿的,每一下跳沿作為一個周期的開始。兩秒計時結(jié)束后查看一共采集到K個下跳沿。那么該方波的周期就是T=2/K秒。頻率f=K/2。

   有一個同事提供了頻率測量的思路。在三秒中時間范圍內(nèi)統(tǒng)計INT0下跳沿出現(xiàn)的個數(shù),即可統(tǒng)計出方波脈沖的頻率。因?yàn)橄绿貢|發(fā)外部中斷,所以只需統(tǒng)計程序進(jìn)入中斷程序的次數(shù)。我們來看看代碼實(shí)現(xiàn)的方法。

 /*************************************/

//定時器初始化

//每1毫秒中斷一次

/*************************************/

#define SYS_CLK     12000000L

#define TIME0_LOAD  -(SYS_CLK/12/1000)

 

typedef struct FREQ

{

        unsigned char start;

       unsigned int timer;

       unsigned int int_Count;

       unsigned int  T;

}FREQ;

 

FREQ   freq={0,0};

   

 void Timer0_Init( )

 { 

        TMOD = TMOD | 0x01;

       TH0 = TIME0_LOAD>>8;

       TL0 = TIME0_LOAD&0x00FF;   

       EA =1;

       ET0 =1; 

       TR0 =1;  

 }

 

 /*************************************/

//定時器串口中斷程序

/*************************************/

 void Timer0_isr( ) interrupt 1 

{

   [!--empirenews.page--]

       TH0 = TIME0_LOAD>>8;

       TL0 = TIME0_LOAD & 0x00FF;

 

      if(freq.start)

      {

     freq.timer++;

     }

   else

   {

        freq.timer=0;  

   }

 

}

 

void  exint0_init(  )

{

        IT0 =1;   //下降沿產(chǎn)生中斷

EX0 =1;   //使能外部中斷

EA  =1;   //使能全局中斷

 

 

void  exint0(   ) interrupt 0

 {

 

    if(freq.start)

    {

  freq.int_Count++;     //開始統(tǒng)計下跳沿

}

    else

    {

  freq.int_Count=0;

}

 

 }

 

 void main( )

 {

   Timer0_Init( );

   exint0_init(  ); 

    

   freq.start=1;

 

   while(1)

   {

       if(freq.timer>=3000)

  {

    freq.T=freq.timer/freq.int_Count;

freq.int_Count=0;

freq.timer=0;  

    display_freq(  );                 //顯示周期的值

  }

   

   }        

 

 }

     以上是該項(xiàng)目部分代碼,主要可以看看定時器和外部中斷的使用方法。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉