打印

小弟紧急求教!关于蜂鸣器报警发声问题!

[复制链接]
4205|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangzk|  楼主 | 2010-4-27 08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wangzk 于 2010-4-27 08:38 编辑

把下面的程序下载到板子上后其他一切正常,只是60s倒计时至00时蜂鸣器报警声音有杂音,好像在“发抖”,不是很明显,但人耳能听的出来。排除了,硬件上焊接的问题,只能是软件的问题。哪位大侠帮忙看下啊,谢谢啦!

说明:蜂鸣器是间断报警,周期是2s。




;/////////////////////////////////////
;/////////////////////////////////////
;管脚控制说明:P1口输出段码,P3输出位码,P3.0,P3.1控制个,十位显示,低电平
;有效,控制芯片采用AT89S2051单片机,P3.4外接按键,P3.7驱动蜂鸣器,低电平有效
;/////////////////////////////////////
;/////////////////////////////////////
  ;/////////////////////////////////////
  ;/////////////////////////////////////
  ;系统功能说明:开机接通电源,两位数码管显示60,按键按下且未松开则开始倒计时
  ;至00。显示00时,若按键仍不松开,蜂鸣器开始间断报警,显示00时,若按键松开,  ;蜂鸣器不报警,数码管恢复显示60.若倒计时过程中松开按键,两位数码管恢复60显示
  ;/////////////////////////////////////
  ;/////////////////////////////////////
           LJMP  MAIN
           ORG  000BH
           LJMP  T0S
           ORG  001BH
           LJMP  T1S

;///////////////主程序////////////////
      MAIN:MOV    SP,#60H   ;设堆栈指针
           MOV    TMOD,#11H
           MOV    TH0,#3CH
           MOV    TL0,0B0H ;定时50ms,赋初值
           MOV    TH1,#0F0H
           MOV    TL1,#60H ;定时2.5ms
           SETB   EA       ;开总中断允许
           SETB   ET0      ;开T0中断允许
           SETB   ET1      ;开T1中断允许
           MOV    R4,#20
           MOV    45H,#250
           MOV    30H,#60H
           MOV    R2,#11111110B  ;个位位码
           MOV    R3,#11111101B  ;十位位码
           CLR    40.0H     ;清个十位标志位
           CLR    42.0H     ;00计时到标志位
           CLR    46H
           SETB   TR1       ;开T0
       LL1:JB     P3.4,LL0
           JB     P3.4,LL0
           SETB   TR0
           LJMP   LL1
       LL0:
           MOV    30H,#60H
           MOV    R4,#20
           CLR    TR0
           CLR    42.0H
           LJMP   LL1
;//////T0中断服务程序///////////////////
       T0S:PUSH    PSW
           PUSH    ACC
           MOV     A,30H
           CJNE    A,#00H,NN0
           LJMP    NN2
      NN0: DJNZ    R4,HERE
           MOV     R4,#20
           MOV     A,30H
           ADD     A,#99H
           DA      A     ;30H减一
           MOV     30H,A
      HERE:MOV     TH0,#3CH
           MOV     TL0,0B0H
           LJMP    NN1
       NN2:CLR     TR0
           SETB    42.0H ;倒计时至00置标志位
       NN1:POP     ACC
           POP     PSW
           RETI
;//////T1中断服务程序//////////////////
    T1S:   PUSH    PSW
           PUSH    ACC
           JNB     40.0H,MM0 ;40.0H为0显示个位
           MOV     A,30H
           ANL     A,#0F0H ;低四位清零,高四位保留
           SWAP    A   ;高,低四位互换
           MOV     DPTR,#TAB
           MOVC    A,@A+DPTR
           MOV     P1,A     ;十位显示
           MOV     P3,R3
           LJMP    MM1
      MM0: MOV     A,30H
           ANL     A,#0FH ;高四位清零,低四位保留
           MOV     DPTR,#TAB
           MOVC    A,@A+DPTR
           MOV     P1,A     ;个位显示
           MOV     P3,R2
      MM1: CPL     40.0H   ;显示标志位取反
           DJNZ    45H,MM2
           MOV     45H,#250
           INC     46H
       MM2:JNB     42.0H,MM4
           MOV     A,46H
           JNB     ACC.0,MM4
           CLR     P3.7
           LJMP    MM3
       MM4:SETB    P3.7
       MM3:MOV     TH1,#0F0H
           MOV     TL1,#60H
           POP     ACC
           POP     PSW
           RETI
     DELAY:MOV     R6,#10     ;延时子程序
       DL2:MOV     R7,#100
       DL1:DJNZ    R7,DL1
    DJNZ    R6,DL2
           RET
      TAB: DB      0C0H,0F9H,0A4H,0B0H,99H,92H ; 共阳极数码管0~9七位段码
    DB      82H,0F8H,80H,90H

相关帖子

沙发
wangzk|  楼主 | 2010-4-27 09:11 | 只看该作者
???静待高手解答!!!

使用特权

评论回复
板凳
ayb_ice| | 2010-4-27 09:32 | 只看该作者
蜂鸣器也有很多种类啊,驱动方法也有很多种
提问还要先把相关情况说清楚,方便分析解决问题

使用特权

评论回复
地板
sharpxcb| | 2010-4-27 09:39 | 只看该作者
有可能是在做蜂鸣器程序时,有其他时序中断,造成部分驱动蜂鸣器的频率波宽发生了改变,影响到一些音色!

使用特权

评论回复
5
dulianling| | 2010-4-28 12:43 | 只看该作者
有可能是在做蜂鸣器程序时,有其他时序中断,造成部分驱动蜂鸣器的频率波宽发生了改变,影响到一些音色!
sharpxcb 发表于 2010-4-27 09:39

正解

使用特权

评论回复
6
wangzk|  楼主 | 2010-4-29 08:20 | 只看该作者
有点头绪了

使用特权

评论回复
7
wangzk|  楼主 | 2010-4-29 08:24 | 只看该作者
楼上的在写小说吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

91

主题

680

帖子

0

粉丝