日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

單片機(jī)頻率計(jì)C程序

作者:佚名    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011/6/6

//---------函數(shù)聲明,變量定義--------------------------
#include <reg51.h>
sbit     GATE=P3^0;             //預(yù)制門限
sbit     CLR =P3^1;             //請(qǐng)零
sbit     RGATE=P3^2;            //實(shí)際門限
sbit     SEL0=P3^4;             //數(shù)據(jù)選擇位0
sbit     SEL1=P3^5;             //數(shù)據(jù)選擇位1
sbit     SEL2=P3^6;             //數(shù)據(jù)選擇位2
#define  data_in  P1
unsigned char Nx[4];         //待測(cè)頻率計(jì)數(shù)值
unsigned char Ns[4];         //標(biāo)準(zhǔn)頻率計(jì)數(shù)值
unsigned char GATE_time=1;   //門限時(shí)間,預(yù)定義為1S
unsigned char time_count;
bit PRE_judge=1;
//-----------------------變量聲明---------------------------------------------------------------------
void system_init(void );      //初始化,設(shè)置定時(shí)器0的工作方式,供主程序調(diào)用
void TIMER0_SCANkey();        //定時(shí)器0中斷處理函數(shù)

//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: system_init()
// 函數(shù)功能: 初始化設(shè)置
//            設(shè)定INT0的工作方式
//--------------------------------------------------------------------------------------------------
void system_init(void )  
             {
              TMOD=0x01; //定時(shí)器0工作在方式1
              ET0=1;     //定時(shí)器0中斷允許
              TH0=-5000/256;  //12M時(shí)鐘時(shí),定時(shí)0.01秒
              TL0=-5000%256;
              TR0=1;     //定時(shí)器0開始計(jì)數(shù)
              EA=1;      //系統(tǒng)中斷允許
              }
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: read_result
// 函數(shù)功能: 將計(jì)數(shù)值讀出到Nx、Ns
//--------------------------------------------------------------------------------------------------
void read_result()
     {
      GATE=0;
      while(RGATE);   //等待實(shí)際門限的結(jié)束
      SEL0=0;
      SEL1=0;
      SEL2=0;
      Nx[0]=data_in;  //SEL=000
      SEL0=1;
      Nx[1]=data_in;  //001
      SEL1=1;
      Nx[3]=data_in;  //011
      SEL0=0;
      Nx[2]=data_in;  //010
      SEL0=0;
      SEL1=0;
      SEL2=1;
      Ns[0]=data_in;  //100
      SEL0=1;
      Ns[1]=data_in;  //101
      SEL1=1;
      Ns[3]=data_in;  //111
      SEL0=0;
      Ns[2]=data_in;  //110
     }
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: judge_Prage
// 函數(shù)功能: 判斷頻率范圍,
//            大于1M      即Nx>0x00 0F 42 40,              GATE=1
//            小于1M大于1k即0x00 00 03 E8<Nx<0x00 0F 42 40,GATE=5
//            小于1k      即 Nx<0x00 00 03 E8,             GATE=10  
//--------------------------------------------------------------------------------------------------
void judge_Prage()
     {
     if((Nx[3]==0)&&(Nx[2]==0))
       if((Nx[1]<3)||((Nx[1]==3)&&(Nx[0]<0xE8)))
              GATE_time=10;
        else GATE_time=5;
     else if((Nx[3]==0)&&(Nx[2]<0x0f))
           GATE_time=5;
     else if((Nx[3]==0)&&(Nx[2]==0x0f))
          if(Nx[1]<0x42)
           GATE_time=5;
          else if((Nx[1]==0x42)&&(Nx[0]<0x40))
           GATE_time=5;
          else
          GATE_time=1;
    else  GATE_time=1;
 }
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: calcu_Fx
// 函數(shù)功能: 計(jì)算頻率,根據(jù)Fx=(Nx/Ns)Fs 計(jì)算結(jié)果
//--------------------------------------------------------------------------------------------------
void calcu_Fx()
{

}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: TIMER0_intrupt
// 函數(shù)功能: 定時(shí)器0中斷處理程序
//--------------------------------------------------------------------------------------------------
void TIMER0_intrupt() interrupt 1 using 1
              {
               EA=0;         //系統(tǒng)中斷禁止
               GATE=1;
               TH0=-5000/256;  //12M時(shí)鐘時(shí),定時(shí)0.01秒
               TL0=-5000%256;
               time_count++;
               if(++time_count==100) GATE_time--;
               while(GATE_time==0)
               {
               GATE=0;
               read_result();
               if(PRE_judge)     //預(yù)測(cè),判斷頻率范圍                 
               {
               judge_Prage();
               PRE_judge=0;
               if(GATE_time)     //如果頻率大于1M,直接計(jì)算,無(wú)須再測(cè)
               calcu_Fx();
               }
               else
               calcu_Fx();         //不是預(yù)測(cè),直接計(jì)算結(jié)果
            }
               EA=1;
        }
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: main
// 函數(shù)功能: 主函數(shù)
//--------------------------------------------------------------------------------------------------
void main()
 {
  CLR=0;
  GATE=1;
  system_init(); 
 }

Tags:頻率計(jì)C程序,單片機(jī)  
責(zé)任編輯:admin
相關(guān)文章列表
基于AT89C52單片機(jī)控制的雙軸太陽(yáng)自動(dòng)跟蹤系統(tǒng)設(shè)計(jì)
ESP32單片機(jī)入門篇
超聲波測(cè)距+溫度+報(bào)警的單片機(jī)代碼_51單片機(jī)超聲波測(cè)距C語(yǔ)言程序
七段數(shù)碼管顯示原理研究_數(shù)碼管顯示0~9對(duì)應(yīng)的段碼
單片機(jī)C語(yǔ)言編程入門教程  流水燈程序示例
基于51單片機(jī)—多功能秒表,多功能計(jì)時(shí)器C語(yǔ)言程序
STC89C52單片機(jī)數(shù)字電流表電壓表源碼與電路圖  51單片機(jī)電流電壓
自學(xué)stm32單片機(jī)四個(gè)步驟,實(shí)用又高效!
先學(xué)51還是先學(xué)STM32?STM32和51單片機(jī)的區(qū)別
單片機(jī)最小系統(tǒng)介紹及電路設(shè)計(jì) STM32單片機(jī)最小系統(tǒng)
什么是PIC單片機(jī)
為什么51單片機(jī)的晶振一般使用11.0592? 51單片機(jī)常用波特率初值表
51單片機(jī)寄存器功能一覽表
單片機(jī)寫延時(shí)程序的幾種方法
自學(xué)單片機(jī)編程之中斷與時(shí)鐘程序
哈佛結(jié)構(gòu)與馮·諾伊曼結(jié)構(gòu)區(qū)別以及X86體系
單片機(jī)萬(wàn)年歷:公歷日期與農(nóng)歷日期的相互轉(zhuǎn)換程序
AVR定時(shí)器1的CTC模式設(shè)置
單片機(jī)超聲波視覺識(shí)別系統(tǒng)的測(cè)量軟件開發(fā),超聲波測(cè)距
LCD1602的單片機(jī)驅(qū)動(dòng)詳解
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
最新推薦
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢