STC15单片机上电状态问题如何解决
最近在使用STC15F104E单片机做点简单的继电器控制,上电瞬间继电器误触发,是用示波器观察后波形如下,如图圈出来的地方就是单片机上电之后又低电平状态,前期看书STC15F104E的Data Sheet,提示说单片机上电I/O口状态为高电平,所以在继电器控制方式上采用了低电平西和继电器,现在问题是上电一个高低电平脉冲,继电器还是机会误触发一次,请教如何解决此问题。目前是使用STC15F104E单片机,然后推动光耦,再推三极管,在控制继电器,I/O口为低电平时继电器吸合。上电高电平后又是低电平,所以继电器吸合一下,然后运行到主程序中,I/O口初始化为高。 神农鼎 发表于 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; //看门狗使能
}
} 不会吧,要不先检查一下程序{:4_200:}
完整原理图的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:23
完整原理图的PDF先发上来,让大家帮忙审核
可以 gentleman 发表于 2023-12-22 11:42
不会吧,要不先检查一下程序
主要程序没啥东西啊,就只是这个I/O口上电给它赋值了一个高电平。 最好上电后有个延时继电器,延时几秒,让单片机稳定后再给控制电源,把单片机上电后的不稳定时间段躲过去。
避开P3.2口。用P3.4口。 1,他后来补的图,不一定是实际的图
2,看下图,实在看不习惯,你先学习我师傅画的图
3,MCU 用能仿真的 STC8G1K08A-36I-SOP8
跟大师学电路,不要抄了一堆凌乱的图,还没人引导
https://www.stcaimcu.com/forum.p ... ptid=4830&pid=33168
页:
[1]
2