找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8463|回复: 61
打印 上一主题 下一主题
收起左侧

51单片机不受代码控制,求大神解惑。

  [复制链接]
跳转到指定楼层
#
ID:299857 发表于 2018-3-31 12:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我做了三个类似的板,但都是这样的问题,引脚全是高电平。为什么会这样呢?我一直困惑不解,求解惑。

1.png (46.45 KB, 下载次数: 86)

代码已经设置全为零了。

代码已经设置全为零了。

2.png (53.68 KB, 下载次数: 103)

原理图

原理图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

61#
ID:299857 发表于 2018-4-10 21:45 | 只看该作者
e0631 发表于 2018-4-9 14:22
CPU及其它所有的器件取电都从D1二极管的负极取,要不然有电压差。蜂鸣器加个NPN三极管驱动一下,三极管基极 ...

好好,我试试。
回复

使用道具 举报

60#
ID:304391 发表于 2018-4-9 14:22 | 只看该作者
CPU及其它所有的器件取电都从D1二极管的负极取,要不然有电压差。蜂鸣器加个NPN三极管驱动一下,三极管基极串接一个2.2K电阻到IO口,LED串接的电阻1K-2.2K都行,按键那2个10K的电阻做成上拉10K,按键直接对地即可。
回复

使用道具 举报

59#
ID:299857 发表于 2018-4-8 22:35 | 只看该作者
wjshw 发表于 2018-4-7 23:38
本来是想多打些字,无奈在快速回复时,按错键导致直接发出了!
看了大家的回复,都很认真!
我说下我的观 ...

哈哈,实在不好意思。初学者,抱着一颗试一下行不行的心,所以没有过多在意是否好看。
不过你说了,我才想到蜂鸣器还需要驱动芯片,LED电阻是有点大了,我再改改。
那个EA脚,我已经后台用线连过了。
但代码在开发板上是可以正常运行,就这样的代码加上后面的注释,LED是正常闪烁的。
谢谢您认真的回答。
回复

使用道具 举报

58#
ID:299857 发表于 2018-4-8 22:24 | 只看该作者
QIANLILI 发表于 2018-4-7 22:44
这和双面板没关系的。 还是找找电路图和布线是否有错误的原因吧。你可以用万用板先搭个最精简的 测试下LE ...

哈哈,我前天就是这样试的,得出结论我的最小系统是没有问题的。
剩下的还没找到原因,还在研究。
谢谢你用心答复,我好感动。
回复

使用道具 举报

57#
ID:299857 发表于 2018-4-8 22:20 | 只看该作者
oohoh 发表于 2018-4-3 23:02
我也遇到过类似问题,现象很诡异,P口高电平,在VCC和地之间接led加10K电阻,运行正常。怀疑单片机和开发板 ...

这样吗?我赶紧试试。谢谢
回复

使用道具 举报

56#
ID:105146 发表于 2018-4-7 23:38 | 只看该作者
本来是想多打些字,无奈在快速回复时,按错键导致直接发出了!
看了大家的回复,都很认真!
我说下我的观点:1、图真的很乱:蜂鸣器不能直接接IO口线的;EA应该直接接VCC;两个LED上串的电阻阻值太大了(10K);2、程序如果想截图的一样,则两个LED应该始终是亮的(前提是两个限流电阻在1K以下)———原因是所有的口都是低电平;如果把截图中注释掉的两条语句加上,则两个LED应该始终是灭的————原因是输出低电平的时间太短了,只有几个机器周期,人眼根本分辨不出来;3、如果想实现亮、灭闪烁的效果,应该把P1=0;P2=0;P3=0;P0=0;这几条语句放在循环的外面即可。

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

55#
ID:105146 发表于 2018-4-7 23:25 | 只看该作者
这个图看着真乱!
回复

使用道具 举报

54#
ID:160834 发表于 2018-4-7 22:44 | 只看该作者
单片机我来了 发表于 2018-4-7 20:57
是的,高电平不断。一直都是高电平,从来没有出现出现过低电平。我手上有三个单片机,在开发板上都是正常 ...

这和双面板没关系的。 还是找找电路图和布线是否有错误的原因吧。你可以用万用板先搭个最精简的 测试下LED闪烁。 就能看出问题了。 确保晶振什么的也没问题。 建议还是用目前的STC8系列  性价比更高。
回复

使用道具 举报

53#
ID:299857 发表于 2018-4-7 21:05 | 只看该作者
不败的小强 发表于 2018-4-5 20:23
你的IO口一直都是0还是死循环 怎么控制?

你说的不错。但我试试过用闪烁的,都是没有反应。。。
回复

使用道具 举报

52#
ID:299857 发表于 2018-4-7 20:57 | 只看该作者
QIANLILI 发表于 2018-4-3 22:24
依然高电平不断?楼主指的是单片机上电后一直输出高电平还是有过低电平?  我改的程序是每隔1秒左右高低电 ...

是的,高电平不断。一直都是高电平,从来没有出现出现过低电平。我手上有三个单片机,在开发板上都是正常的。我是用开发板烧录的,然后换到我做的板上。

我知道我的原因了。因为我做的是双面板。我身边有个人告诉我,双面板成功的概率是七分之一。我只是做了三个板。我现在困惑为何双面板成功的概率那么低 ?
回复

使用道具 举报

51#
ID:299857 发表于 2018-4-7 20:43 | 只看该作者
QIANLILI 发表于 2018-4-3 21:30
根据你的程序 稍微修改下  用于测试4组IO口的高低电平切换。 仿真和实物都没问题。 你那个程序也应该没问题 ...

好好,感谢你衷心的回复。
回复

使用道具 举报

50#
ID:300314 发表于 2018-4-5 20:23 | 只看该作者
你的IO口一直都是0还是死循环 怎么控制?
回复

使用道具 举报

49#
ID:160834 发表于 2018-4-4 10:11 | 只看该作者
ycs05201314 发表于 2018-4-4 09:09
P1不是直接=0,应该是0x00

对于赋值0到9都是可以直接这么写的。P1=0; 和  P1=0x00;  效果是一样的。 如果是大于9了  直接写十进制数字和十六进制是不一样的。 也就是P1=9; 和 P1=0x09; 也可以直接写效果是一样的。 但是P1=10; 和 P1=0x10;  就不是一样的效果了。P1=16; 和 P1=0x10;  才是一样的。  这个试一下就能明白的。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

48#
ID:125231 发表于 2018-4-4 09:09 | 只看该作者
P1不是直接=0,应该是0x00
回复

使用道具 举报

47#
ID:237354 发表于 2018-4-3 23:02 | 只看该作者
我也遇到过类似问题,现象很诡异,P口高电平,在VCC和地之间接led加10K电阻,运行正常。怀疑单片机和开发板不匹配

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

46#
ID:160834 发表于 2018-4-3 22:35 | 只看该作者
依然高电平不断? 刚才又看了下你的程序和电路图。 你电路图上的D2和D4  2个LED是正极接电源  负极接单片机IO口  那么当单片机口设置成  P0=0;P1=0;P2=0;P3=0; 时  LED就是亮的状态。  如果你要LED不亮  那么初始设置成P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;  还有要把这几个设置IO代码放在  while(1)上面。 否则一直循环设置。 我估计你所说的一直高电平就是指的这个情况。 因为你把IO置低电平一直放在循环里面。 所以LED就是一直亮的状态。
void main()
{
         P0=0xFF;
         P1=0xFF;
         P2=0xFF;
         P3=0xFF;
  while(1)
{

  }        
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

45#
ID:160834 发表于 2018-4-3 22:24 | 只看该作者
依然高电平不断?楼主指的是单片机上电后一直输出高电平还是有过低电平?  我改的程序是每隔1秒左右高低电平切换。 我试下来都没问题啊。 你手上有几片这样的单片机?确定程序烧录进去了吗?  还是STC的单片机是用串口烧录的,你那个单片机是怎么烧录的?是用烧录器吗? 程序肯定没问题。 难道你那片单片机坏了?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

44#
ID:301740 发表于 2018-4-3 22:12 | 只看该作者
主函数中的while对io口赋值没有意义,可以放到循环的外边,然后写while(1);
就可以了
回复

使用道具 举报

43#
ID:289365 发表于 2018-4-3 22:12 | 只看该作者
延时定太大了吧
回复

使用道具 举报

42#
ID:299857 发表于 2018-4-3 21:51 | 只看该作者
perfect2 发表于 2018-4-3 14:15
P1,P2,P3,P0,没有定义 无法直接使用    前面定义了 sbit D1=P1^0;  sbit led=P2^0    要控制 P1.0    P2.0 ...

哎...不是不行,而是你没有用过。P1,P2,P3,P0在头文件里已经定义的了。你可以百科一下...
回复

使用道具 举报

41#
ID:299857 发表于 2018-4-3 21:49 | 只看该作者
dalaoshi 发表于 2018-4-3 03:08
哈,我是看不懂C语言的,也没有用过89C52, 可是看那个EA接脚就觉得奇怪,为何是接在LED与电阻之间呢,照看 ...

那个EA脚有楼提醒过我,我改过了,试过接电源也试过接地了。结果就是不行,依然高电平不断。
回复

使用道具 举报

40#
ID:160834 发表于 2018-4-3 21:38 | 只看该作者
单片机我来了 发表于 2018-4-1 21:42
我实际的板并没有使用P0,P3,写这个代码只是想用P1^0和P2^0检验板是否正常。因为我之前做个两个板都是这 ...

STC89C52  P0口不需要加上拉。ATMEL公司的 AT89C52需要加上拉。
回复

使用道具 举报

39#
ID:160834 发表于 2018-4-3 21:30 | 只看该作者
根据你的程序 稍微修改下  用于测试4组IO口的高低电平切换。 仿真和实物都没问题。 你那个程序也应该没问题。问题应该是你接了那个EA脚。 那个不需要用的啊。 STC89S52 最小系统  只需要晶振和2个22PF的电容就可。自动复位电路也不需要。 我一般都是接个开关一头接电源正极一头接复位脚。另外 STC89s52的电压需要4.5伏到5伏。4伏以下就不能正常运行。 而AT89S52倒是可以在3.6伏左右运行。虽然手册上要求4伏到5伏电压。楼主把EA脚和其它电路断开再测试下。应该就是这个问题。
#include<reg52.h>

void delay(unsigned int z)
{
    while(z--);
}

void main()
{
  while(1)
{
         P0=0;
         P1=0;
   P2=0;
         P3=0;
         delay(50000);
         P0=0xFF;
         P1=0xFF;
         P2=0xFF;
         P3=0xFF;
         delay(50000);
  }        
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

38#
ID:301412 发表于 2018-4-3 14:15 | 只看该作者
P1,P2,P3,P0,没有定义 无法直接使用    前面定义了 sbit D1=P1^0;  sbit led=P2^0    要控制 P1.0    P2.0口就要操作 D1  和 led 这两个变量

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

37#
ID:301304 发表于 2018-4-3 10:18 | 只看该作者
延时函数有问题 建议修改一下
回复

使用道具 举报

36#
ID:301267 发表于 2018-4-3 08:36 | 只看该作者
delay  有问题
回复

使用道具 举报

35#
ID:301256 发表于 2018-4-3 07:53 | 只看该作者
尝试把bs18b20中间GND重新接一下
回复

使用道具 举报

34#
ID:283954 发表于 2018-4-3 03:08 | 只看该作者
哈,我是看不懂C语言的,也没有用过89C52, 可是看那个EA接脚就觉得奇怪,为何是接在LED与电阻之间呢,照看那样接EA脚是在1-2V之间(忘了LED的结电压)不是0也不是1,也是0也是1,如果是这样的话,开机后偶尔跑内部程序,偶尔跑外部程序,叫“不尽人意“,大概是这个意思吧?如果没有外部程序,那所有的脚都是高电位吧? 那LED根本没什么用吧? 另外你是否用对CPU的版本,听说有两个版本的。

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

33#
ID:299857 发表于 2018-4-2 18:27 | 只看该作者
居然没人和我遇到同一种情况的吗?还是没有人帮助新人?绝望....
回复

使用道具 举报

32#
ID:299857 发表于 2018-4-2 07:22 | 只看该作者
笑纳倾城 发表于 2018-4-1 23:20
宏定义顺序有问题

不用纠结代码吧。
代码不规范,也可以运行的吧。
因为代码在开发板是可以正常运行的。我一直怀疑的是我的图有问题。因为我做过三次这样的最小系统。
回复

使用道具 举报

31#
ID:299857 发表于 2018-4-2 07:19 | 只看该作者
kaifeng88 发表于 2018-4-1 23:05
你确定复位电路正确??

我一直怀疑的是我的最小系统有问题。我不知道。我看了网络上的,包括我树上的复位电路,都是如此啊。看不错出有什么错。无奈,还请指出。
回复

使用道具 举报

30#
ID:300605 发表于 2018-4-1 23:20 | 只看该作者
宏定义顺序有问题
回复

使用道具 举报

29#
ID:299857 发表于 2018-4-1 23:16 | 只看该作者
pmsjzj 发表于 2018-4-1 22:25
delay(50000) 陶醉了, 改成十六进制吧

这delay函数是没有问题的啊。在开发板是完全胜任的啊。问题不会出现在代码代码在开发板上是正常运行的。还请帮我看下原理图吧。
回复

使用道具 举报

28#
ID:300586 发表于 2018-4-1 23:05 来自手机 | 只看该作者
你确定复位电路正确??
回复

使用道具 举报

27#
ID:299857 发表于 2018-4-1 22:27 | 只看该作者
sharklaser 发表于 2018-4-1 22:11
参数设置写错,没有变化

什么意思呢?你说的参数是....?还请明示。
回复

使用道具 举报

26#
ID:46475 发表于 2018-4-1 22:25 | 只看该作者
delay(50000) 陶醉了, 改成十六进制吧
回复

使用道具 举报

25#
ID:300567 发表于 2018-4-1 22:11 | 只看该作者
参数设置写错,没有变化
回复

使用道具 举报

24#
ID:299857 发表于 2018-4-1 21:46 | 只看该作者
这个问题目前恐怕还是解决不了。
难道我真的是和单片机无缘了?
如何拯救我脆弱的小心灵?
求某个大神给个 简单的让一盏LED灯闪烁的原理图,封装图我,然后再给代码我。
我去做个新的电路板,试试。
谢!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

23#
ID:299857 发表于 2018-4-1 21:42 | 只看该作者
bailoao 发表于 2018-4-1 14:55
额,p0需要上拉电阻,p2不用

我实际的板并没有使用P0,P3,写这个代码只是想用P1^0和P2^0检验板是否正常。因为我之前做个两个板都是这个样,引所有脚全是高电平。
回复

使用道具 举报

22#
ID:284873 发表于 2018-4-1 14:55 来自手机 | 只看该作者
额,p0需要上拉电阻,p2不用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表