1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12C5A60S2 定時器可調頻率

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

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

現在初始值為1MS產生一次中斷!

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

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:153041 發表于 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,當TM=11時(最小刻度),輸出頻率是1000/11=90.9Hz。也就是說100Hz的下一個跨度是90.9Hz,90.9到100之間的頻率是調不出來的。   歸根到底,就是精度不夠。
回復

使用道具 舉報

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

感謝上面的回復!具體怎么搞?
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表