想不出来 发表于 2023-12-22 09:14:34

STC15单片机上电状态问题如何解决

最近在使用STC15F104E单片机做点简单的继电器控制,上电瞬间继电器误触发,是用示波器观察后波形如下,如图圈出来的地方就是单片机上电之后又低电平状态,前期看书STC15F104E的Data Sheet,提示说单片机上电I/O口状态为高电平,所以在继电器控制方式上采用了低电平西和继电器,现在问题是上电一个高低电平脉冲,继电器还是机会误触发一次,请教如何解决此问题。

想不出来 发表于 2023-12-22 15:59:31

目前是使用STC15F104E单片机,然后推动光耦,再推三极管,在控制继电器,I/O口为低电平时继电器吸合。上电高电平后又是低电平,所以继电器吸合一下,然后运行到主程序中,I/O口初始化为高。

想不出来 发表于 2023-12-23 09:21:33

神农鼎 发表于 2023-12-22 19:31
大师的图都是高清的




#include        "STC15F104E.H"
#include "intrins.h"
#define COUNT 2000                                             //状态改变延时时间 最高65535
unsigned int stateCnt={0,0,0,0};       //状态计数变量组
unsigned char state=0;                                     //状态机状态:0为继电器吸合 1为继电器断开

void KSFSM()            //按键开关状态机
{                                                                                      //0为按键断开,1为按键按下
if(P33&&P32)                              //11
        stateCnt++;
        else if(P33&&!P32)                        //10
        stateCnt++;
        else if(!P33&&P32)                        //01
        stateCnt++;
        else if(!P33&&!P32)                        //00
        stateCnt++;
       
        if((stateCnt>=COUNT)||(stateCnt>=COUNT)||(stateCnt>=COUNT))
        {                                                                        //00、01、10 按键按下 继电器吸合
                unsigned char s;
                for(s=0;s<4;s++)
                stateCnt=0;      //状态计数变量组清0
                state=0;
        }
        else if(stateCnt>=COUNT)
        {                                                                        //11状态按键都未按下 继电器断开
                unsigned char s;
                for(s=0;s<4;s++)
                stateCnt=0;
                state=1;               
        }       
}       

void RlyFSM()                                      //继电器状态机
{
        if(state==0)                              //继电器闭合
        {
    P35 = 0;
        }
        else if(state==1)       //继电器断开
        {
          P35 = 1;
        }       
}       

void main()
{
//    P3M0 = 0x00;
//          P3M1 = 0x00;
          P3 = 0xFF;
          WDT_CONTR=0x34;         //看门狗使能
while (1)
{
        KSFSM();            //按键开关状态机
          RlyFSM();                                      //继电器状态机
          WDT_CONTR=0x34;       //看门狗使能               
        }
}

gentleman 发表于 2023-12-22 11:42:13

不会吧,要不先检查一下程序{:4_200:}

神农鼎 发表于 2023-12-22 15:23:11

完整原理图的PDF先发上来,让大家帮忙审核


一灯大师,I/O口控制: LED点灯, NPN/PNP三级管, N-MOS管/P-MOS管, 光耦, 继电器 - I/O读写及点灯,外部中断 ,所有I/O都支持的普通I/O中断,按键扫描 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

想不出来 发表于 2023-12-22 15:56:36

神农鼎 发表于 2023-12-22 15:23
完整原理图的PDF先发上来,让大家帮忙审核




可以

想不出来 发表于 2023-12-22 16:03:21

gentleman 发表于 2023-12-22 11:42
不会吧,要不先检查一下程序

主要程序没啥东西啊,就只是这个I/O口上电给它赋值了一个高电平。

zhudean11 发表于 2023-12-22 16:59:20

最好上电后有个延时继电器,延时几秒,让单片机稳定后再给控制电源,把单片机上电后的不稳定时间段躲过去。

社区闲人 发表于 2023-12-22 19:17:39

避开P3.2口。用P3.4口。

神农鼎 发表于 2023-12-22 19:25:50

1,他后来补的图,不一定是实际的图
2,看下图,实在看不习惯,你先学习我师傅画的图
3,MCU 用能仿真的 STC8G1K08A-36I-SOP8



神农鼎 发表于 2023-12-22 19:29:24


跟大师学电路,不要抄了一堆凌乱的图,还没人引导


https://www.stcaimcu.com/forum.p ... ptid=4830&pid=33168



页: [1] 2
查看完整版本: STC15单片机上电状态问题如何解决