普信杨133 发表于 3 天前

王昱顺 发表于 2025-8-30 18:24
删掉这一行,否则关闭XFR标志位后,就无法访问地址在xdata区域的特殊功能寄存器了
这会导致后面的操作 ...

谢谢回复!
这一句有和没有都一样。我在程序里面加了一句ADCRread函数调用,也没用。
用镊子短接NTC时指示灯都不会切换
//测试ADC
#include "STC8H.h"
#include <intrins.h>

#define MAIN_Fosc11059200L// 11059200L      // 定义主时钟频率(11.0592MHz)24000000UL//主时钟频率
#define PWM_Freq1000      //PWM基础频率(Hz)
#define T1MS (65536 - MAIN_Fosc/1000)// 1ms定时计算
#define BRT   (65536 - (MAIN_Fosc/115200+2)/4)// 加2操作是为了让Keil编译器自动实现四舍五入运算

int *BGV;                  //内部参考信号源值存放在idata中,idata的EFH地址存放高字节
                              //F0H地址存放低字节,电压单位为豪富mV
int ADCRead()
{
   int res;
   ADC_CONTR|=~0x40;
   //nop();
   //nop();
   while(!(ADC_CONTR&0x20));
   ADC_CONTR&=~0x20;
   res=(ADC_RES<<8)|ADC_RESL;
   return res;
}

void ADC_Isr() interrupt 5
{
    ADC_CONTR&=~0x20;
        P4=ADC_RES ;
        ADC_CONTR|=~0x40;

}

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;

    P1M0 = 0x00;                              //设置P1.4为ADC口
    P1M1 = 0x10;
   
        P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;                                                         //有没有都没变化   1
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x80;                           //使能ADC模块
        EADC=1;
        EA=1;
        ADC_CONTR |= 0x40;                      //启动AD转换

    while (1)
    {
      ADC_CONTR |= 0x40;                      //启动AD转换
      _nop_();
      _nop_();
                ADCRead();                         //有没有都没变化                  2
      while (!(ADC_CONTR & 0x20));            //查询ADC完成标志
      ADC_CONTR &= ~0x20;                     //清完成标志
      P4 = ADC_RES;                           //读取ADC结果               
    }
}

程序中这2句有没有都对结果没影响。
//P_SW2 &= 0x7f;                                                         //有没有都没变化   1
ADCRead();                                                                  //有没有都没变化                  2

王昱顺 发表于 前天 10:06

普信杨133 发表于 2025-8-31 21:52
谢谢回复!
这一句有和没有都一样。我在程序里面加了一句ADCRread函数调用,也没用。
用镊子短接NTC时指 ...

那可以试一下STC-ISP中自带的AiCube功能,选择8H8K64U型号即可,外设的驱动代码都是通用的
然后配置一下ADC和IO口部分,AiCube内的功能都是经过验证的

普信杨133 发表于 前天 10:42

我用64U系列编译,保留了那2句有没有都没有变化的语句,下载后还是一样的,测试方式是用镊子短电阻和NTC来看指示灯短变化

网老四 发表于 前天 11:09

P4=ADC_RES ;
不建议直接把外设寄存器赋值给另一个外设寄存器,可能会出现未知结果.
最好使用一个中间变量中转下.
页: 1 [2]
查看完整版本: 8H4K32TL ADC读取失败问题请教