以下介紹幾種在S3F9454/9444下驅(qū)動(dòng)蜂鳴器的編程示例,供參考
A.第一種,普通IO高低電平驅(qū)動(dòng)法 ;運(yùn)行環(huán)境: S3F9454,Fosc= 3.2MHZ無(wú)分頻 ;P2.0為蜂鳴輸出端口 ;本例輸出頻率為4KHZ,即每250US一個(gè)周期,高低電平時(shí)間分別為125US BEEP: LD BTCON,#10100011B ;看門(mén)狗禁用 DI PUSH R5 PUSH R6 ;首先配置P2.0為普通推挽輸出端口 AND P2CONL,#0FEH OR P2CONL,#02H LD R6,#0FAH ;R6設(shè)置輸出方波個(gè)數(shù),本例為250個(gè)(計(jì)時(shí)62.5MS) ONE_BEEP: LD R5,#27H ;R5為頻率發(fā)生計(jì)時(shí)器,本例為近似125US(4KHZ) XOR P2,#01H _LOOP: DEC R5 JR NZ,_LOOP DEC R6 JR NZ,ONE_BEEP LD BTCON,#02H ;恢復(fù)看門(mén)狗運(yùn)行 EI POP R6 POP R5 RET ;----------------------------------------------------------- B.利用P2.0配置為T(mén)0定時(shí)器匹配輸出方式產(chǎn)生 ;注: 該方式可用于帶多位數(shù)碼顯示掃描的軟件中,可有效避免因蜂鳴器 ;輸出而造成的數(shù)碼顯示抖動(dòng)閃爍 ;因定時(shí)器T0被分配作為T(mén)0匹配輸出定時(shí)器,所以本例中利用看門(mén)狗定時(shí)器 ;的實(shí)時(shí)計(jì)時(shí)器BTCNT作為數(shù)碼顯示實(shí)時(shí)掃描計(jì)時(shí)器 ;R0為蜂鳴時(shí)間長(zhǎng)短計(jì)時(shí)器,由主調(diào)用程序進(jìn)行予設(shè)置 ;運(yùn)行環(huán)境: S3F9454,Fosc= 3.2MHZ無(wú)分頻 ;P2.0為蜂鳴輸出端口 ;本例輸出頻率為4KHZ,即每250US一個(gè)周期,高低電平時(shí)間分別為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 ;清看門(mén)狗定時(shí)器 CALL LED_SCAN ;每計(jì)時(shí)2.56MS,則轉(zhuǎn)去實(shí)時(shí)掃描一次數(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 |