标题:
能帮我看看我这8位的AD采集单片机程序为什么不成功吗
[打印本页]
作者:
如痴百感生
时间:
2019-9-28 16:44
标题:
能帮我看看我这8位的AD采集单片机程序为什么不成功吗
本帖最后由 如痴百感生 于 2019-9-28 16:58 编辑
1.PNG
(10.32 KB, 下载次数: 78)
下载附件
2019-9-28 16:44 上传
2.PNG
(21.6 KB, 下载次数: 74)
下载附件
2019-9-28 16:44 上传
计算部分弄错了 ,,应该是v=b*5/256;但结果还是不对,,没问题了 自己把自己弄混了 抱歉
作者:
csmyldl
时间:
2019-9-28 22:33
能自己马上发现错误并改正,真厉害!
作者:
shwghsy
时间:
2020-2-29 16:42
#include ”stc15w4k.h"
#include <stdio.h> // 为使用KEIL自带的库函数printf而加入
加入串口可以在PC端实时查看电压数据
unsigned int ADC_P11() // ADC转换函数
{
unsigned int i; // 用于软件延时程序
unsigned char status; // 用于判断AD转换结束的标志
unsigned int AD_Dat=0; // 10位AD转换值
unsigned char Tmp; // 临时变量用于将AD转换出来的2个字节合成一个字节
ADC_CONTR|=0x80; // 开AD转换电源,第一次使用时要打开内部模拟电源
for (i=0;i<10000;i++); // 适当延时等待AD转换供电稳定,一般延时1ms以内即可,为了缩短AD
// 调用时间,可把这2行剪切到主程序中去。
P1ASF|=0x02; // 选择P1.1作为AD转换通道,0x02= 0000 0010
ADC_CONTR=0xE1; // 选择P1.1作为AD转换通道,最高转换速度,清转换完成标志。
//for (i=0;i<1000;i++); // 如果是多通道模拟量进行AD转换,则更换AD转换通道后要适当延时,
// 使输入电压稳定,延时量取20μs~200μs即可,与输入电压源的内阻有关,如果输入电压信号源的内
// 阻在10K以下,可不加延时,如果是单通道模拟量转换,则不需要更换AD转换通道,也不需要加延时。
ADC_CONTR|=0x08; // 启动 A/D 转换,ADC_START=1。
status=0;
while(status==0) // 等待AD转换结束。
{
status=ADC_CONTR&0x10; // 判断ADC_FLAG是否等于1,0x10=0001 0000B。
}
ADC_CONTR&=0xE7; // 将ADC_FLAG清0, 0xE7=1110 0111B,ADC_FLAG=0,ADC_START=0。
AD_Dat = ADC_RES; // 默认高字节高8位。
AD_Dat <<= 2;
Tmp = ADC_RESL; // 默认低字节低2位。
Tmp &= 0x03; // 屏蔽无关位
AD_Dat |= Tmp; // 高低字节拼接成一个10位数。
return AD_Dat;
}
mian函数下
float Vin; // 存放计算出来的外部输入电压
unsigned int ADvalue; // 存放AD转换返回的结果
ADvalue=ADC_P11(); // 采样P1.1口模拟输入电压 电瓶正极电压
Vin=VCC*ADvalue/1023; // 注意是1023才正确
printf("%.3f ",Vin); //输出电压显示。
作者:
lele5211314
时间:
2020-2-29 17:07
什么ADC也不说清楚
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1