找回密码
 立即注册
查看: 1419|回复: 14

STC8H1K28 读取ADC值总为3ff,无论实际电压是多少

[复制链接]

该用户从未签到

5

主题

12

回帖

72

积分

注册会员

积分
72
发表于 2023-4-25 10:40:31 | 显示全部楼层 |阅读模式
void ADC_init(void)
{
                P1M0 = 0x00;//P1 设置为准双向口,P1.7设置为高阻输入 做AD使用
                P1M1 = 0x80;
          P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x2f;                              //设置ADC时钟为系统时钟/2/16 转换结果右对齐,ADC_RES 高2位,ADC_RESL低8位
    ADC_CONTR = 0x80;                           //使能ADC模块
    //EADC = 1;                                   //使能ADC中断
                //ADC_CONTR |= (0x40|7);                          //启动AD转换
}



u16        Get_ADCResult(u8 channel)        //channel = 0~12
{
        u16        adc;
        u8        i;
        ADC_RES = 0;
        ADC_RESL = 0;

        ADC_CONTR = (ADC_CONTR & 0xf0) | ADC_START | channel;
        NOP(30);                        //对ADC_CONTR操作后等待会儿再访问

        for(i=0; i<250; i++)                //超时返回,正常i等于10以内就可以转换完成
        {
                if(ADC_CONTR & ADC_FLAG)
                {
                        ADC_CONTR &= ~ADC_FLAG;
                        adc = ((u16)ADC_RES << 8) | ADC_RESL;
                        return        adc;
                }
        }
        return        4096;        //错误,返回4096,调用的程序判断
}


回复 送花

使用道具 举报

该用户从未签到

563

主题

9865

回帖

1万

积分

管理员

积分
14409
发表于 2023-4-25 10:54:57 | 显示全部楼层
1.png

2.png


#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;

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

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.0为ADC口
    P1M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x80;                           //使能ADC模块
    EADC = 1;                                   //使能ADC中断
    EA = 1;
    ADC_CONTR |= 0x40;                          //启动AD转换

    while (1);
}


回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

12

回帖

72

积分

注册会员

积分
72
 楼主| 发表于 2023-4-25 12:10:27 | 显示全部楼层
神农鼎 发表于 2023-4-25 10:54
#include "reg51.h"
#include "intrins.h"

我的初始化参数看着没有区别哦,而且需要串口打出才能发现是否有问题,您这个采集完也看不到
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

12

回帖

72

积分

注册会员

积分
72
 楼主| 发表于 2023-4-25 12:28:53 | 显示全部楼层
本帖最后由 benjamin 于 2023-4-25 13:07 编辑
benjamin 发表于 2023-4-25 12:10
我的初始化参数看着没有区别哦,而且需要串口打出才能发现是否有问题,您这个采集完也看不到 ...
这个是1.5-1.65之间电压的数值(供电电压5V);小于1.5 为0;大于1.65为3ff,型号为STC8H1K28 TQFP32封装

[13:03:36.125]接收←00 00
[13:03:37.125]接收←00 1F
[13:03:38.125]接收←00 1F
[13:03:39.125]接收←00 7F
[13:03:40.125]接收←00 0F
[13:03:41.125]接收←00 7F
[13:03:42.125]接收←00 7F
[13:03:43.140]接收←00 FF
[13:03:44.125]接收←00 0F
[13:03:45.125]接收←00 0F
[13:03:46.140]接收←01 FF
[13:03:47.125]接收←01 FF
[13:03:48.140]接收←01 FF
[13:03:49.140]接收←01 FF
[13:03:50.140]接收←01 FF
[13:03:51.140]接收←03 FF
回复 支持 反对 送花

使用道具 举报

该用户从未签到

563

主题

9865

回帖

1万

积分

管理员

积分
14409
发表于 2023-4-25 13:07:51 | 显示全部楼层
回复 支持 反对 送花

使用道具 举报

该用户从未签到

563

主题

9865

回帖

1万

积分

管理员

积分
14409
发表于 2023-4-25 13:08:49 | 显示全部楼层

回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

12

回帖

72

积分

注册会员

积分
72
 楼主| 发表于 2023-4-25 13:09:47 | 显示全部楼层
我用串口调试工具来的,之前用过15系列的很少有问题,这个是第一次用
回复 支持 反对 送花

使用道具 举报

该用户从未签到

563

主题

9865

回帖

1万

积分

管理员

积分
14409
发表于 2023-4-25 13:10:42 | 显示全部楼层
盲人摸象,遇到自己软件问题卡几天正常
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

12

回帖

72

积分

注册会员

积分
72
 楼主| 发表于 2023-4-25 13:19:07 | 显示全部楼层
不是就上面那几个寄存器吗,而且我用咱们的demo库文件也是一样的现象
回复 支持 反对 送花

使用道具 举报

该用户从未签到

563

主题

9865

回帖

1万

积分

管理员

积分
14409
发表于 2023-4-25 13:39:12 | 显示全部楼层
那芯片错了 ?
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-11 11:50 , Processed in 0.069108 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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