搜索
bottom↓
回复: 26

求助!自己焊的一个板子,每次上电后灯亮状态都不一样。

[复制链接]

出0入0汤圆

发表于 2012-4-24 09:57:18 | 显示全部楼层 |阅读模式
本帖最后由 songtion 于 2012-4-24 10:33 编辑


这个是具体的电路,请问各位前辈,是不是每次上电后复位没有工作啊?还是复位电路的电容有问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-4-24 23:15:44 | 显示全部楼层
唔……都没有人赐教啊……

出0入0汤圆

发表于 2012-4-24 23:29:57 | 显示全部楼层
本帖最后由 prudent 于 2012-4-24 23:31 编辑

粗看上去,好像复位电路有问题啊,那个10K电阻接法不对啊,应该是上拉吧

出0入0汤圆

发表于 2012-4-24 23:46:59 | 显示全部楼层
電容與電阻位置反了。

出0入0汤圆

发表于 2012-4-24 23:51:47 | 显示全部楼层
P0 输出的初值是否一样 ?

出145入215汤圆

发表于 2012-4-25 02:03:39 | 显示全部楼层
本帖最后由 dz20062008 于 2012-4-25 02:16 编辑

测量晶振两端是否有二分之一的电源电压,更换复位电路的电阻电容,测量是否通电后为零伏电压。还有就是你的程序代码有问题也会这样的,最大的可能性是你的程序有问题!把源码贴上来吧,让大家看看被

编辑原因,我也把51的复位当AVR的低电平复位了,实际51单片机是高电平复位。
PS:所谓高电平复位就是上电的瞬间保持一定时间的高电平然后变为低电平的一种复位方式。
    反之就是低电平复位.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出145入215汤圆

发表于 2012-4-25 02:16:59 | 显示全部楼层
jjj206 发表于 2012-4-24 23:46
電容與電阻位置反了。

51是高电平复位,我也一开始把它当AVR的低电平复位了!

出145入215汤圆

发表于 2012-4-25 02:18:30 | 显示全部楼层
prudent 发表于 2012-4-24 23:29
粗看上去,好像复位电路有问题啊,那个10K电阻接法不对啊,应该是上拉吧

51是高电平复位,所以这电路没有接错。AVR的单片机就才是低电平复位

出0入0汤圆

发表于 2012-4-25 06:28:13 | 显示全部楼层
本帖最后由 dianzichina 于 2012-4-25 06:29 编辑

是亮度不一样还是亮的灯不一样?请表述清楚。要是亮的灯不一样的话,那就是单片机没有程序,不能工作,输出的状态是的没有意义的随机值。一旦你初始化后,应该会归为全灭。

出0入0汤圆

发表于 2012-4-25 08:04:53 | 显示全部楼层
单片机里面写了程序了吗?

出0入0汤圆

发表于 2012-4-25 08:06:58 | 显示全部楼层
其实也不太对
复位是没问题的,晶振似乎也没问题
没有程序的话,出厂时应该有一个测试程序在里面的,AT的不知道了,很久没有用过了,至少STC的是有的,一般是类似流水灯的东西

出0入0汤圆

发表于 2012-4-25 10:51:58 | 显示全部楼层
电路是没错.应该是没下载程序.

出0入0汤圆

 楼主| 发表于 2012-4-25 15:35:27 | 显示全部楼层
dianzichina 发表于 2012-4-25 06:28
是亮度不一样还是亮的灯不一样?请表述清楚。要是亮的灯不一样的话,那就是单片机没有程序,不能工作,输出 ...

是亮的不一样,程序是对的,第一次上电的时候是完全按照程序走的。但后面就是每次一上电灯就乱亮……

出0入0汤圆

 楼主| 发表于 2012-4-25 15:39:33 | 显示全部楼层
xiaobendan001 发表于 2012-4-25 08:06
其实也不太对
复位是没问题的,晶振似乎也没问题
没有程序的话,出厂时应该有一个测试程序在里面的,AT的不 ...

写了程序的,程序是对的,第一次还能完全按照程序走……

出0入0汤圆

 楼主| 发表于 2012-4-25 15:41:33 | 显示全部楼层
dz20062008 发表于 2012-4-25 02:03
测量晶振两端是否有二分之一的电源电压,更换复位电路的电阻电容,测量是否通电后为零伏电压。还有就是你的 ...

附上程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit RED_A=P0^0;
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3;
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;

uchar Flash_Count = 0;
Operation_Type = 1;

void DelayMS(uint x)
{
        uchar t;
        while(x--)
        {
                 for(t=120;t>0;t--);
        }
}

void Traffic_lignt()
{
        switch(Operation_Type)
        {
                 case 1:
                        RED_A=1;YELLOW_A=1;GREEN_A=0;
                        RED_B=0;YELLOW_B=1;GREEN_B=1;
                        DelayMS(2000);
                        Operation_Type = 2;
                        break;
                case 2:
                        DelayMS(200);
                        YELLOW_A=~YELLOW_A;
                        if(++Flash_Count !=10)
                                return;
                        Flash_Count=0;
                        Operation_Type = 3;
                        break;
                case 3:
                        RED_A=0;YELLOW_A=1;GREEN_A=1;
                        RED_B=1;YELLOW_B=1;GREEN_B=0;
                        DelayMS(2000);
                        Operation_Type = 4;
                        break;       
                case 4:
                        DelayMS(200);
                        YELLOW_B=~YELLOW_B;
                        if(++Flash_Count !=10)
                                return;
                        Flash_Count=0;
                        Operation_Type = 1;
                        break;       
        }
}

void main()
{
        while(1)
        {
                 Traffic_lignt();       
        }
}

出0入0汤圆

发表于 2012-4-25 21:52:13 | 显示全部楼层
看不懂C
不过我认为
大多是初始化代码有问题

出0入0汤圆

发表于 2012-4-25 22:01:58 | 显示全部楼层
兜圈儿的路过

出0入0汤圆

发表于 2012-4-25 22:43:07 | 显示全部楼层
songtion 发表于 2012-4-25 15:41
附上程序:
#include
#define uchar unsigned char

P0口没有接上拉电阻???

出0入0汤圆

 楼主| 发表于 2012-4-25 23:05:26 | 显示全部楼层
raxb 发表于 2012-4-25 22:43
P0口没有接上拉电阻???

接了啊……

出0入0汤圆

发表于 2012-4-26 09:40:43 | 显示全部楼层
建议在CASE 2  和 4里像   1 和3 里一样,对每一个IO口都赋值,而不是单纯的对某一个口进行取反。
case 2:
                        RED_A=1;YELLOW_A=0;GREEN_A=0;
                        RED_B=0;YELLOW_B=1;GREEN_B=1;

出0入0汤圆

发表于 2012-4-26 10:14:47 | 显示全部楼层
songtion 发表于 2012-4-25 23:05
接了啊……

改到其它IO口试试,还是不行就是程序问题,行的话就是单片机P0口有问题

出0入0汤圆

发表于 2012-4-26 11:03:59 | 显示全部楼层
我知道问题出在哪里了
YELLOW_B=~YELLOW_B;
YELLOW_A=~YELLOW_A;
这两个取反的语句不能这样用
应该加个位变量,
bit a=0;

//////
a=~a;
YELLOW_A=a;
///////
这样试一下,楼主先把那几个取反的语句去掉,再试一下结果再告诉大家。
YELLOW_B=~YELLOW_B;
YELLOW_A=~YELLOW_A;
这样用貌似没有错,但是你是高电平接led,虽然IO已设为低电平输出,当你取反时首先在读取一次IO脚的电平, 这时有可能所读到的是高电平,而不是低电平
这就导致了每次取反的状态不一样。原因可能你的LED脚上接电阻太小了,换个阻值大点的试下,比如2K。
请楼主按我说的试下结果。
个人意见,不对请指正。

出0入0汤圆

 楼主| 发表于 2012-4-26 19:01:14 | 显示全部楼层
hongfadg 发表于 2012-4-26 11:03
我知道问题出在哪里了
YELLOW_B=~YELLOW_B;
YELLOW_A=~YELLOW_A;

嗯、我试试看看,谢谢你们了啊!

出0入0汤圆

发表于 2012-4-26 19:35:41 | 显示全部楼层
Operation_Type = 1;
为什么没有定义类型呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出145入215汤圆

发表于 2012-5-6 23:27:16 | 显示全部楼层
我也遇到过类似的现象,手动复位就每次都正常跑起来,上电复位容易失败,复位就恢复了。到现在也没有找打问题点,由于是新手也就没追求那么完美,估计是电源问题。问题还在!觉得要不是电源瞬态不好,就是程序初始化没写好,或者就是程序中有变量没保存被其它片段修改了。建议楼主使用KEIL的仿真调试。

出0入0汤圆

发表于 2012-5-7 08:59:21 | 显示全部楼层
在Main函数一开始把P0赋值!可能是上电复位时P0寄存器数值混乱了!

出0入0汤圆

发表于 2012-5-7 09:00:29 | 显示全部楼层
void main()
{
        P0=0x00;//加上这一行看看
        while(1)
        {
                 Traffic_lignt();        
        }
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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