几种驱动蜂鸣器的编程示例

描述

以下介绍几种在S3F9454/9444下驱动蜂鸣器的编程示例,供参考 

            A.第一种,普通IO高低电平驱动法 
            ;运行环境: 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设置输出方波个数,本例为250个(计时62.5MS) 
            ONE_BEEP:  
            LD R5,#27H ;R5为频率发生计时器,本例为近似125US(4KHZ) 
            XOR P2,#01H 
            _LOOP:  
            DEC R5 
            JR NZ,_LOOP 

            DEC R6 
            JR NZ,ONE_BEEP 

            LD BTCON,#02H ;恢复看门狗运行 
            EI 
            POP R6 
            POP R5 
            RET 
            ;----------------------------------------------------------- 
            B.利用P2.0配置为T0定时器匹配输出方式产生 
            ;注: 该方式可用于带多位数码显示扫描的软件中,可有效避免因蜂鸣器 
            ;输出而造成的数码显示抖动闪烁 
            ;因定时器T0被分配作为T0匹配输出定时器,所以本例中利用看门狗定时器 
            ;的实时计时器BTCNT作为数码显示实时扫描计时器 
            ;R0为蜂鸣时间长短计时器,由主调用程序进行予设置 
            ;运行环境: S3F9454,Fosc= 3.2MHZ无分频 
            ;P2.0为蜂鸣输出端口 
            ;本例输出频率为4KHZ,即每250US一个周期,高低电平时间分别为125US 
            ;----------------------- 
            BEEP:  
            DI 
            PUSH R1 
            PUSH T0CON 
            PUSH T0DATA 
            ;在蜂鸣输出前首先扫描一次数码显示 
            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,则转去实时扫描一次数码显示 
            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 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分