打印

问题已经解决,谢谢高人的指点。

[复制链接]
1851|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
91mcu|  楼主 | 2007-1-25 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LED, se, BLE, ov, vr
;各位大侠请指导一下,这是一个流水灯程序,但没有办法控制P3.7不知道是什么原因?
;我用的是恒坚电器的一款开发板原理图,自己搭建的一个目标板,源程序则是恒坚提供的。
;软件是Keil  uVision 3 Demo, 仿真头是用SST的芯片做的。
;灯是接的P1口,当P1口为低电平时灯点亮,
;蜂鸣器是P3.7控制的,P3.7为高电平时控制一个三极管的基极,该三极管发射极接地,集电极接蜂鸣器的“—”,蜂鸣器的“+”接+5V。
;现在的问题是怎么弄蜂鸣器都不响,P3.7总是为0。




beep    bit p3.7; 

led1     bit    p1.0;    
led2    bit    p1.1;
led3    bit    p1.2;
led4    bit    p1.3;
led5    bit    p1.4;
led6    bit    p1.5;
led7    bit    p1.6;    
led8    bit    p1.7;


org  00h;

jmp    main;
org    30h;

main:    
    
    mov sp,  #30h;
    
    lcall    reset;
    lcall    pro_led;
    jmp      main;

reset:     mov    a,#00h;
    mov    b,#00h;
    mov    p0,#0;
    mov    p1,#255;
    mov    p2,#255;
    clr beep; 就算这里改成setb beep    ,p3.7依然是0。
    
    ret;

pro_led:
       
       setb  led1;
       clr   led8;
       setb  beep;    在keil里面单步运行这项后,p3.7还是低电平,在P3口的监视窗口中这一位也是显示为0,而P3.6~P3.0为1。
       lcall  delay;
       
       clr   beep;
       setb   led2;
       clr    led1;
       lcall  delay;
    
       setb   led3;
       clr    led2;
       lcall  delay;    


       setb   led4;
       clr    led3;
       lcall  delay;

           setb   led5;
       clr    led4;
       lcall  delay;
    
       setb   led6;
       clr    led5;
       lcall  delay;    


       setb   led7;
       clr    led6;
       lcall  delay;
  
           setb   led8;
       clr    led7;
       lcall  delay;

again:
       setb   led7;
       clr    led8;
       lcall  delay;
      
       setb   led6;
       clr    led7;
       lcall  delay;
    
       setb   led5;
       clr    led6;
       lcall  delay;    


       setb   led4;
       clr    led5;
       lcall  delay;

       setb   led3;
       clr    led4;
       lcall  delay;
    
       setb   led2;
       clr    led3;
       lcall  delay;    


       setb   led1;
       clr    led2;
       lcall  delay;
  
            ret;




delay:    
    
           push  psw
        clr   psw.3
        setb  psw.4

        mov   r0,#2
        mov   r1,#250
        mov   r2,#2

dl1:    djnz  r0,dl1
        mov   r0,#250
dl2:    djnz  r1,dl1
        mov   r0,#240
        mov   r1,#248
dl3:    djnz  r2,dl1
        nop
        pop   psw
        
        ret

        end 

相关帖子

沙发
jshong| | 2007-1-25 12:59 | 只看该作者

感觉好像是当P3.7为高电平时发射结导通,并将其钳制在零点

所以应该在基极加一个电阻。有时是mcu的拉电流比较小而驱动不了,你也可以换个PNP的三极管试一试,毕竟一般的MCU的灌电流的能力比拉电流的能力大多了,具体可参考datasheet.

使用特权

评论回复
板凳
91mcu|  楼主 | 2007-1-25 13:26 | 只看该作者

我已经在p3.7口串了4k7的电阻了,应该不会被拉低的,

而且keil c 的p3口监视窗口显示P3.7为0,而P3.6~P3.0显示均为1的。

使用特权

评论回复
地板
emailli| | 2007-1-25 14:09 | 只看该作者

调试有方法

先不说你的程序。太多了。

调试的话,要分布排除问题所在。

首先,你不用单片机驱动,直接串一个电阻到基级,然后在该电阻上加5V信号。

如果这样能够让蜂鸣器响,那么表明硬件驱动电路部分没有问题。

如果连这样都不响,恐怕是硬件部分问题了。

硬件问题的话,首先要排除蜂鸣器是否已经坏了。可以用万用表二极管档位先测试看看是否蜂鸣器响?

或者找明是否该蜂鸣器是5V的蜂鸣器。不要拿一个12V的蜂鸣器来玩。玩不转的。

如果蜂鸣器没有问题,那就考虑是否是三极管坏了。更换三极管看看。

直到你的电路通过加载5V到三极管基级能够让蜂鸣器响。然后再用单片机去驱动。

这个时候才是你修改程序的时机。

使用特权

评论回复
5
binbinwb| | 2007-1-25 16:44 | 只看该作者

楼上讲得对

首先要排除硬件问题,然后再去看程序

使用特权

评论回复
6
91mcu|  楼主 | 2007-1-25 17:00 | 只看该作者

谢谢各位位的回复,我按照4楼的方法试了,

判断硬件没有问题,但还是不知道怎么弄才好,

使用特权

评论回复
7
一级菜鸟| | 2007-1-25 18:55 | 只看该作者

51的扇出电流很小,改用P管驱动,P口为0时开蜂鸣器

使用特权

评论回复
8
conwh| | 2007-1-25 18:59 | 只看该作者

8个管在一个口上,使用移位要简练的多

使用特权

评论回复
9
emailli| | 2007-1-26 10:03 | 只看该作者

硬件没有问题了!

你程序先不要弄这么复杂。

就来一行简单的代码。

P3.7 = 1

看看是否可以响。

如果你用万用表测量电平是0,建议你还是用示波器看看。

因为你基级直接驱动的话,电平会被三极管拉低到0.7V左右。

如果有0.7V表明你的程序也没有问题。输出高电平成功。

同时你还试试输出P3.7 = 0用示波器看看是否是真正的0V.

如果都对,你的蜂鸣器还是没有响。那么你就要考虑更改三极管了。

此时就可以表明三极管在你使用IO口直接驱动的情况下,由于基级电流太小,而你的三极管放大倍数不够。所以不足以让你的蜂鸣器响!

使用特权

评论回复
10
91mcu|  楼主 | 2007-1-26 12:17 | 只看该作者

谢谢大家的回复,问题终于解决了,确实如你们所说的,

P3口扇出电流小的原因。

我把仿真头从目标板上拔下来,然后跑程序的时候可以看到P3口的监视窗显示P3为0FFH,P3.7为1。
由于硬件电路已定,没有再改三极管,所以在P3.7上接了一只1K的上拉电阻,问题就解决了。 
谢谢各位的回复,回头看看,虽然是个简单的问题,但却让我这个新手忙忽了几天,真是映象深刻啊。

使用特权

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

本版积分规则

2

主题

12

帖子

1

粉丝