以下介紹幾種在S3F9454/9444下驅(qū)動蜂鳴器的編程示例,供參考
A.第一種,普通IO高低電平驅(qū)動法 ;運行環(huán)境: S3F9454,Fosc= 3.2MHZ無分頻 ;P2.0為蜂鳴輸出端口 ;本例輸出頻率為4KHZ,即每250US一個周期,高低電平時間分別為125US BEEP: LD BTCON,#10100011B ;看門狗禁用 DI PUSH R5 PUSH R6 ;首先配置P2.0為普通推挽輸出端口 AND P2CONL,#0FEH OR P2CONL,#02H LD R6,#0FAH ;R6設(shè)置輸出方波個數(shù),本例為250個(計時62.5MS) ONE_BEEP: LD R5,#27H ;R5為頻率發(fā)生計時器,本例為近似125US(4KHZ) XOR P2,#01H _LOOP: DEC R5 JR NZ,_LOOP DEC R6 JR NZ,ONE_BEEP LD BTCON,#02H ;恢復(fù)看門狗運行 EI POP R6 POP R5 RET ;----------------------------------------------------------- B.利用P2.0配置為T0定時器匹配輸出方式產(chǎn)生 ;注: 該方式可用于帶多位數(shù)碼顯示掃描的軟件中,可有效避免因蜂鳴器 ;輸出而造成的數(shù)碼顯示抖動閃爍 ;因定時器T0被分配作為T0匹配輸出定時器,所以本例中利用看門狗定時器 ;的實時計時器BTCNT作為數(shù)碼顯示實時掃描計時器 ;R0為蜂鳴時間長短計時器,由主調(diào)用程序進(jìn)行予設(shè)置 ;運行環(huán)境: S3F9454,Fosc= 3.2MHZ無分頻 ;P2.0為蜂鳴輸出端口 ;本例輸出頻率為4KHZ,即每250US一個周期,高低電平時間分別為125US ;----------------------- BEEP: DI PUSH R1 PUSH T0CON PUSH T0DATA ;在蜂鳴輸出前首先掃描一次數(shù)碼顯示 CALL LED_SCAN OR P2CONL,#03H ;set P2.0 as T0 match output/every 125us LD T0CON,#10001000B ;set T0 input clock=Fosc/8 LD T0DATA,#32H LD BTCON,#10100011B ;Disable Watch-dog run, ;but btcnt clk input fxx/4096=1.280ms NEXT_BEEP: LD R1,#0AH WAIT_CNT: OR BTCON,#02H _WAIT_CNT: CP BTCNT,#02H JR ULT,_WAIT_CNT OR BTCON,#02H ;清看門狗定時器 CALL LED_SCAN ;每計時2.56MS,則轉(zhuǎn)去實時掃描一次數(shù)碼顯示 DEC R1 JR NZ,WAIT_CNT DEC R0 JR NZ,NEXT_BEEP LD BTCON,#02H AND P2CONL,#0FEH ;set T0 as push-pull output AND P2,#0FEH POP T0DATA POP T0CON POP R1 EI RET |