以下介紹幾種在S3F9454/9444下驅(qū)動蜂鳴器的編程示例,供參考
A.第一種,普通IO高低電平驅(qū)動法
;運行環(huán)境:S3F9454,Fosc=3.2MHz無分頻
;P2.0為蜂鳴輸出端口
;本例輸出頻率為4KHZ,即每250US一個周期,高低電平時間分別為125US
BEEP:
LDBTCON,#10100011B;看門狗禁用
DI
PUSHR5
PUSHR6
;首先配置P2.0為普通推挽輸出端口
ANDP2CONL,#0FEH
ORP2CONL,#02H
LDR6,#0FAH;R6設(shè)置輸出方波個數(shù),本例為250個(計時62.5MS)
ONE_BEEP:
LDR5,#27H;R5為頻率發(fā)生計時器,本例為近似125US(4KHZ)
XORP2,#01H
_LOOP:
DECR5
JRNZ,_LOOP
DECR6
JRNZ,ONE_BEEP
LDBTCON,#02H;恢復(fù)看門狗運行
EI
POPR6
POPR5
RET
;-----------------------------------------------------------
B.利用P2.0配置為T0定時器匹配輸出方式產(chǎn)生
;注:該方式可用于帶多位數(shù)碼顯示掃描的軟件中,可有效避免因蜂鳴器
;輸出而造成的數(shù)碼顯示抖動閃爍
;因定時器T0被分配作為T0匹配輸出定時器,所以本例中利用看門狗定時器
;的實時計時器BTCNT作為數(shù)碼顯示實時掃描計時器
;R0為蜂鳴時間長短計時器,由主調(diào)用程序進行予設(shè)置
;運行環(huán)境:S3F9454,Fosc=3.2MHZ無分頻
;P2.0為蜂鳴輸出端口
;本例輸出頻率為4KHZ,即每250US一個周期,高低電平時間分別為125US
;-----------------------
BEEP:
DI
PUSHR1
PUSHT0CON
PUSHT0DATA
;在蜂鳴輸出前首先掃描一次數(shù)碼顯示
CALLLED_SCAN
ORP2CONL,#03H;setP2.0asT0matchoutput/every125us
LDT0CON,#10001000B;setT0inputcLOCk=Fosc/8
LDT0DATA,#32H
LDBTCON,#10100011B;DISAbleWatch-dogrun,
;butbtcntclkinputfxx/4096=1.280ms
NEXT_BEEP:
LDR1,#0AH
WAIT_CNT:
ORBTCON,#02H
_WAIT_CNT:
CPBTCNT,#02H
JRULT,_WAIT_CNT
ORBTCON,#02H;清看門狗定時器
CALLLED_SCAN;每計時2.56MS,則轉(zhuǎn)去實時掃描一次數(shù)碼顯示
DECR1
JRNZ,WAIT_CNT
DECR0
JRNZ,NEXT_BEEP
LDBTCON,#02H
ANDP2CONL,#0FEH;setT0aspush-pulloutput
ANDP2,#0FEH
POPT0DATA
POPT0CON
POPR1
EI
RET