旭日圆月 发表于 2023-5-31 17:35:26

STC8G1K08读取IO高低电平问题

#include "reg51.h"
#include "intrins.h"

sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;

sbit P32 = P3^2;
sbit P33 = P3^3;
sfr P5   = 0xC8;
sbit P54 = P5^4;
sbit P55 = P5^5;

void delay()
{
    int i, j;

    for (i=0; i<1000; i++)
    for (j=0; j<500; j++);
}

void main()
{
                P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
       
    while(1)
    {
                        P55 = 1;
                        _nop_();
                        _nop_();
                        CY = P55;
                       
                        if(CY)
                        {
                                P33 = 1;
                                delay();
                                P33 = 0;
                                delay();
                        }
                        else
                        {
                                P33 = 0;
                        }               
    }
}

使用的是STC8G1K08,P5^5连接一个5V按钮,根据P5^5的电平值,P3^3连接Led灯输出不同的状态。设计思路是,P5^5接5V按钮则灯闪烁,P5^5不接5V按钮则灯灭。但是程序烧到板子的实际情况是,不管P5^5有没有连接按钮,灯都是在闪烁。请问问题出在哪里?

神农鼎 发表于 2023-5-31 18:02:57

仿真看下,咋回事


用 STC-USB Link1D 仿真STC8系列MCU - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

旭日圆月 发表于 2023-5-31 18:50:43

神农鼎 发表于 2023-5-31 18:02
仿真看下,咋回事




现在P5.5悬空,没接5V按钮。但是运行完“CY = P55;”后,CY变为1了

乘风飞扬 发表于 2023-5-31 19:00:30

你的P55是设置为准双向模式,带弱上拉。不接5V时悬空,脚位也还是高电平的。
想要实现不接5V时灯灭的话,要在P55口上加个下拉电阻。

梁工 发表于 2023-5-31 22:59:25

1、P5.5设置为高阻。
2、P5.5下拉一个10K电阻。

旭日圆月 发表于 2023-6-1 09:15:49

乘风飞扬 发表于 2023-5-31 19:00
你的P55是设置为准双向模式,带弱上拉。不接5V时悬空,脚位也还是高电平的。
想要实现不接5V时灯灭的话,要 ...

(1)P5.5设置为准双向模式,P5.5接下拉电阻,上电前P5.5不接5V,上电后灯是灭的;然后P5.5接5V,灯闪烁;然后P5.5不接5V,灯没有灭,还是继续闪烁。
(2)P5.5设置为高阻输入,P5.5接下拉电阻,上电前P5.5不接5V,上电后灯是灭的;然后P5.5接5V,灯闪烁;然后P5.5不接5V,灯灭。满足设计要求。

旭日圆月 发表于 2023-6-1 09:17:30

梁工 发表于 2023-5-31 22:59
1、P5.5设置为高阻。
2、P5.5下拉一个10K电阻。

(1)P5.5设置为准双向模式,P5.5接下拉电阻,上电前P5.5不接5V,上电后灯是灭的;然后P5.5接5V,灯闪烁;然后P5.5不接5V,灯没有灭,还是继续闪烁。
(2)P5.5设置为高阻输入,P5.5接下拉电阻,上电前P5.5不接5V,上电后灯是灭的;然后P5.5接5V,灯闪烁;然后P5.5不接5V,灯灭。满足设计要求。
这种情况是不是P5.5不能设置成准双向,只能是高阻输入?

梁工 发表于 2023-6-1 11:18:06

旭日圆月 发表于 2023-6-1 09:17
(1)P5.5设置为准双向模式,P5.5接下拉电阻,上电前P5.5不接5V,上电后灯是灭的;然后P5.5接5V,灯闪烁 ...

也可以设置为准双向口,但是下拉电阻用3K。还是建议高阻,下拉10K。

旭日圆月 发表于 2023-6-1 14:42:33

梁工 发表于 2023-6-1 11:18
也可以设置为准双向口,但是下拉电阻用3K。还是建议高阻,下拉10K。

(1)P5.5设置为准双向模式,P5.5接下拉3K电阻。
(2)P5.5设置为高阻输入,P5.5接下拉10K电阻。
经过测试,以上两种均满足设计要求。
请问下以上的两种方案是否可以作为通用设计的标准?哪里可以查阅选取电阻大小的依据?

梁工 发表于 2023-6-1 15:26:59

旭日圆月 发表于 2023-6-1 14:42
(1)P5.5设置为准双向模式,P5.5接下拉3K电阻。
(2)P5.5设置为高阻输入,P5.5接下拉10K电阻。
经过测 ...

要根据实际电路设计选取,哪有什么标准,硬件是很灵活的,一定要根据具体的外部电路进行设计匹配。
页: [1] 2 3
查看完整版本: STC8G1K08读取IO高低电平问题