几种驱动蜂鸣器的编程示例
扫描二维码
随时随地手机看文章
以下介绍几种在S3F9454/9444下驱动蜂鸣器的编程示例,供参考
A.第一种,普通IO高低电平驱动法
;运行环境:S3F9454,Fosc=3.2MHz无分频
;P2.0为蜂鸣输出端口
;本例输出频率为4KHZ,即每250US一个周期,高低电平时间分别为125US
BEEP:
LDBTCON,#10100011B;看门狗禁用
DI
PUSHR5
PUSHR6
;首先配置P2.0为普通推挽输出端口
ANDP2CONL,#0FEH
ORP2CONL,#02H
LDR6,#0FAH;R6设置输出方波个数,本例为250个(计时62.5MS)
ONE_BEEP:
LDR5,#27H;R5为频率发生计时器,本例为近似125US(4KHZ)
XORP2,#01H
_LOOP:
DECR5
JRNZ,_LOOP
DECR6
JRNZ,ONE_BEEP
LDBTCON,#02H;恢复看门狗运行
EI
POPR6
POPR5
RET
;-----------------------------------------------------------
B.利用P2.0配置为T0定时器匹配输出方式产生
;注:该方式可用于带多位数码显示扫描的软件中,可有效避免因蜂鸣器
;输出而造成的数码显示抖动闪烁
;因定时器T0被分配作为T0匹配输出定时器,所以本例中利用看门狗定时器
;的实时计时器BTCNT作为数码显示实时扫描计时器
;R0为蜂鸣时间长短计时器,由主调用程序进行予设置
;运行环境:S3F9454,Fosc=3.2MHZ无分频
;P2.0为蜂鸣输出端口
;本例输出频率为4KHZ,即每250US一个周期,高低电平时间分别为125US
;-----------------------
BEEP:
DI
PUSHR1
PUSHT0CON
PUSHT0DATA
;在蜂鸣输出前首先扫描一次数码显示
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,则转去实时扫描一次数码显示
DECR1
JRNZ,WAIT_CNT
DECR0
JRNZ,NEXT_BEEP
LDBTCON,#02H
ANDP2CONL,#0FEH;setT0aspush-pulloutput
ANDP2,#0FEH
POPT0DATA
POPT0CON
POPR1
EI
RET