|
1.實驗任務(wù) 用AT89S51單片機(jī)產(chǎn)生“嘀、嘀、…”報警聲從P1.0端口輸出,產(chǎn)生頻率為1KHz,根據(jù)上面圖可知:1KHZ方波從P1.0輸出0.2秒,接著0.2秒從P1.0輸出電平信號,如此循環(huán)下去,就形成我們所需的報警聲了。 2.電路原理圖
 圖4.18.1 3.系統(tǒng)板硬件連線 (1).把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPK IN端口上, (2).在“音頻放大模塊”區(qū)域中的SPK OUT端口上接上一個8歐或者是16歐的喇叭; 4.程序設(shè)計方法 (1).生活中我們常常到各種各樣的報警聲,例如“嘀、嘀、…”就是常見的一種聲音報警聲,但對于這種報警聲,嘀0.2秒鐘,然后斷0.2秒鐘,如此循環(huán)下去,假設(shè)嘀聲的頻率為1KHz,則報警聲時序圖如下圖所示:
 上述波形信號如何用單片機(jī)來產(chǎn)生呢? (2).由于要產(chǎn)生上面的信號,我們把上面的信號分成兩部分,一部分為1KHZ方波,占用時間為0.2秒;另一部分為電平,也是占用0.2秒;因此,我們利用單片機(jī)的定時/計數(shù)器T0作為定時,可以定時0.2秒;同時,也要用單片機(jī)產(chǎn)生1KHZ的方波,對于1KHZ的方波信號周期為1ms,高電平占用0.5ms,低電平占用0.5ms,因此也采用定時器T0來完成0.5ms的定時;最后,可以選定定時/計數(shù)器T0的定時時間為0.5ms,而要定時0.2秒則是0.5ms的400倍,也就是說以0.5ms定時400次就達(dá)到0.2秒的定時時間了。 5.程序框圖 主程序框圖
 中斷服務(wù)程序框圖
 圖4.18.2 6.匯編源程序 T02SA EQU 30H T02SB EQU 31H FLAG BIT 00H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV T02SA,#00H MOV T02SB,#00H CLR FLAG MOV TMOD,#01H MOV TH0,#(65536-500) / 256 MOV TL0,#(65536-500) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT_T0: MOV TH0,#(65536-500) / 256 MOV TL0,#(65536-500) MOD 256 INC T02SA MOV A,T02SA CJNE A,#100,NEXT INC T02SB MOV A,T02SB CJNE A,#04H,NEXT MOV T02SA,#00H MOV T02SB,#00H CPL FLAG NEXT: JB FLAG,DONE CPL P1.0 DONE: RETI END 7.C語言源程序 #include unsigned int t02s; unsigned char t05ms; bit flag; void main(void) { TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%6; TR0=1; ET0=1; EA=1; while(1); } void t0(void) interrupt 1 using 0 { TH0=(65536-500)/256; TL0=(65536-500)%6; t02s++; if(t02s==400) { t02s=0; flag=~flag; } if(flag==0) { P1_0=~P1_0; } } |