找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12C5A60S2 定時器可調(diào)頻率

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51533 發(fā)表于 2017-2-8 13:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void timer0_int()interrupt 1 using 0
{
TH0 = (65536-1000)/256;//1ms產(chǎn)生一次中斷
TL0 = (65536-1000)%256;
counter++;
if(tm==counter)
{
  P1=0xff;
  for(p=0;p<150;p++);
  TF0=0;
  P1=0x00;  
  counter=0;
            }

這個是定時器0的中斷程序!現(xiàn)在要求頻率可調(diào)變化為1.00HZ到100.00HZ

現(xiàn)在初始值為1MS產(chǎn)生一次中斷!

如果:TM等于1對應(yīng)頻率為1000,
         TM等于1000對應(yīng)頻率等于1
如何將tm變量經(jīng)過換算成頻率?
求換算公式! 這個是51單片機!

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

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:153041 發(fā)表于 2017-2-8 16:29 | 只看該作者
計數(shù)器工作在16位計數(shù)模式,計數(shù)初始值=65535-Fx/(f*2)。 Fx為計時器頻率(51是晶振頻率除以12),f是你要的頻率范圍(1-100),f頻率越高精度越低,非線性的。每次進(jìn)中斷,只要把IO口反置一下即可在這個IO口上得到f頻率的方波。
回復(fù)

使用道具 舉報

板凳
ID:153041 發(fā)表于 2017-2-8 16:46 | 只看該作者
你這個1ms的刻度太粗了,在單片機上不能這樣做,舉一個最簡單的例子:如果想要是100Hz,那么TM=1000/100=10;這個沒問題;如果頻率是99hz呢?TM=1000/99=10.1  這個10.1次在單片機里是很難算出來的,最后約等于10,輸出還是100Hz,99是出不來的。。     反過來算,TM=10時輸出100Hz,當(dāng)TM=11時(最小刻度),輸出頻率是1000/11=90.9Hz。也就是說100Hz的下一個跨度是90.9Hz,90.9到100之間的頻率是調(diào)不出來的。   歸根到底,就是精度不夠。
回復(fù)

使用道具 舉報

地板
ID:51533 發(fā)表于 2017-2-8 18:07 | 只看該作者
能說一說具體的公式嗎?

感謝上面的回復(fù)!具體怎么搞?
回復(fù)

使用道具 舉報

5#
ID:51533 發(fā)表于 2017-2-9 15:07 | 只看該作者
求助!那個大俠給個方法???
回復(fù)

使用道具 舉報

6#
ID:153041 發(fā)表于 2017-2-10 08:24 | 只看該作者
建議直接計數(shù)器計時輸出方波: 就是在定時器中斷里面,計數(shù)值=65535-Fx/(f*2), IO口輸出非一下(反一下)。在主程序里面設(shè)置你的f就可以啦。不需要很復(fù)雜的,幾行代碼就夠了。
 
計數(shù)器工作在16位計數(shù)模式,計數(shù)初始值=65535-Fx/(f*2)。 Fx為計時器頻率(51是晶振頻率除以12),f是你要的頻率范圍(1-100),f頻率越高精度越低,非線性的。每次進(jìn)中斷,只要把IO口反置一下即可在這個IO口上得到f頻率的方波。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表