|
打算做個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。測量精度還是很高的。在其它頻率上也做了測試,效果很理想。再次說明,這個程序適合低頻率信號的測量,需要測量高頻率,或高精度大頻率范圍的測量時,我之前已經分享過相應的例程。請朋友們自行查看。
|
評分
-
查看全部評分
|