找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8F1K08单片机上电复位问题

[复制链接]
跳转到指定楼层
楼主
以上的程序在上电复位时总是LED灯闪一下,初始化为低电平,但上电复位时总有高电平输出。请大神帮看看是不是程序初始化有问题呀?谢谢

#include <STC8.H>

#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
/********端口引脚定义*****/
sbit LED1=P3^0;
sbit LED2=P3^1;
sbit LED3=P3^2;
sbit LED4=P3^3;
sbit KEY=P5^4;
sbit LED5=P5^5;
/******延时函数声明******/
void delay(u16 Count);
/******主函数区******/
void main(void)
{
        u8 num=0;
        P3M0=0xff;   //设P3口为推挽输出
        P3M1=0x00;
        RSTCFG=0xef;  //设P5.4为IO口
        P5M0=0xef;      //设P5.4为准双向口
        P5M1=0xef;
        P5M0=0x20;    //设P5.5为推挽输出
        P5M1=0xdf;
        P3=0x00;        //初始化P3口为低电平
        //LED1=0,LED2=0,LED3=0,LED4=0;
        LED5=1;       //P5.5为高电平
        //KEY=0;
        while(1)
        {
                if(KEY==1)     //如P5.4为高电平
                {
               
                LED5=0;        //P5.5输出低电平
                delay(200);
                P3=0x00;     
                //LED1=LED2=LED3=LED4=0;
                delay(200);
                LED1=1,LED2=0,LED3=0,LED4=0;         //LED灯流水点亮
                delay(200);
                LED1=1,LED2=1,LED3=0,LED4=0;
                delay(200);
                LED1=1,LED2=1,LED3=1,LED4=0;
                delay(200);
                LED1=1,LED2=1,LED3=1,LED4=1;
                delay(200);
               
                 }

                {  
                if(KEY==0)
                {
                P3=0x00;
                delay(2000);
                LED5=1;
                }
                }
               
        }
}
/************延时3秒****/
void delay(u16 Count)
{
        u8 i,j;
        while(Count--)
        {
        for(i=0;i<50;i++)
                for(j=0;j<20;j++);
        }
}


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

使用道具 举报

沙发
ID:47286 发表于 2020-10-22 21:21 | 只看该作者
标准51片子上电就是高电平 你设置为低也是端口复位完毕后跑到你的程序才执行 中间有间隔 STC的8系理论上上电时每个端口都是高阻状态 即不输出也不输入 但实际上不好用 没看见你的电路图 如果是高有效 那很有可能闪一下 我就吃过这亏 看介绍挺高兴 按介绍设计的电路 然后复位误动 还得改回去
回复

使用道具 举报

板凳
ID:274156 发表于 2020-10-22 23:32 | 只看该作者
需要更改硬件才能变低电平
回复

使用道具 举报

地板
ID:65956 发表于 2020-10-23 08:15 | 只看该作者
针对51作端口驱动时首选设计要采用低电平驱动,这样就能保证单片机刚上电时会出现全动作的风险
回复

使用道具 举报

5#
ID:826754 发表于 2020-10-23 08:48 | 只看该作者
小聪聪 发表于 2020-10-22 23:32
需要更改硬件才能变低电平

硬件做下拉时,芯片会处于烧录模式,不能起动。
回复

使用道具 举报

6#
ID:401564 发表于 2020-10-23 11:35 | 只看该作者
8051复位默认是高电平,这个没法改变的,灯闪一下就是复位时的高电平
我用15W408AS使用1K电阻可以下拉,也可以烧录,你可以试一下
如果不行,那就只能先烧录,然后再焊下拉电阻,个人经验是1K电阻是可以下拉的,使用的时候把这个IO设定成强推挽输出就可以了
回复

使用道具 举报

7#
ID:213173 发表于 2020-10-23 12:40 | 只看该作者
STC8F1K08的P3.0~3.3上电复位默认高电平准双向口,P5.4、P5.5上电复位默认开漏状态。楼主设P3口为推挽输出代码是对的,复位脚用作I/O口设置不对,要在下载程序前硬件选项中勾选“复位脚用作I/O口”,设P5.4为准双向口和设P5.5为推挽输出应该写P5M0=0x20;P5M1=0x00;或者P5M0&=0xef;P5M1&=0xcf;。单片机上电复位到初始化完成之间有零点几秒时间,如果LED接高电平点亮就会闪一下。如果只是为了驱动LED一般选择低电平点亮为佳,如果是通过NPN三极管驱动继电器,可以在对应端口接1K下拉电阻解决上电复位误触发。原理是上电复位默认高电平准双向口的内置上拉电阻值很大,外接1K下拉电阻足以把端口电压拉低到0.7V以下。NPN三极管不会导通。始化完成后端口已是的电平。当需要端口高电平驱动三极管时,端口推挽输出能力足以抵消下拉电阻的影响并能建立高电平。
回复

使用道具 举报

8#
ID:826754 发表于 2020-10-23 13:54 | 只看该作者
wulin 发表于 2020-10-23 12:40
STC8F1K08的P3.0~3.3上电复位默认高电平准双向口,P5.4、P5.5上电复位默认开漏状态。楼主设P3口为推挽输出 ...

我也想用低电平驱动PMOS管进行LED灯的开关管,但对PMOS管不知道怎样驱动,之前有用PMOS管做了测试AO3401低电平时可以导通,但高电平时就不能完全关断,LED灯还有轻微的亮。G极接470欧电阻接IO口,下管接法。请教一下可以指点一下PMOS管低电平驱动的原理图吗?感谢指点。
回复

使用道具 举报

9#
ID:213173 发表于 2020-10-23 17:03 | 只看该作者
川蜀浪子 发表于 2020-10-23 13:54
我也想用低电平驱动PMOS管进行LED灯的开关管,但对PMOS管不知道怎样驱动,之前有用PMOS管做了测试AO3401 ...

相同电源电压1个引脚接1个LED用低电平驱动合适。如果1个引脚通过晶体管放大控制多个LED可以考虑高电平驱动。如果LED电源电压高于单片机VCC,不建议使用P管。下图两个电路适合前面介绍的方法,不会在上电复位时闪烁一下。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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