找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2489|回復(fù): 1
收起左側(cè)

利用單片機T1控制發(fā)出1kHz的音頻信號程序

[復(fù)制鏈接]
ID:1044389 發(fā)表于 2022-10-4 20:24 | 顯示全部樓層 |閱讀模式

仿真

仿真

代碼

代碼



利用T1的中斷控制P1.7引腳輸出頻率為1kHz方波音頻信號,驅(qū)動蜂鳴器發(fā)聲。系統(tǒng)時鐘為12MHz。方波音頻信號周期1ms,因此T1的定時中斷時間為0.5 ms,進入中斷服務(wù)程序后,對P1.7求反。電路見圖7-18。
     先計算T1初值,系統(tǒng)時鐘為12MHz,則機器周期為1μs。1kHz音頻信號周期為1ms,要定時計數(shù)的脈沖數(shù)為a。則T1初值:      
          TH1=(65 536 −a) /256;        
          TL1=(65 536 −a) %256

單片機源程序如下:
  1. #include<reg51.h>                          //包含頭文件
  2. sbit sound=P1^7;                          //將sound位定義為P1.7腳
  3. #define f1(a) (65536-a)/256                //定義裝入定時器高8位時間常數(shù)
  4. #define f2(a) (65536-a)%256                    //定義裝入定時器低8位時間常數(shù)
  5. unsigned int i=500;
  6. unsigned int j=0;

  7. void main(void)
  8. {
  9.         EA=1;                                  //開總中斷.
  10.           ET1=1;                                //允許定時器T1中斷         .
  11.            TMOD=0x10;                         //TMOD=0001 000B,使用T1的方式1定時    TH1=f1(i);                      //給T1高8位賦初值.
  12.            TL1=f2(i);                      //給T1低8位賦初值.
  13.            TR1=1;                                 //啟動T1
  14.            while(1)  
  15. {                                              //循環(huán)等待
  16.              i=460;
  17.               while(j<2000);
  18.               j=0;
  19.               i=360;
  20.               while(j<2000);
  21.               j=0;
  22.     }
  23. }

  24. void T1(void) interrupt 3 using 0        //定時器T1中斷函數(shù)
  25. {
  26.             TR1= 0;                         //關(guān)閉T1
  27.            sound=~sound;                         //P1.7輸出求反
  28.             TH1=f1(i);                           //T1的高8位重新賦初值.
  29.             TL1=f2(i);                           //T1的低8位重新賦初值.
  30.         j++;                                
  31.             TR1=1;                         //啟動定時器T1
  32. }
復(fù)制代碼

Keil代碼與Proteus8.13仿真下載(注意只能用Proteus8.13打開):
利用T1控制發(fā)出1KHz音頻.zip (54.22 KB, 下載次數(shù): 12)

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:57657 發(fā)表于 2022-10-4 21:10 | 顯示全部樓層
方式2沒用過嗎? 中斷內(nèi)不需要重新賦初值,這種寫法誤差較大。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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