找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

蜂鳴器的程序看得不是很懂,麻煩大家說一下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在論壇的教學(xué)那里學(xué)習(xí)到了蜂鳴器那里,程序有點(diǎn)不太理解。第一個(gè)就是主函數(shù)里的for循環(huán)那里, while (1)
    {
        OpenBuzz(4000); //4KHz的頻率啟動(dòng)蜂鳴器
        for (i=0; i<40000; i++);
        StopBuzz();
        for (i=0; i<40000; i++);
        OpenBuzz(1000); //1KHz的頻率啟動(dòng)蜂鳴器
        for (i=0; i<40000; i++);
        StopBuzz();
        for (i=0; i<40000; i++);
    }i為啥小于40000,還有他這么寫,最后一個(gè)for循環(huán)的執(zhí)行語句是哪一個(gè)?還有就是OpenBuzz函數(shù)中
void OpenBuzz(unsigned int frequ)
{
    unsigned int reload;
   
    reload = 65536 - (11059200/12) / (frequ*2);  //由給定頻率值計(jì)算定時(shí)器重載值
    T0LoadH = reload >> 8;  //16位重載值分解為高低兩個(gè)字節(jié)
    T0LoadL = reload;
    TH0 = 0xFF;   //設(shè)定一個(gè)接近溢出的初值,以使定時(shí)器馬上投入工作
    TL0 = 0xFE;
    ET0 = 1;   //使能T0中斷
    TR0 = 1;   //啟動(dòng)T0
}算reload為什么是(11059200/12)/(frequ*2)主要是這個(gè)除(frequ*2)這個(gè)怎么來的?完整的程序圖片上也有。


beep.png (42.87 KB, 下載次數(shù): 109)

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

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2017-7-26 07:51 | 只看該作者
1、“i為啥小于40000”?
如果你愿意的話可以改成其它數(shù)字,它只是消耗CPU的時(shí)間,讓CPU在此循環(huán)40000次,造成一個(gè)延時(shí)。
2、“最后一個(gè)for循環(huán)的執(zhí)行語句是哪一個(gè)啊?”
當(dāng)然是在:最后一個(gè)FOR開始的地方了。
你以為FOR下面一定要寫點(diǎn)什么嗎?它就是不寫!為什么呢?因?yàn)樗褪窍胂腃PU的時(shí)間,而不想做任何別的事。
3、"除(frequ*2)這個(gè)怎么來的?"
frequ是頻率,你想不除以它,除以什么呢?至于“2”:一個(gè)周期分正負(fù)兩個(gè)部分,在T0中斷后,你只做了一次反轉(zhuǎn),即做正(或負(fù)),下次再做負(fù)(或正),才能完成一個(gè)完整的周期。即T0中斷兩次,才能合成一個(gè)完整的“frequ”的周期。
回復(fù)

使用道具 舉報(bào)

板凳
ID:214997 發(fā)表于 2017-7-26 13:38 | 只看該作者
yzwzfyz 發(fā)表于 2017-7-26 07:51
1、“i為啥小于40000”?
如果你愿意的話可以改成其它數(shù)字,它只是消耗CPU的時(shí)間,讓CPU在此循環(huán)40000次, ...

好的,,謝謝了。。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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