找回密码
 立即注册
楼主: 普信杨133

8H4K32TL ADC读取失败问题请教

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-01 10:42:54
已绑定手机

2

主题

8

回帖

47

积分

新手上路

积分
47
发表于 4 天前 | 显示全部楼层
王*** 发表于 2025-8-30 18:24
删掉这一行,否则关闭XFR标志位后,就无法访问地址在xdata区域的特殊功能寄存器了
这会导致后面的操作 ...

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

#define MAIN_Fosc  11059200L  // 11059200L      // 定义主时钟频率(11.0592MHz)  24000000UL  //主时钟频率
#define PWM_Freq  1000        //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

点评

那可以试一下STC-ISP中自带的AiCube功能,选择8H8K64U型号即可,外设的驱动代码都是通用的 然后配置一下ADC和IO口部分,AiCube内的功能都是经过验证的 [attachimg]113432[/attachimg]  详情 回复 发表于 3 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:558
  • 最近打卡:2025-09-03 10:28:30
已绑定手机
已实名认证

116

主题

2749

回帖

6934

积分

版主

积分
6934
发表于 3 天前 | 显示全部楼层
普信*** 发表于 2025-8-31 21:52
谢谢回复!
这一句有和没有都一样。我在程序里面加了一句ADCRread函数调用,也没用。
用镊子短接NTC时指 ...

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-01 10:42:54
已绑定手机

2

主题

8

回帖

47

积分

新手上路

积分
47
发表于 3 天前 | 显示全部楼层
我用64U系列编译,保留了那2句有没有都没有变化的语句,下载后还是一样的,测试方式是用镊子短电阻和NTC来看指示灯短变化
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-09-03 09:10:45

9

主题

403

回帖

2933

积分

金牌会员

积分
2933
发表于 3 天前 | 显示全部楼层
P4=ADC_RES ;
不建议直接把外设寄存器赋值给另一个外设寄存器,可能会出现未知结果.
最好使用一个中间变量中转下.
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-9-4 04:33 , Processed in 0.126708 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表