qepuemc 发表于 2024-3-24 13:26:51

zhudean11 发表于 2023-12-19 11:39
IO口用作输入时是不是设置成高阻输入并开启内部4K上拉是最优的模式?

我现在用的方法就是准双向口,设置高阻的话不能正常使用,外部上拉也不行。所以IO输入我就用准双向口模式

jwd 发表于 2024-4-4 18:45:32

qepuemc 发表于 2024-3-24 13:26
我现在用的方法就是准双向口,设置高阻的话不能正常使用,外部上拉也不行。所以IO输入我就用准双向口模式 ...

还有这种情况?

qepuemc 发表于 2024-4-5 07:58:58

jwd 发表于 2024-4-4 18:45
还有这种情况?

反正我是只能用准双向口。应该是还有不会用的地方没设置好。

jwd 发表于 2024-4-19 22:12:20

qepuemc 发表于 2024-4-5 07:58
反正我是只能用准双向口。应该是还有不会用的地方没设置好。

确实,我今天也遇见了高阻+上拉,电压不对,改为准双向口就好了

jwd 发表于 2024-4-30 09:59:20

qepuemc 发表于 2024-4-5 07:58
反正我是只能用准双向口。应该是还有不会用的地方没设置好。

我今天又试了一下,使用屠龙刀板子,按键P33是可以使用高阻+上拉来检测的,但是我外部用光耦的就不行

qepuemc 发表于 2024-4-30 13:52:45

jwd 发表于 2024-4-30 09:59
我今天又试了一下,使用屠龙刀板子,按键P33是可以使用高阻+上拉来检测的,但是我外部用光耦的就不行 ...

光耦检测低电平。我再试一下。

电子爱好者2024 发表于 2024-5-13 15:40:42

学习

vb2002 发表于 2024-5-19 00:40:13

输入用高阻抗,高阻抗不是说两边都悬空吗?

vb2002 发表于 2024-5-19 01:56:45

输出p33用推挽,p54用高阻或者高阻加上拉都不正常,通电led就闪,
p54换成 双向和推挽都正常
备注:我的led是正极接p33,负极接地。p54接io口和地。
用的stc8g1k08a

vb2002 发表于 2024-5-19 09:32:47

#include <STC8G.H>
#include "Delay.h"
#include "Key.h"
#include "Timer0.h"

sbit LED=P3^3;
unsigned char Counter, Compare;
unsigned char KeyNum, Speed;

void main()
{
        LED=0;
    P3M0 = 0x08; P3M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x10;
    P5PU = 0x10;
    P5NCS = 0x00;


    Timer0_Init();// 初始化定时器 0 和其中断
//    Compare = 66;   // 设置初始占空比

    while(1)
    {
      KeyNum = Key(); // 读取按键值

      if(KeyNum == 1) // 假设 Key() 返回 1 表示某个特定按键被按下
      {
            Speed++;
            Speed %= 4; // 限制 Speed 的值在 0 到 3 之间

            switch(Speed)
            {
                case 0: Compare = 0; break;
                case 1: Compare = 1; break;
                case 2: Compare = 10; break;
                case 3: Compare = 100; break;
//                case 4: Compare = 30; break;
//                case 5: Compare = 40; break;
//                case 6: Compare = 80; break;
//                case 7: Compare = 100; break;
            }

            // 去除不必要的 Delay 调用,因为按键检测和处理应该是即时的
      }
    }
}

void Timer0_Routine() interrupt 1 // 定时器 0 的中断服务程序
{
    TL0 = 0xF4; // 设置定时初始值(根据定时器的配置和需要的频率来计算)
    TH0 = 0xFF;

    Counter++;
    Counter = Counter % 100; // 确保 Counter 在 0 到 99 之间循环

    if(Counter < Compare)
    {
      LED = 1; // LED 亮
    }
    else
    {
      LED = 0; // LED 灭
    }
}

一晚上都没搞懂这个为什么闪,按照老大的说明来的,输出led用的推挽,输入按键p54用的高阻,4k上拉,施密特都打开了。还是闪。
头都晕了
页: 1 2 3 4 [5] 6
查看完整版本: I/O口, 输入/输出, 用啥工作模式 ?