久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機頻率計檢測特定頻率并點亮LED [打印本頁]

作者: bd5fna    時間: 2024-3-19 15:45
標題: 單片機頻率計檢測特定頻率并點亮LED
抄了一個頻率計的單片機代碼,設想檢測到設定的頻率,點亮LED。但現在是頻率計有一定的誤差,比如設定的頻率是188Hz,但檢測到的有可以是187Hz 188Hz或189Hz,正負各差1Hz,無法正常點亮LED。特請教各位大佬指教,如何通過換算,消除這個誤差,正常點亮LED。
******************************************************************************/

void TM1_Isr() interrupt 3

{   

  static unsigned int ms_flag = 0;  //1s計數標志

        if(ms_flag++ == 1000)

        {

                freq = (TH0<<8|TL0);           //獲取當前計數器計數值      
        
                if(freq ==188)                  //檢測到的頻率有可能是187 188也有可能是189

                        {
                                led=0;
                                ms_flag=1000;
                        }
                        
                else
                        {
                                led=1;
                        }
               
                ms_flag = 0;                   //1s計數標志復位

                send_flag = 1;                 //串口發送標志位置位

          TH0 = 0x00;                    //復位計數器

          TL0 = 0x00;                    //復位計數器        

        }

         TF1 = 0;                      //清中斷標志

}

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


作者: Hephaestus    時間: 2024-3-19 17:15
把freq ==188改成freq >=187 && freq <=189不就行了嗎?
作者: bd5fna    時間: 2024-3-19 19:39
Hephaestus 發表于 2024-3-19 17:15
把freq ==188改成freq >=187 && freq

謝謝,我試試。
作者: wulin    時間: 2024-3-19 21:09
用外部中斷取樣計算頻率要好些。
//T0中斷服務函數
void Timer0_Isr() interrupt 1
{
        count++;
}
//INT0中斷服務函數
void INT0_Isr() interrupt 0
{       
        TR0=0;                            //關定時器0
        Cnt_us=(count*65536)+(TH0<<8|TL0);//讀取定時器0中計數值
        TL0 = 0x00;                       //定時器0計數值清0
        TH0 = 0x00;                       //定時器0計數值清0
        TR0=1;                            //開定時器0
        count=0;                          //中斷計數值清0
}
//初始化定時器T0
void Timer0_Init(void)                //@12.000MHz
{
        AUXR &= 0x7F;                     //定時器時鐘12T模式
        TMOD &= 0xF0;                     //設置定時器模式1
        TMOD |= 0x01;                     //設置定時器模式1
        TL0 = 0x00;                       //設置定時初始值
        TH0 = 0x00;                       //設置定時初始值
        TF0 = 0;                          //清除TF0標志
        TR0 = 0;                          //關定時器0
}

作者: bd5fna    時間: 2024-3-19 21:24
wulin 發表于 2024-3-19 21:09
用外部中斷取樣計算頻率要好些。
//T0中斷服務函數
void Timer0_Isr() interrupt 1

感謝大佬,我試試。
作者: TTQ001    時間: 2024-3-20 08:28
設置控件的容差范圍,例如將閾值設置在 185 Hz 和 190 Hz 之間。
作者: bd5fna    時間: 2024-3-27 10:25
我現在的做法是freq >=187 || freq <=189,但檢測速度有點慢,有沒有提高速度的方法,中斷是不是快一點。
作者: bd5fna    時間: 2024-3-27 10:53
TTQ001 發表于 2024-3-20 08:28
設置控件的容差范圍,例如將閾值設置在 185 Hz 和 190 Hz 之間。

要檢測多個頻率,并且頻率間相差太近,實測有重疊的部分。只有提高精度才行。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久av网站 | 岛国av在线免费观看 | 国产成人av网站 | 久视频在线 | 亚洲天堂免费视频 | 精品一区二区三区视频 | 亚洲成人中文字幕 | 日韩在线一区二区三区 | 久久久久人| 欧美一区二区三 | 国产一区在线视频 | 一级黄色片在线观看 | 国产欧美综合一区二区三区 | 欧美成人精品欧美一级私黄 | 国产aaaaaa| 91在线看片 | 丁香花在线观看 | 国产精品毛片一区视频播 | 一区二区国产精品 | 一级做a爰片久久毛片潮喷 视频一二区 | 国产不卡视频 | 黄色一级免费视频 | www.日本黄色 | 蜜桃色一区二区三区 | 精品一区二区三区免费 | 亚洲高清免费 | 亚洲小视频在线观看 | 国产精品福利一区 | 青青草免费在线观看视频 | 亚洲一区二区免费视频 | 免费一级a毛片 | 免费看毛片网站 | 国产福利网站 | 黄色精品网站 | 美女黄色在线观看 | 黄色免费大片 | 激情六月天 | 黄色av一区| 麻豆成人91精品二区三区 | 国产毛片毛片毛片 | 午夜免费福利视频 |