|
| 采购元器件好去处--维库电子市场网推荐 |
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
问题已经解决,谢谢高人的指点。 |
| 来源:21ic 作者:91mcu 栏目:单片机 |
| 问题已经解决,谢谢高人的指点。 ;各位大侠请指导一下,这是一个流水灯程序,但没有办法控制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 * - 本贴最后修改时间:2007-1-27 13:25:55 修改者:91mcu |
| 1楼: | >>参与讨论 |
| 作者: jshong 于 2007-1-25 12:59:00 发布:
感觉好像是当P3.7为高电平时发射结导通,并将其钳制在零点几伏。 所以应该在基极加一个电阻。有时是mcu的拉电流比较小而驱动不了,你也可以换个PNP的三极管试一试,毕竟一般的MCU的灌电流的能力比拉电流的能力大多了,具体可参考datasheet. |
|
| 2楼: | >>参与讨论 |
| 作者: 91mcu 于 2007-1-25 13:26:00 发布:
我已经在p3.7口串了4k7的电阻了,应该不会被拉低的, 而且keil c 的p3口监视窗口显示P3.7为0,而P3.6~P3.0显示均为1的。 |
|
| 3楼: | >>参与讨论 |
| 作者: emailli 于 2007-1-25 14:09:00 发布:
调试有方法 先不说你的程序。太多了。 调试的话,要分布排除问题所在。 首先,你不用单片机驱动,直接串一个电阻到基级,然后在该电阻上加5V信号。 如果这样能够让蜂鸣器响,那么表明硬件驱动电路部分没有问题。 如果连这样都不响,恐怕是硬件部分问题了。 硬件问题的话,首先要排除蜂鸣器是否已经坏了。可以用万用表二极管档位先测试看看是否蜂鸣器响? 或者找明是否该蜂鸣器是5V的蜂鸣器。不要拿一个12V的蜂鸣器来玩。玩不转的。 如果蜂鸣器没有问题,那就考虑是否是三极管坏了。更换三极管看看。 直到你的电路通过加载5V到三极管基级能够让蜂鸣器响。然后再用单片机去驱动。 这个时候才是你修改程序的时机。 |
|
| 4楼: | >>参与讨论 |
| 作者: binbinwb 于 2007-1-25 16:44:00 发布:
楼上讲得对 首先要排除硬件问题,然后再去看程序 |
|
| 5楼: | >>参与讨论 |
| 作者: 91mcu 于 2007-1-25 17:00:00 发布:
谢谢各位位的回复,我按照4楼的方法试了, 判断硬件没有问题,但还是不知道怎么弄才好, |
|
| 6楼: | >>参与讨论 |
| 作者: 一级菜鸟 于 2007-1-25 18:55:00 发布:
51的扇出电流很小,改用P管驱动,P口为0时开蜂鸣器 |
|
| 7楼: | >>参与讨论 |
| 作者: conwh 于 2007-1-25 18:59:00 发布:
8个管在一个口上,使用移位要简练的多 |
|
| 8楼: | >>参与讨论 |
| 作者: emailli 于 2007-1-26 10:03:00 发布:
硬件没有问题了! 你程序先不要弄这么复杂。 就来一行简单的代码。 P3.7 = 1 看看是否可以响。 如果你用万用表测量电平是0,建议你还是用示波器看看。 因为你基级直接驱动的话,电平会被三极管拉低到0.7V左右。 如果有0.7V表明你的程序也没有问题。输出高电平成功。 同时你还试试输出P3.7 = 0用示波器看看是否是真正的0V. 如果都对,你的蜂鸣器还是没有响。那么你就要考虑更改三极管了。 此时就可以表明三极管在你使用IO口直接驱动的情况下,由于基级电流太小,而你的三极管放大倍数不够。所以不足以让你的蜂鸣器响! |
|
| 9楼: | >>参与讨论 |
| 作者: 91mcu 于 2007-1-26 12:17:00 发布:
谢谢大家的回复,问题终于解决了,确实如你们所说的, P3口扇出电流小的原因。 我把仿真头从目标板上拔下来,然后跑程序的时候可以看到P3口的监视窗显示P3为0FFH,P3.7为1。 由于硬件电路已定,没有再改三极管,所以在P3.7上接了一只1K的上拉电阻,问题就解决了。 谢谢各位的回复,回头看看,虽然是个简单的问题,但却让我这个新手忙忽了几天,真是映象深刻啊。 * - 本贴最后修改时间:2007-1-26 14:26:52 修改者:91mcu |
|
|
|
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |