!已解决!输出全是高电平的问题,弄了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:}
#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;
}
}
#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);
}
}
看看是不是被编译优化了?
还有你外部电路是啥样的
找豆包聊闲天可以,写代码还是算了吧。
问问别的AI吧,DEEPSEEK 不要自动启动 看门狗
P3 = 0xA5;
延时
P3 = 0x5A;
延时
保证P3 每个时刻都有不同变化,
其实你应该先固定 输出 P3=0x5A;先别加延时
源代码没有问题,
>检查焊接和接线,你的代码修改了烧录口引脚状态,最好烧录完断开烧录器跟单片机P30和P31的连接再测试,或者修改源代码避开P30和P31两个管脚
>检查烧录的hex文件是不是编译出来的那个.
>检查逻辑分析仪是不是正确设置和连接了,实际上低速IO翻转用万用表册就行了,接个LED灯指示也可以,
搞了个图形编程,这么点代码总可以了吧,还是一条直线,鬼打墙
还有,手里的15F104w,写好代码也是同样情况,我特意拿了几年前写的正常运行的hex烧进去,也是全高电平,究竟是什么鬼,.
能不能发个点灯hex给我,我直接烧一下看看,到底是流程里哪个变量有问题
我分析下来,能够烧写成功,mcu肯定是没坏,而且P3.3也是可以通过烧写改变的
到底哪里不对啊
ttexas 发表于 2026-5-5 18:00
能不能发个点灯hex给我,我直接烧一下看看,到底是流程里哪个变量有问题
我分析下来,能够烧写成功,mcu肯定是 ...
楼主肯定是把下载文件路径搞错了,就这几行代码不可能有1.455K。