仿真.png (5.4 KB, 下載次數: 31)
下載附件
仿真
2022-10-4 20:24 上傳
代碼.png (162.48 KB, 下載次數: 28)
下載附件
代碼
2022-10-4 20:23 上傳
利用T1的中斷控制P1.7引腳輸出頻率為1kHz方波音頻信號,驅動蜂鳴器發聲。系統時鐘為12MHz。方波音頻信號周期1ms,因此T1的定時中斷時間為0.5 ms,進入中斷服務程序后,對P1.7求反。電路見圖7-18。
先計算T1初值,系統時鐘為12MHz,則機器周期為1μs。1kHz音頻信號周期為1ms,要定時計數的脈沖數為a。則T1初值:
TH1=(65 536 −a) /256;
TL1=(65 536 −a) %256
單片機源程序如下:
- #include<reg51.h> //包含頭文件
- sbit sound=P1^7; //將sound位定義為P1.7腳
- #define f1(a) (65536-a)/256 //定義裝入定時器高8位時間常數
- #define f2(a) (65536-a)%256 //定義裝入定時器低8位時間常數
- unsigned int i=500;
- unsigned int j=0;
- void main(void)
- {
- EA=1; //開總中斷.
- ET1=1; //允許定時器T1中斷 .
- TMOD=0x10; //TMOD=0001 000B,使用T1的方式1定時 TH1=f1(i); //給T1高8位賦初值.
- TL1=f2(i); //給T1低8位賦初值.
- TR1=1; //啟動T1
- while(1)
- { //循環等待
- i=460;
- while(j<2000);
- j=0;
- i=360;
- while(j<2000);
- j=0;
- }
- }
- void T1(void) interrupt 3 using 0 //定時器T1中斷函數
- {
- TR1= 0; //關閉T1
- sound=~sound; //P1.7輸出求反
- TH1=f1(i); //T1的高8位重新賦初值.
- TL1=f2(i); //T1的低8位重新賦初值.
- j++;
- TR1=1; //啟動定時器T1
- }
復制代碼
Keil代碼與Proteus8.13仿真下載(注意只能用Proteus8.13打開):
利用T1控制發出1KHz音頻.zip
(54.22 KB, 下載次數: 12)
2022-10-4 20:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|