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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3413|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

關(guān)于計(jì)算脈沖頻率的問題(STC8G單片機(jī))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:721008 發(fā)表于 2020-12-18 10:32 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
想利用霍爾傳感器測一個電機(jī)的實(shí)時頻率,超出規(guī)定的18.72Hz,單片機(jī)P5^5口就輸出高電平,低于18.72Hz就輸出低電平,因?yàn)殡姍C(jī)的頻率一直是在變化的,所以直接測霍爾傳感器輸出的一個脈沖的周期,然后用1秒鐘除以這個周期的時間得到頻率,現(xiàn)在單片機(jī)編程內(nèi)容如下,但是發(fā)現(xiàn)電機(jī)頻率無論怎么變化,單片機(jī)的輸出一直是高電平,實(shí)在不知道程序錯在什么地方,還請大神賜教。單片機(jī)頻率為12MHz。
#include "stc8g.h"
#include "COMMON.H"

uint int0_count = 0;
uint th0_tl0=0;
float freq =0;
sbit out=P5^5;

void int0_init()
{
  IT0 = 0;            //為 1 是下降沿; 為 0 是低電平
  EX0 = 0;                //為 1 允許中斷; 為 0 是禁止中斷
}

void t0_init()  //@12MHz
{
    AUXR &= 0x7F;        //定時器時鐘12T模式
        TMOD &= 0xF0;        //設(shè)置定時器模式
        TL0 = 0x00;                //設(shè)置定時初值
        TH0 = 0x00;                //設(shè)置定時初值
        TF0 = 0;                //清除TF0標(biāo)志
        ET0 = 1;                //允許T0中斷
        TR0 = 0;                //定時器0停止計(jì)時
}

void test()
{
switch(int0_count)
{
  case 1:TR0=1;
  case 2:
  case 3:TR0=0;th0_tl0=TH0*256+TL0;freq=1000000/(float)th0_tl0;TL0=0X00;TH0=0X00;
  default:break;
}
if(freq>18.72)
{out=1;}
else
{out=0;}
}

void main()
{
stc_init();
int0_init();
t0_init();
out=0;
EA=1;
while(1)
{
EX0=1;
test();
}
}

void int0() interrupt 0         
{
if(int0_count>=3)
{int0_count = 0;}
int0_count++;        
}

void t0() interrupt 1
{

}


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

使用道具 舉報

沙發(fā)
ID:824490 發(fā)表于 2020-12-18 15:55 | 只看該作者
18.72Hz,這么低的頻率,測其脈沖寬度可能會更準(zhǔn)確點(diǎn)。
回復(fù)

使用道具 舉報

板凳
ID:824490 發(fā)表于 2020-12-18 15:59 | 只看該作者
switch(int0_count)
{
  case 1:
   TR0=1;
   break;
  case 2:
   break;
  case 3:
TR0=0;
th0_tl0=TH0*256+TL0;
freq=1000000/(float)th0_tl0;
TL0=0X00;
TH0=0X00;
break;
  default:break;
}

每一個CASE,都要有一個break,不然的話,程序會從第一個CASE運(yùn)行到最后一個CASE .
回復(fù)

使用道具 舉報

地板
ID:748788 發(fā)表于 2020-12-18 21:17 | 只看該作者
調(diào)試程序的時候應(yīng)該用可調(diào)頻率發(fā)生器代替霍爾傳感器吧
回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2020-12-19 07:39 | 只看該作者
18.72Hz,頻率太低,測脈沖周期更合適,程序也更簡單。
  1. #include <STC8.H>

  2. #define thre 534 //53.4ms(周期=1s/18.72Hz=0.0534188034188034)

  3. sbit out=P5^5;

  4. unsigned int count;        //100微秒中斷計(jì)數(shù)變量
  5. unsigned int time;        //暫存變量

  6. void Timer0Init()                //100微秒@12.000MHz
  7. {
  8.         AUXR |= 0x80;                //定時器時鐘1T模式
  9.         TMOD &= 0xF0;                //設(shè)置16位自動重裝模式
  10.         TL0 = 0x50;                        //設(shè)置定時初值
  11.         TH0 = 0xFB;                        //設(shè)置定時初值
  12.         TF0 = 0;                                //清除TF0標(biāo)志
  13.         TR0 = 1;                                //啟動定時器
  14.         ET0 = 1;          //使能定時器中斷
  15. }

  16. void main()
  17. {
  18.         Timer0Init();                //初始化定時器
  19.         IT0 = 1;          //使能INT0下降沿中斷
  20.         EX0 = 1;          //使能INT0中斷
  21.         EA = 1;                                //開總中斷
  22.        
  23.         while(1)
  24.         {
  25.                 if(time>thre)
  26.                         out=1;
  27.                 else out=0;
  28.         }
  29. }
  30. //定時器0中斷服務(wù)函數(shù)
  31. void TM0_Isr() interrupt 1
  32. {
  33.     count++;
  34. }
  35. //外部中斷0服務(wù)函數(shù)
  36. void INT0_Isr() interrupt 0
  37. {
  38.         time=count;//暫存
  39.         count=0;        //清0
  40. }

復(fù)制代碼

回復(fù)

使用道具 舉報

6#
ID:721008 發(fā)表于 2020-12-21 09:11 | 只看該作者
wulin 發(fā)表于 2020-12-19 07:39
18.72Hz,頻率太低,測脈沖周期更合適,程序也更簡單。

您好,很感謝您給出的建議,一開始我也是把測頻率轉(zhuǎn)換成測周期的思想,因?yàn)槎〞r器工作在12T模式、16位自動重做載的時候最大定時時間也就是65.536ms,我程序的思想是在發(fā)生第一個邊沿中斷的時候啟動定時器定時,在第三個邊沿中斷的時候停止定時器計(jì)時,因此這段時間就是一個脈沖的時間,但是我程序卻實(shí)現(xiàn)不了把THx和TLx轉(zhuǎn)換成時間(ms),因?yàn)槲医?jīng)驗(yàn)少,不確定這樣子做的可行性。另外我也注意到了脈沖周期超出最大定時時間范圍時,當(dāng)前的頻率肯定小于18.72Hz,我就直接可以在定時服務(wù)中斷函數(shù)里讓單片機(jī)輸出低電平了。
回復(fù)

使用道具 舉報

7#
ID:721008 發(fā)表于 2020-12-21 09:12 | 只看該作者

好的,感謝您的建議,我已經(jīng)采取
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩视频 | 二区三区视频 | 成人国产精品免费观看 | 中文字幕一二区 | 91精品国产99久久久久久红楼 | 欧美久久一区 | 成人在线免费视频观看 | 日韩欧美国产精品 | 国产成人网| 亚洲国产成人精品女人久久久 | 三级黄色 | 亚洲精品网站在线观看 | 欧美片网站免费 | 99精品久久 | 涩涩在线 | 香蕉视频久久 | 天天拍天天干 | 中文在线观看视频 | 小sao货撅起屁股扒开c微博 | 九九热视频在线观看 | 日本中文字幕在线播放 | 张津瑜国内精品www在线 | 亚洲一区二区三区四区在线 | 日韩中文av | 日韩精品视频在线免费观看 | 青青在线视频 | 欧美精品亚洲精品 | 新av在线| 欧美日韩在线看 | 国产成人午夜高潮毛片 | 日本一级大毛片a一 | 久草成人 | 人人干人人爽 | 亚洲一区二区久久 | 日本视频免费观看 | 99国产精品99久久久久久 | 国产综合视频 | 国产欧美成人 | 中文字幕网址在线 | 黄色激情视频在线观看 | 男人天堂网av |