王柱强 发表于 2025-3-21 09:43:27

8G1K08A ADC中断进不去是什么原因 | 已解决

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

sfr   ADC_CONTR   =   0xbc;
sfr   ADC_RES   =   0xbd;
sfr   ADC_RESL    =   0xbe;
sfr   ADCCFG      =   0xde;

sfr   P_SW2   =   0xba;
#define ADCTIM(*(unsigned char volatile xdata *)0xfea8)

sbit    EADC    =   IE^5;

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;


unsigned int PW;

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;

    P5M0 = 0x00;                              //设置P5.5为ADC口
    P5M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x85;                           //使能ADC模块P5.5为ADC口
    EADC = 1;                                 //使能ADC中断
    EA = 1;
    ADC_CONTR |= 0x40;                        //启动AD转换

    while(1);      

}

void ADC_Isr() interrupt 5
{
    ADC_CONTR &= ~0x20;                         //清中断标志
    //P2 = ADC_RES;                               //读取ADC结果
    ADC_CONTR |= 0x40;                        //继续AD转换
      
         PW++;
                        
                        if(PW>15000)
                              PW=0;                        
               
}

ADC中断void ADC_Isr() interrupt 5          没有进行中断是什么原因?请大佬指点!



国芯人工智能 发表于 2025-3-21 09:48:00

针对STC8G1K08A ADC中断无法进入的问题,可能的原因如下:<br><br>1. ADC配置错误:请检查ADCCONTR和ADCCFG寄存器配置是否正确。确保ADC使能(ADCCONTR.7 = 1)和中断使能(ADCCONTR.5 = 1)已正确设置。<br><br>2. 中断优先级:检查中断优先级设置,确保ADC中断未被更高优先级的中断屏蔽。<br><br>3. 定时器配置:ADCTIM寄存器用于配置ADC采样时间,确保其值设置合理,避免采样时间过短或过长导致中断无法触发。<br><br>4. 中断向量表:确认中断服务程序(ISR)已正确映射到ADC中断向量(通常为ADCISR)。<br><br>5. 硬件连接:检查ADC输入引脚是否连接正常,确保信号源稳定。<br><br>6. 堆栈溢出:检查堆栈是否溢出,导致中断无法正常响应。<br><br>建议逐步排查以上问题,确保配置正确无误。若问题仍未解决,可提供更详细的代码和硬件连接信息以便进一步分析。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

WZQ4115 发表于 2025-3-21 10:12:45

国芯人工智能 发表于 2025-3-21 09:48
针对STC8G1K08A ADC中断无法进入的问题,可能的原因如下:1. ADC配置错误:请检查ADCCONTR和ADCCFG寄存器配 ...

我用的例程,设置都检查过了,发现不了什么问题!

WZQ4115 发表于 2025-3-21 10:17:23

国芯人工智能 发表于 2025-3-21 09:48
针对STC8G1K08A ADC中断无法进入的问题,可能的原因如下:1. ADC配置错误:请检查ADCCONTR和ADCCFG寄存器配 ...

能发一个   STC8G1K08AADC中断详细例程!全部设置好的!

ercircle 发表于 2025-3-21 10:34:26

手册里设置的是P1.0 为 ADC 口,P5.5你设置的有问题


WZQ4115 发表于 2025-3-21 12:18:05

ercircle 发表于 2025-3-21 10:34
手册里设置的是P1.0 为 ADC 口,P5.5你设置的有问题

更改过还是没有用!估计那里还有问题!

ercircle 发表于 2025-3-21 14:01:09

WZQ4115 发表于 2025-3-21 12:18
更改过还是没有用!估计那里还有问题!
拿擎天柱板子测了下可以进中断,你是如何观察没进中断的呢?另外用的哪个板子,自己的板子电路图也可以贴一下看看


#include "Ai8051U.H"
#include "intrins.h"

unsigned char Led = 0x01;
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;

                P2 = ~Led;
               
    P5M0 = 0x00;                              //设置P5.5为ADC口
    P5M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x85;                           //使能ADC模块P5.5为ADC口
    EADC = 1;                                 //使能ADC中断
    EA = 1;
    ADC_CONTR |= 0x40;                        //启动AD转换

    while(1);      

}

void ADC_Isr() interrupt 5
{
          //清中断标志
          ADC_CONTR &= ~0x20;                        
          //读取 ADC 结果
          //P2 = ADC_RES;
                Led =Led<< 2;
                if(Led==0){
                        Led=0x01;                       
                }
                P2=~Led;
                //继续 AD 转换
    ADC_CONTR |= 0x40;                        //继续AD转换
   
}

WZQ4115 发表于 2025-3-22 18:19:22

谢谢各位大佬!问题解决了!就是把Keil   重新安装了几次 !反正可以进ADC中断了!

WZQ4115 发表于 2025-3-22 18:22:55

ercircle 发表于 2025-3-21 14:01
拿擎天柱板子测了下可以进中断,你是如何观察没进中断的呢?另外用的哪个板子,自己的板子电路图也可以贴 ...

谢谢!有了你的测试OK的程序!只有其它原因了!重新安装Keil   终于可以进ADC中断了!
页: [1]
查看完整版本: 8G1K08A ADC中断进不去是什么原因 | 已解决