社区
单片机/工控
帖子详情
STC内置ad转换问题
yoyobbs
2010-04-03 12:55:29
我的STC 内置的AD里面,ADC_FLAG是置1了,但是我用串口发送出去的数据总是FF,不知道为什么,哪怕我的电压只有2V,困惑不解啊.
...全文
483
10
打赏
收藏
STC内置ad转换问题
我的STC 内置的AD里面,ADC_FLAG是置1了,但是我用串口发送出去的数据总是FF,不知道为什么,哪怕我的电压只有2V,困惑不解啊.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
freetime-wxj
2010-12-16
打赏
举报
回复
哪位高手在啊???AD芯片怎么写三路输入信号的程序啊
yoyobbs
2010-04-06
打赏
举报
回复
[Quote=引用 5 楼 finder_zhang 的回复:]
我也在用STC的ADC,大家交流一下.
ADC_CONTR=0xe0; //打开ADC,设最快的速度
AUXR |= 0x10; //设置EADCI位为1,允许ADC中断
EADC_SPI=1; //允许ADC与SPI中断
EA=1; //开所有中断
请确定这些中断有打开.
ADC_CONTR |= 0x08; //启动ADC
读值时也要看8个channel……
[/Quote]
你的硬件输入是怎样的,我得到的数据现在跳动很大.
finder_zhang
2010-04-06
打赏
举报
回复
我的跳动也是很大的,误差有十几左右.而且我的CPU与发模拟信号的IC间距做得非常地小.
有资料建议我在ADC输入处接上104的电容,但我试过,效果不明显,我是在内部把数据类加32次后求平均值,才会显出效果来,而效果很好.
hallowwar
2010-04-06
打赏
举报
回复
楼上说的不错,数据跳动就是滤波问题,除了电容之外,可以在程序内部通过数字滤波实现。即求最大可能值。
yoyobbs
2010-04-05
打赏
举报
回复
#include <STC12C5620AD.H>
#define uchar unsigned char
#define uint unsigned int
//sfr P1M0 = 0X91;
//sfr P1M1 = 0X92;
//sfr ADC_CONTR = 0XC5;
//sfr ADC_DATA = 0XC6;
delay(uint t);
//---------------------------------------------------------------------
void init_RS232 (void) // 串口初始化
{
ES = 0; // 禁止串口中断
TMOD = 0x20; // 设置 T1 为波特率发生器
SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验
TH1 = 0xFD; // 18.432MHz 晶振, 波特率 = 9600
TL1 = 0xFD;
RI = 0;
TR1 = 1;
ES = 1; // 允许串口中断
}
//---------------------------------------------------------------------
void Send_Byte(unsigned char one_byte) // 发送一个字节
{
TI = 0; // 清零串口发送中断标志
SBUF = one_byte;
while (!TI);
TI = 0;
}
main()
{
unsigned char AD_finished=0;
init_RS232();
P1M0 = 0X01;
P1M1 = 0X00;
//P1=0X00;
while(1)
{
ADC_CONTR=ADC_CONTR|0X80; //打开AD电源,设置转换速度最快
ADC_CONTR=ADC_CONTR|0X08; //设置转换标志为1,开始转换
delay(2000); //延时
while(!AD_finished)
AD_finished=(ADC_CONTR&0x10);
Send_Byte(ADC_DATA);
ADC_CONTR &= 0XF7;
ADC_DATA=0X00;
}
}
delay(uint t)
{
while(t--);
}
贴出程序,这个程序我调试的时候,在串口里面发现发送的数据很乱,也不像实际传送的电压值.希望达人能指点一二
finder_zhang
2010-04-04
打赏
举报
回复
我也在用STC的ADC,大家交流一下.
ADC_CONTR=0xe0; //打开ADC,设最快的速度
AUXR |= 0x10; //设置EADCI位为1,允许ADC中断
EADC_SPI=1; //允许ADC与SPI中断
EA=1; //开所有中断
请确定这些中断有打开.
ADC_CONTR |= 0x08; //启动ADC
读值时也要看8个channel有没有设对
void ADCInt(void) interrupt 5
{
ADC_CONTR &= 0xef; //清中断标志位
a_u2ADCRxBuf[0] = ((ADC_DATA<<2)+ADC_LOW2); //这样读入ADC值
}
我就是这样,可以读到ADC值的了.10位的,我用的是STC12LE5412AD
kyzf
2010-04-04
打赏
举报
回复
先好好核实下程序,
是否拟对应IO配置成ADC 有问题,
或者你处理ADC转换后的数值有问题,
当然也可能是硬件有问题,
建议先在网上下载一个实验程序,测试下你的单板等硬件,
宇帆
2010-04-03
打赏
举报
回复
应该调试一下,看AD采集那出问题了,还是串口发送出问题了
lbing7
2010-04-03
打赏
举报
回复
看看你的IO配置成什么状态了?
感觉像是ADC的配置不完全
hallowwar
2010-04-03
打赏
举报
回复
FF 说明你的AD采集是满量程的,2V也满量程显然是你的ADC设置正确。ADC_FLAG 置1 说明ADC中断有效,但不见得就是正确的值了。
stc
12c5a60s2
内置
ad
转换
程序加数码管显示.rar_
STC
12C5A60S2-
AD
_
ad
_
stc
12c5a60s2_
stc
12c5a60s2
内置
ad
转换
程序加数码管显示 准确
AD
转换
程序
STC
12C5A60S2
AD
转换
程序由
STC
12C5A60S2
内置
10位
AD
转换
,并尽兴LED显示
单片机有很多种-1.3.第1季第3部分
本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,
STC
51单片机的各系列的特点以及项目中如何选型主控单片机。
shuzidianyabiao.rar_
STC
12
AD
_shuzidianyabiao_单片机_数字电压表 c_电压表
数字电压表由
STC
12
AD
内置
AD
转换
单片机
AD
.zip_
stc
12_
stc
12
ad
stc
12系列单片机做的
AD
转换
程序,使用
内置
特殊功能寄存器完成
单片机/工控
27,374
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章