找回密码
 立即注册
楼主: 神农鼎

ADC的转换参考电压永远是ADC_VRef+ 和 1.19V 辅助固定信号源无关,如何接 ?

  [复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:346
  • 最近打卡:2025-05-01 19:40:16

10

主题

165

回帖

1233

积分

金牌会员

积分
1233
发表于 2024-2-20 11:34:46 | 显示全部楼层
神*** 发表于 2023-6-24 16:36
19.6.4                 利用ADC第15通道测量外部电压或电池电压
STC8H系列ADC的第15通道用于测量内部固定 ...

你好,神农鼎。
printf打印有没有%bd这样的表示?我设置变量是U8时,%bd打印出来是1,2,3,4,5,6这样循环,如果打印设成%d时,是256,512,768这样,是怎么回事

点评

%d对应的是int变量,直接打印u8的话需要强制转化一下,例如 变量定义位u8 dat; 可以调用printf("%d",(int)dat);  详情 回复 发表于 2024-2-20 13:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-04-30 10:10:32

3

主题

155

回帖

537

积分

高级会员

积分
537
发表于 2024-2-20 12:22:43 | 显示全部楼层
学习学习
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-2-20 13:32:29 | 显示全部楼层
lh*** 发表于 2024-2-20 11:34
你好,神农鼎。
printf打印有没有%bd这样的表示?我设置变量是U8时,%bd打印出来是1,2,3,4,5,6这样循 ...

%d对应的是int变量,直接打印u8的话需要强制转化一下,例如
变量定义位u8 dat;

可以调用printf("%d",(int)dat);
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:346
  • 最近打卡:2025-05-01 19:40:16

10

主题

165

回帖

1233

积分

金牌会员

积分
1233
发表于 2024-2-20 13:41:35 | 显示全部楼层
那有没有"%bd,"这样的打印格式?



点评

你这个问题我也遇到了,是看冲哥STC32视频,但我用的是STC8H的实验箱,printf老是出问题,好像是C51导致的,你可以试试bd,bu,hd  发表于 2024-2-22 22:18
回复 支持 反对

使用道具 举报 送花

14

主题

33

回帖

216

积分

中级会员

积分
216
发表于 2024-3-4 23:26:03 来自手机 | 显示全部楼层
神农鼎 发表于 2023-6-24 16:36
19.6.4                 利用ADC第15通道测量外部电压或电池电压
STC8H系列ADC的第15通道用于测量内部固定 ...

利用15通道测量外部电压有没有汇编的参考代码?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:378
  • 最近打卡:2025-05-01 07:48:27

43

主题

336

回帖

591

积分

高级会员

积分
591
发表于 2024-3-5 12:53:01 | 显示全部楼层
最过一直用的就是给VREF接2.5用TL431 误差在1mV以内。
不过现在为了提高速度采样由1000次改成了200次后出现很大的差别成了10mV或更大了的精度了求解决办法。
回复 支持 反对

使用道具 举报 送花

2

主题

4

回帖

32

积分

新手上路

积分
32
发表于 2024-3-26 21:35:18 | 显示全部楼层
这里输出电压到串口是输出到哪里啊?输出的是数字量吗
截图202403262134331714.jpg

点评

2字节16进制电压值,单位mV。  详情 回复 发表于 2024-3-26 23:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-3-26 23:34:20 | 显示全部楼层
lil*** 发表于 2024-3-26 21:35
这里输出电压到串口是输出到哪里啊?输出的是数字量吗

2字节16进制电压值,单位mV。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2024-09-30 23:22:51

0

主题

118

回帖

248

积分

中级会员

积分
248
发表于 2024-3-27 09:07:46 | 显示全部楼层
专业的知识
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:419
  • 最近打卡:2025-05-01 07:24:50

4

主题

511

回帖

1991

积分

金牌会员

积分
1991
发表于 2024-4-11 11:05:01 | 显示全部楼层
大侠们,帮找错误来,用ADC控制LED闪烁延时的例子
#include <STC32G.H>

typedef unsigned char u8;                                        //unsigned char 用 u8 表示
typedef unsigned int u16;                                        //unsigned int 用 u16 表示
typedef unsigned long int u32;                //unsigned long int 用 u32 表示

#define MAIN_Fosc  35000000UL                //定义主频 35MHz,请按实际频率修改(用于delay函数自适应主频)

#define ON         0                                //定义0 为 开
#define        OFF        1                                //定义1 为 关

sbit LED1 = P2^0;                //引脚定义:LED1->P20
P2M1 = 0x00;P2M0 = 0x00;                //设置P2口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出

sbit ADC_PIN=P1^0;//定义ADC引脚
P1M1 = 0xFF;P1M0 = 0x00;                //设置P1口为高阻输入模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出

void init_adc()//初始化ADC
        {
    ADC_CHS = 0x00; // 设置ADC引脚为输入P1^0
    ADC_CONTR = 0x80; // 开启ADC,使用内部参考电压  
  }


unsigned int read_adc();    // 读取ADC值
void delay(unsigned int ms);  // 延时函数


unsigned int read_adc() // 读取ADC值
        {
    unsigned int adc_value;
                ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xf0) | channel; //设置ADC转换通道
    ADC_START = 1;//启动ADC转换
    _nop_();// 等待转换完成
    _nop_();
    _nop_();
    _nop_();// 等待转换完成
    while(ADC_FLAG == 0);   //wait for ADC finish 结束转换
    ADC_FLAG = 0;     //清除ADC结束标志
    adc_value =(((u16)ADC_RES << 8) | ADC_RESL);// 读取ADC值
                return adc_value;
}
// 延时函数
void delay(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
                {
        for (j = 0; j < 110; j++)
                        {
       _NOP_();}
    }
}

void main(void)
{
          WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度
       
                init_adc(); // 初始化ADC
          unsigned int adc_value;
    while (1)
                  {
       adc_value = ADC_RESL(); // 读取ADC值
       LED1 = ON;
                         delay(adc_value); // 根据ADC值控制延时
                         LED1 = OFF;
                         delay(adc_value); // 根据ADC值控制延时
      }
}       

点评

连个问题描述都没有,我们无法猜测你的程序有什么问题。  详情 回复 发表于 2024-4-11 16:49
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 20:04 , Processed in 0.768576 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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