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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2900|回復: 8
打印 上一主題 下一主題
收起左側

超簡單的高精度頻率測量例程(Proteus仿真80c52單片機)

[復制鏈接]
跳轉到指定樓層
樓主
    打算做個stc32g12k128的頻率相關東西,有朋友建議用proteus仿真一下。結果發現proteus里沒有stc32g,與其相近的只有一個stc15w4k32s4.用了一下,結果無法運行,用盡全身解術也沒玩轉這個芯片(相信proteus8.9上能運行,但我無法成功安裝這個版本。)只好再找相近的芯片,最后用80c52BUS成功調通了頻率測量例程,現在分享給大家。供初學proteus的朋友參考作用。
    80C52是一款過時的芯片,選擇這款芯片主要是因為在能使用的芯片中它的功能最接近stc32g的相應功能,可以實現不使用傳統定時器進行頻率測量。它使用的是T2定時模塊的脈沖捕捉功能,在頻率測量中做到程序簡單而精度高。采用這種方法能極大地節省系統資源,讓單片機做更多的事情。
   本文的意義在于使用51系列芯片在proteus中進行脈沖捕捉仿真。
    仿真電路極簡單,只使用了一個80C52芯片。然后利用了proteus提供的信號源和SPI顯示接口。程序中頻率測量相關程序只是T2中斷服務函數里的內容,其余語句基本都是顯示驅動程序用的。程序中的TL2初值是用來補償中斷函數本身運行所耗費的時間的。
   proteus中仿真單片機有三種模式,一是與kiel聯調,就是在proteus中啟動遠程編譯監視器,然后在kiel里編寫于編譯程序。第二種是直接建立帶固件的仿真工程,這樣可以直接在proteus里編寫和編譯程序,這種模式方便對程序進行修改和調整。第三種是先把例程調試好,再轉化成可執行的hex文件,最后直接把hex文件裝進單片機(在單片機屬性里有相應的選項)。
    本例程的測量模式適合低頻段頻率測量。
下面是程序內容,在附件中提供了源程序下載。
/* Main.c file generated by New Project wizard
*
* Created:   周六 10月 29 2022
* Processor: 80C52
* Compiler:  Keil for 8051
*/

#include <reg52.h>
#include <stdio.h>
sbit sclk=P3^2; //接口定義:lcd_sclk 就是 LCD 的 sclk
sbit sid=P3^1; //接口定義:lcd_sid 就是 LCD 的 sid
//sbit lcd_rs=P3^0; //接口定義:lcd_rs 就是 LCD 的 rs
//sbit lcd_reset=P1^0; //接口定義:lcd_reset 就是 LCD 的 reset
sbit cs1=P1^4; //接口定義:lcd_cs1 就是 LCD 的 cs1
//sbit key=P2^0; //定義一個按鍵

unsigned int cont1=123;
unsigned int cont2=234;
/*寫數據到 LCD 模塊*/
/*延時*/
void delay_us(int i)
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<1;k++);
}

void transfer_data(int data1)
{
char i;
cs1=0;
//rs=1;
for(i=0;i<8;i++)
{
sclk=0;
delay_us(1);
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
delay_us(1);
data1=data1<<=1;
}
cs1=1;
}
/*延時*/
void delay(int i)
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<110;k++);
}



void main(void)
{
TH2=0;
        TL2=0;
        T2CON=0x08;//包含下面四行了,還帶上了中斷標志位清零
        EA=1;
        ET2=1;
        TR2=1;//開始計數//這個是常變項,應該單獨拿出來執行


while(1)
  {
       transfer_data(cont2);

     transfer_data(cont1);
  }
while (1)  ;
}
void t2_service() interrupt 5
{
      ET2=0;
        TR2=0;
        cont2=RCAP2H;
   cont1=RCAP2L;
   cont1=cont1;
        TH2=0;
        TL2=30;
                T2CON=0x0d;//帶上了中斷標志位清零

   ET2=1;        //        TR2=1;//開始計數//這個是常變項,應該單獨拿出來執行

        
}

在提供的例程運行數據中可以看到,信號源脈沖頻率設定為1400HZ,測量時程序輸出的測量數據為02CA。這個數據為計數值,轉換為相應的頻率值為1400HZ。測量精度還是很高的。在其它頻率上也做了測試,效果很理想。再次說明,這個程序適合低頻率信號的測量,需要測量高頻率,或高精度大頻率范圍的測量時,我之前已經分享過相應的例程。請朋友們自行查看。

原理圖截圖.png (24.09 KB, 下載次數: 69)

僅用了一個芯片

僅用了一個芯片

運行截圖.png (381.44 KB, 下載次數: 70)

運行截圖.png

計算截圖.png (445.76 KB, 下載次數: 63)

計算截圖.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:1039438 發表于 2022-10-30 12:59 | 只看該作者
補充:該例程在proteus8.12和8.13版本運行通過,使用的庫函數是8.13版的。
回復

使用道具 舉報

板凳
ID:123289 發表于 2022-11-1 16:34 | 只看該作者
你實際做一下就會發現問題了。
做個電子鐘,看看一個月誤差幾秒,就知道你的方法靈不靈了。(不用時鐘專用芯片)
回復

使用道具 舉報

地板
ID:1039438 發表于 2022-11-1 20:39 | 只看該作者
yzwzfyz 發表于 2022-11-1 16:34
你實際做一下就會發現問題了。
做個電子鐘,看看一個月誤差幾秒,就知道你的方法靈不靈了。(不用時鐘專用 ...

有道理,我是想用這個程序測量脈沖頻率,如果做電子鐘的話要考慮系統時鐘的精度和穩定性了。不是程序問題,當然程序本身也存在計數誤差的限制。
回復

使用道具 舉報

5#
ID:123289 發表于 2022-11-2 10:00 | 只看該作者
理論日差做到1秒內,需要的穩定度是 1S/24H/60M/60S = 1/86400 = 11.57*10^-6。
而隨意一個晶振,其穩定度輕易就優于10^-6。
從這個道理說,使用普通晶振的單片機,做個日差1秒之內的時鐘是應該能夠達成的。
而實際上,由于程序設計不合理,做到這一點還是不易的。
實戰比仿真更能說明問題。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:1049918 發表于 2022-11-2 13:21 | 只看該作者
yzwzfyz 發表于 2022-11-2 10:00
理論日差做到1秒內,需要的穩定度是 1S/24H/60M/60S = 1/86400 = 11.57*10^-6。
而隨意一個晶振,其穩定度 ...

很專業的說明,希望有更多人能看到
回復

使用道具 舉報

7#
ID:1039438 發表于 2022-11-2 18:50 | 只看該作者
yzwzfyz 發表于 2022-11-2 10:00
理論日差做到1秒內,需要的穩定度是 1S/24H/60M/60S = 1/86400 = 11.57*10^-6。
而隨意一個晶振,其穩定度 ...

我認為程序方面現在存在的誤差主要表現在正負一的計數誤差,而解決這個問題并不難,在我發的其它帖子里的程序可以容易的解決,但主要是面向測量頻率的任務,對時鐘的需要還真沒認真研究過。有空時會去分析一下對策。
回復

使用道具 舉報

8#
ID:78901 發表于 2022-11-2 19:58 | 只看該作者
基準頻率一定要穩和準,否則跳動厲害,頻率計對于整數測量是比較容易的,非整數難點比較大,比如31.592Hz
回復

使用道具 舉報

9#
ID:1039438 發表于 2022-11-3 08:56 | 只看該作者
fsj5098 發表于 2022-11-2 19:58
基準頻率一定要穩和準,否則跳動厲害,頻率計對于整數測量是比較容易的,非整數難點比較大,比如31.592Hz

     我對這點也有深刻的教訓,在一個測量中發現測量結果沒有誤差,而從測量機制上,預期該有很大誤差才對,具體實例在我的貼子《基于stc32g12k128單片機和jlx12864的簡易脈沖測量器 附程序》中對11059200HZ的頻率測量有圖片顯示,正是這種沒誤差測量結果使我意識到測量方法的合理性存在問題,并在后面做了提示說明。之后發的幾種有關頻率測量的例程都在從不同的側面去規避這種漏洞的影響。我的觀點是,整數測量的準確性本身體現的是一種測量方法的不合理性。但對非整數的測量,還會受限于單片機數字處理能力。特別是對寬頻率范圍進行測量的程序,小數部分的處理會受字節長度的影響而變得很麻煩。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合伊人 | 国产免费一区二区 | 91视频在线 | 日韩欧美国产一区二区三区 | 91av在线不卡 | 国产精品美女一区二区三区 | 亚洲国产精品久久久久秋霞不卡 | 成人亚洲片| 亚洲欧美综合精品久久成人 | 成人在线一区二区三区 | 亚洲在线 | 欧美日韩a| 国产偷录叫床高潮录音 | 久久夜视频 | 国产一区二区精品在线观看 | av性色| 一级欧美| www.狠狠干 | 午夜精品久久久久久久久久久久久 | 拍真实国产伦偷精品 | 狠狠综合网 | av网站在线播放 | 精品久久久久久亚洲国产800 | 亚州精品天堂中文字幕 | www国产成人| 中文字幕精品一区二区三区精品 | 人干人操| www.成人在线视频 | 免费久久视频 | 国产一区二区三区四区 | 久久久国产一区二区三区四区小说 | 欧美综合一区 | 欧美在线播放一区 | 欧美在线一区二区三区 | 欧美 日韩 亚洲91麻豆精品 | 国产精品性做久久久久久 | 亚洲欧美中文日韩在线v日本 | 中文字幕一区二区三区四区五区 | 91精品国产91久久久久久最新 | 久久国产精品72免费观看 | 亚洲a视频 |