ttexas 发表于 2026-5-4 01:22:52

!已解决!输出全是高电平的问题,弄了2天了


#include <STC8G.H> // 关键:必须使用STC官方头文件

void delay(void) {
    unsigned int i;
    for(i=0; i<50000; i++);
}

void main(void) {
      
      delay();delay();delay();
    // 初始化P3口为推挽输出模式(必须配置!)
    P3M0 = 0xff;
      P3M1 = 0x00;
// M1=0, M0=1 → 推挽模式
   
    while(1) {
      P3 = 0x00;// 所有IO输出低电平
      delay();
      P3 = 0xFF;// 所有IO输出高电平
      delay();
    }
}STC8G1K08A,就这么个简单代码,编译烧录后运行,分析仪抓取全是高电平,豆包千问都无法解决,我要崩溃了,到底哪里不对啊




正在检测目标单片机 ...
单片机型号: STC8G1K08A-8PIN

当前芯片的硬件选项为:
. 当前系统ISP工作频率: 23.830MHz
. 上次下载设置的下次用户程序运行使用的内部IRC振荡器的频率: 24.002MHz
. 掉电唤醒定时器的频率: 35.625KHz
. P3.2和P3.3与下次下载无关
. 上电复位时不增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时不复位,可产生低压中断
. 低压检测门槛电压 : 2.00 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 32
. 空闲状态时看门狗定时器停止计数
. 下次下载用户程序时,不擦除用户EEPROM区
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. 内部参考电压: 1193 mV (参考范围: 1100~1300mV)

单片机型号: STC8G1K08A-8PIN

开始调节频率 ...                        
调节后的频率: 24.002MHz (0.010%)

正在重新握手 ... 成功                        
当前的波特率: 115200
正在擦除目标区域 ... 完成 !               
正在下载用户代码 ... 完成 !               
正在设置硬件选项 ... 完成 !               

更新后的硬件选项为:
. 当前系统ISP工作频率: 23.830MHz
. 上次下载设置的下次用户程序运行使用的内部IRC振荡器的频率: 24.002MHz
. 掉电唤醒定时器的频率: 35.625KHz
. P3.2和P3.3与下次下载无关
. 上电复位时不增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时不复位,可产生低压中断
. 低压检测门槛电压 : 2.00 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 32
. 空闲状态时看门狗定时器停止计数
. 下次下载用户程序时,不擦除用户EEPROM区
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. 内部参考电压: 1193 mV (参考范围: 1100~1300mV)
芯片出厂序列号 : F794C4552170CA

单片机型号: STC8G1K08A-8PIN

. 用户设定频率: 24.000MHz
. 调节后的频率: 24.002MHz ( 主时钟分频系数 = 1; )
. 频率调节误差: 0.010%


操作成功 !(2026-05-04 01:01:17)
--------------------------------------------------------------------------------------------------------------
下面是崩溃的我和豆包

我彻底明白!**所有代码都无效,核心只有一个:你的芯片被烧录配置锁死了,根本不运行任何程序!**不是代码错、不是你操作错,是**芯片配置熔断锁死**,必须用 **STC官方强制恢复方法** 救活!# 🔥 最后绝杀:强制救活芯片(100%有效,这是唯一办法)## 第一步:完全断电!拔掉所有线!把单片机的 **VCC电源线拔掉**,彻底断电!## 第二步:STC-ISP 只改这2个设置(别动其他!)1. 芯片型号:**STC8G1K08A**2. 勾选:**复位脚用作I/O口**3. **所有其他选项全部取消!**(低压复位、看门狗、上电延时 全关!)## 第三步:冷启动强制烧录(关键!)1. 先点击 STC-ISP 里的 **「下载/编程」**2. **立刻给单片机插上VCC电源**(冷启动)3. 等待烧录完成(只烧录配置,不烧代码!)---# 然后烧录这段 **官方原厂、零修改、绝对运行** 代码```c#include <STC8G.H>void delay(void) {    unsigned int i;    for(i=0; i<50000; i++);}void main(void) {    // 出厂默认IO,不配置推挽!    while(1) {      P3 = 0x00;// 全低      delay();      P3 = 0xFF;// 全高      delay();    }}```---# ✅ 如果这一步做完,逻辑分析仪**依然全高电平**只有一个最终结论:## **你的单片机芯片,已经因为错误烧录配置,永久性硬件损坏**---我为让你耗费这么多时间,**诚恳道歉**!这已经不是代码/软件问题,是芯片物理锁死损坏了。



已经找到问题了
是我傻逼了,2年不搞,一直是点击的打开eeprom文件{:shuai:}
这怎么能对呢.

刚才找出了10年前的90C516rd+,心想再试一把的,没想到那个老版本的isp,eeprom那里是灰的,没法点,一下子就开窍了{:daku:}


神农鼎 发表于 2026-5-4 11:13:17





#include "reg51.h"

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;

sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;

sfr P4   = 0xC0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;

sfr P5   = 0xC8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;

sfr P6   = 0xE8;
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;

sfr P7   = 0xF8;
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;

void delay()
{
    int i, j;

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


void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;

    P10 = 0;
    delay();
    P10 = 1;
    P11 = 0;
    delay();
    P11 = 1;
    P12 = 0;
    delay();
    P12 = 1;
    P13 = 0;
    delay();
    P13 = 1;
    P14 = 0;
    delay();
    P14 = 1;
    P15 = 0;
    delay();
    P15 = 1;
    P16 = 0;
    delay();
    P16 = 1;
    P17 = 0;
    delay();
    P17 = 1;

//    P30 = 0;          //P3.0/P3.1为仿真口和USB下载口时不可演示
//    delay();
//    P30 = 1;
//    P31 = 0;
//    delay();
//    P31 = 1;
    P32 = 0;
    delay();
    P32 = 1;
    P33 = 0;
    delay();
    P33 = 1;
    P34 = 0;
    delay();
    P34 = 1;
    P35 = 0;
    delay();
    P35 = 1;
    P36 = 0;
    delay();
    P36 = 1;
    P37 = 0;
    delay();
    P37 = 1;

    P20 = 0;
    delay();
    P20 = 1;
    P21 = 0;
    delay();
    P21 = 1;
    P22 = 0;
    delay();
    P22 = 1;
    P23 = 0;
    delay();
    P23 = 1;
    P24 = 0;
    delay();
    P24 = 1;
    P25 = 0;
    delay();
    P25 = 1;
    P26 = 0;
    delay();
    P26 = 1;
    P27 = 0;
    delay();
    P27 = 1;

    P00 = 0;
    delay();
    P00 = 1;
    P01 = 0;
    delay();
    P01 = 1;
    P02 = 0;
    delay();
    P02 = 1;
    P03 = 0;
    delay();
    P03 = 1;
    P04 = 0;
    delay();
    P04 = 1;
    P05 = 0;
    delay();
    P05 = 1;
    P06 = 0;
    delay();
    P06 = 1;
    P07 = 0;
    delay();
    P07 = 1;

    P40 = 0;
    delay();
    P40 = 1;
    P41 = 0;
    delay();
    P41 = 1;
    P42 = 0;
    delay();
    P42 = 1;
    P43 = 0;
    delay();
    P43 = 1;
    P44 = 0;
    delay();
    P44 = 1;
    P45 = 0;
    delay();
    P45 = 1;
    P46 = 0;
    delay();
    P46 = 1;
    P47 = 0;
    delay();
    P47 = 1;

    P50 = 0;
    delay();
    P50 = 1;
    P51 = 0;
    delay();
    P51 = 1;
    P52 = 0;
    delay();
    P52 = 1;
    P53 = 0;
    delay();
    P53 = 1;
    P54 = 0;
    delay();
    P54 = 1;
    P55 = 0;
    delay();
    P55 = 1;
    P56 = 0;
    delay();
    P56 = 1;
    P57 = 0;
    delay();
    P57 = 1;

    P60 = 0;
    delay();
    P60 = 1;
    P61 = 0;
    delay();
    P61 = 1;
    P62 = 0;
    delay();
    P62 = 1;
    P63 = 0;
    delay();
    P63 = 1;
    P64 = 0;
    delay();
    P64 = 1;
    P65 = 0;
    delay();
    P65 = 1;
    P66 = 0;
    delay();
    P66 = 1;
    P67 = 0;
    delay();
    P67 = 1;

    P70 = 0;
    delay();
    P70 = 1;
    P71 = 0;
    delay();
    P71 = 1;
    P72 = 0;
    delay();
    P72 = 1;
    P73 = 0;
    delay();
    P73 = 1;
    P74 = 0;
    delay();
    P74 = 1;
    P75 = 0;
    delay();
    P75 = 1;
    P76 = 0;
    delay();
    P76 = 1;
    P77 = 0;
    delay();
    P77 = 1;

    while (1)
    {
      P0 = 0x00;
      delay();
      P0 = 0xff;

      P1 = 0x00;
      delay();
      P1 = 0xff;

      P3 = 0x03;          //P3.0/P3.1为仿真口和USB下载口时不可演示
      delay();
      P3 = 0xff;

      P2 = 0x00;
      delay();
      P2 = 0xff;

      P4 = 0x00;
      delay();
      P4 = 0xff;

      P5 = 0x00;
      delay();
      P5 = 0xff;

      P6 = 0x00;
      delay();
      P6 = 0xff;

      P7 = 0x00;
      delay();
      P7 = 0xff;
    }
}


wulin 发表于 2026-5-4 11:43:09

#include "STC8G.H"

void delay(unsigned int ms)//注:ms_max=65536
{
        unsigned int i;
        do
        {
                i=2400;//STC8 24.0MHz
                while(--i);
        }
        while(--ms);
}

void main(void)
{
        P3M0 = 0x00;
        P3M1 = 0x00;
        while(1)
        {
                P3 = 0x00;// 所有IO输出低电平
                delay(500);
                P3 = 0xff;// 所有IO输出高电平
                delay(500);
        }
}

jwd 发表于 2026-5-4 12:47:34

看看是不是被编译优化了?
还有你外部电路是啥样的

C_wolf 发表于 2026-5-4 13:21:21

找豆包聊闲天可以,写代码还是算了吧。

问问别的AI吧,DEEPSEEK

zhx 发表于 2026-5-4 14:56:30

不要自动启动 看门狗
P3 = 0xA5;
延时
P3 = 0x5A;
延时
保证P3 每个时刻都有不同变化,
其实你应该先固定 输出 P3=0x5A;先别加延时

网老四 发表于 2026-5-5 16:26:05

源代码没有问题,
>检查焊接和接线,你的代码修改了烧录口引脚状态,最好烧录完断开烧录器跟单片机P30和P31的连接再测试,或者修改源代码避开P30和P31两个管脚
>检查烧录的hex文件是不是编译出来的那个.
>检查逻辑分析仪是不是正确设置和连接了,实际上低速IO翻转用万用表册就行了,接个LED灯指示也可以,

ttexas 发表于 2026-5-5 17:46:51


搞了个图形编程,这么点代码总可以了吧,还是一条直线,鬼打墙
还有,手里的15F104w,写好代码也是同样情况,我特意拿了几年前写的正常运行的hex烧进去,也是全高电平,究竟是什么鬼,.






ttexas 发表于 2026-5-5 18:00:42

能不能发个点灯hex给我,我直接烧一下看看,到底是流程里哪个变量有问题

我分析下来,能够烧写成功,mcu肯定是没坏,而且P3.3也是可以通过烧写改变的

到底哪里不对啊

wulin 发表于 2026-5-5 20:39:38

ttexas 发表于 2026-5-5 18:00
能不能发个点灯hex给我,我直接烧一下看看,到底是流程里哪个变量有问题

我分析下来,能够烧写成功,mcu肯定是 ...

楼主肯定是把下载文件路径搞错了,就这几行代码不可能有1.455K。


页: [1] 2 3
查看完整版本: !已解决!输出全是高电平的问题,弄了2天了