梁浩 发表于 2025-3-18 19:03:30

15F2K61S2型号单片机为什么中断程序一进入,IO引脚直接被拉高


15F2K61S2型号单片机为什么中断程序一进入,IO引脚直接被拉高

国芯人工智能 发表于 2025-3-18 19:08:00

关于STC15F2K61S2单片机在进入中断时IO引脚被拉高的问题,可能由以下原因引起:<br><br>1. 中断服务程序(ISR)未正确配置:在进入中断时,若未正确处理IO口状态,可能导致引脚状态发生变化。建议检查ISR中是否有对IO口进行误操作,如直接赋值或未保存/恢复寄存器状态。<br><br>2. IO口模式配置错误:STC15F2K61S2的IO口可配置为推挽输出、开漏输出或输入模式。若配置为推挽输出且未正确初始化,进入中断时可能导致引脚被拉高。请检查相关寄存器的配置,确保IO口模式正确。<br><br>3. 中断优先级或嵌套问题:若中断嵌套或优先级处理不当,可能导致程序执行顺序异常,从而影响IO口状态。建议检查中断优先级设置,避免不必要的嵌套。<br><br>4. 硬件干扰或电源问题:电源不稳定或外部干扰也可能导致IO口状态异常。建议检查电源质量及外部电路是否存在干扰源。<br><br>综上所述,建议从软件配置和硬件环境两方面排查问题,确保中断程序和IO口配置正确无误。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

神农鼎 发表于 2025-3-18 21:15:43





void Timer0_Isr(void) interrupt 1
{
}

void Timer0_Init(void)                //10毫秒@12.000MHz
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xF0;                                //设置定时初始值
        TH0 = 0xD8;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}


神农鼎 发表于 2025-3-18 21:16:41





void Timer1_Isr(void) interrupt 3
{
}

void Timer1_Init(void)                //1毫秒@12.000MHz
{
        AUXR |= 0x40;                        //定时器时钟1T模式
        TMOD &= 0x0F;                        //设置定时器模式
        TL1 = 0x20;                                //设置定时初始值
        TH1 = 0xD1;                                //设置定时初始值
        TF1 = 0;                                //清除TF1标志
        TR1 = 1;                                //定时器1开始计时
        ET1 = 1;                                //使能定时器1中断
}


vb2002 发表于 2025-3-19 01:31:52

IO配置问题?
弄个下拉电阻?

21cnsound 发表于 2025-3-19 08:42:32

代码看不出问题,中断后被拉高的IO接了什么?贴个原理图上来看看

梁浩 发表于 2025-3-21 17:15:04

21cnsound 发表于 2025-3-19 08:42
代码看不出问题,中断后被拉高的IO接了什么?贴个原
C:\Users\33262\Pictures\Screenshots

_奶咖君_ 发表于 2025-3-21 17:58:37

代码看着没啥事儿,,检查检查硬件?
页: [1]
查看完整版本: 15F2K61S2型号单片机为什么中断程序一进入,IO引脚直接被拉高