lhj
发表于 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这样,是怎么回事
咫尺天涯
发表于 2024-2-20 12:22:43
学习学习
电子DIY小家
发表于 2024-2-20 13:32:29
lhj 发表于 2024-2-20 11:34
你好,神农鼎。
printf打印有没有%bd这样的表示?我设置变量是U8时,%bd打印出来是1,2,3,4,5,6这样循 ...
%d对应的是int变量,直接打印u8的话需要强制转化一下,例如
变量定义位u8 dat;
可以调用printf("%d",(int)dat);
lhj
发表于 2024-2-20 13:41:35
那有没有"%bd,"这样的打印格式?
alanma
发表于 2024-3-4 23:26:03
神农鼎 发表于 2023-6-24 16:36
19.6.4 利用ADC第15通道测量外部电压或电池电压
STC8H系列ADC的第15通道用于测量内部固定 ...
利用15通道测量外部电压有没有汇编的参考代码?
qepuemc
发表于 2024-3-5 12:53:01
最过一直用的就是给VREF接2.5用TL431 误差在1mV以内。
不过现在为了提高速度采样由1000次改成了200次后出现很大的差别成了10mV或更大了的精度了求解决办法。
lili11
发表于 2024-3-26 21:35:18
这里输出电压到串口是输出到哪里啊?输出的是数字量吗
梁工
发表于 2024-3-26 23:34:20
lili11 发表于 2024-3-26 21:35
这里输出电压到串口是输出到哪里啊?输出的是数字量吗
2字节16进制电压值,单位mV。
ageway
发表于 2024-3-27 09:07:46
专业的知识{:4_250:}
科学妞妞
发表于 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_Fosc35000000UL //定义主频 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值控制延时
}
}