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