電路原理圖
使用SH69P43 為控制芯片,使用4MHz 晶振作為主振蕩器。
PORTC.3/T0 作為I/O 口通過三極管Q2 來驅(qū)動(dòng)蜂鳴器LS1,而PORTC.2/PWM0 則作為PWM 輸出口通過三極管Q1 來驅(qū)動(dòng)蜂鳴器LS2。另外在PORTA.3 和PORTA.2 分別接了兩個(gè)按鍵,一個(gè)是PWM 按鍵,是用來控制PWM 輸出口驅(qū)動(dòng)蜂鳴器使用的;另一個(gè)是PORT 按鍵,是用來控制I/O 口驅(qū)動(dòng)蜂鳴器使用的。連接按鍵的I/O 口開內(nèi)部上拉電阻。
軟件設(shè)計(jì)方法
先分析一下蜂鳴器。所使用的蜂鳴器的工作頻率是2000Hz,也就是說蜂鳴器的驅(qū)動(dòng)信號(hào)波形周期是500μs,由于是1/2duty 的信號(hào),所以一個(gè)周期內(nèi)的高電平和低電平的時(shí)間寬度都為250μs。軟件設(shè)計(jì)上,我們將根據(jù)兩種驅(qū)動(dòng)方式來進(jìn)行說明。
a) PWM 輸出口直接驅(qū)動(dòng)蜂鳴器方式
由于PWM 只控制固定頻率的蜂鳴器,所以可以在程序的系統(tǒng)初始化時(shí)就對PWM 的輸出波形進(jìn)行設(shè)置。
首先根據(jù)SH69P43 的PWM 輸出的周期寬度是10 位數(shù)據(jù)來選擇PWM 時(shí)鐘。系統(tǒng)使用4MHz 的晶振作為主振蕩器,一個(gè)tosc 的時(shí)間就是0.25μs,若是將PWM 的時(shí)鐘設(shè)置為tosc 的話, 則蜂鳴器要求的波形周期500μs 的計(jì)數(shù)值為500μs/0.25μs=(2000)10=(7D0)16,7D0H 為11 位的數(shù)據(jù),而SH69P43 的PWM
輸出周期寬度只是10 位數(shù)據(jù),所以選擇PWM 的時(shí)鐘為tosc 是不能實(shí)現(xiàn)蜂鳴器所要的驅(qū)動(dòng)波形的。
這里我們將PWM 的時(shí)鐘設(shè)置為4tosc,這樣一個(gè)PWM 的時(shí)鐘周期就是1μs 了,由此可以算出500μs 對應(yīng)的計(jì)數(shù)值為500μs/1μs=(500)10=(1F4)16,即分別在周期寄存器的高2 位、中4 位和低4 位三個(gè)寄存器中填入1、F 和4,就完成了對輸出周期的設(shè)置。再來設(shè)置占空比寄存器,在PWM 輸出中占空比的實(shí)現(xiàn)是
通過設(shè)定一個(gè)周期內(nèi)電平的寬度來實(shí)現(xiàn)的。當(dāng)輸出模式選擇為普通模式時(shí),占空比寄存器是用來設(shè)置高電平的寬度。250μs 的寬度計(jì)數(shù)值為250μs/1μs=(250)10=(0FA)16。只需要在占空比寄存器的高2 位、中4 位和低4 位中分別填入0、F 和A 就可以完成對占空比的設(shè)置了,設(shè)置占空比為1/2duty。
以后只需要打開PWM 輸出,PWM 輸出口自然就能輸出頻率為2000Hz、占空比為1/2duty 的方波。
b) I/O 口定時(shí)翻轉(zhuǎn)電平驅(qū)動(dòng)蜂鳴器方式
使用I/O 口定時(shí)翻轉(zhuǎn)電平驅(qū)動(dòng)蜂鳴器方式的設(shè)置比較簡單,只需要對波形分析一下。由于驅(qū)動(dòng)的信號(hào)剛好為周期500μs,占空比為1/2duty 的方波,只需要每250μs 進(jìn)行一次電平翻轉(zhuǎn),就可以得到驅(qū)動(dòng)蜂鳴器的方波信號(hào)。在程序上,可以使用TIMER0 來定時(shí),將TIMER0 的預(yù)分頻設(shè)置為/1,選擇TIMER0 的始終為系統(tǒng)時(shí)鐘(主振蕩器時(shí)鐘/4),在TIMER0 的載入/計(jì)數(shù)寄存器的高4 位和低4 位分別寫入00H 和06H,就能將TIMER0 的中斷設(shè)置為250μs。當(dāng)需要I/O 口驅(qū)動(dòng)的蜂鳴器鳴叫時(shí),只需要在進(jìn)入TIMER0 中斷的時(shí)候?qū)υ揑/O 口的電平進(jìn)行翻轉(zhuǎn)一次,直到蜂鳴器不需要鳴叫的時(shí)候,將I/O 口的電平設(shè)置為低電平即可。不鳴叫時(shí)將I/O 口的輸出電平設(shè)置為低電平是為了防止漏電。