打印

求助!!单片机ad转换,但是改变模拟信号时输出结果不变

[复制链接]
1256|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
单片机ad转换,采集电压信号,再通过串口输出,ad用的adc0809。但是改变模拟信号输出时结果不变,模拟信号用电位器产生,用串口调试助手观察,但是调节电位器,显示结果始终不变,始终为5V左右的最大值
地址线ABC三脚接地,模拟量从adc0809的IN0口输入,图没改过来,Protues中单片机ALE口没法输出时钟信号,没办法仿真,串口部分测试了,没有问题,感觉是AD部分不工作,但是找不到原因
C程序代码:
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int

sbit ST=P1^0;
sbit EOC=P1^1;
sbit OE=P1^2;
float ad_vo;
uchar tmclk,pau,flag_tm,a,flag_uart,flag_on,ad_val,A1,A2,A3;

void init()
{
ST=0;
OE=0;
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET0=1;
SCON=0x50;
PCON=0x00;
EA=1;
ES=1;
}

uchar get_ad() ///ad采集
{
uchar adval;
ST=0;
_nop_();
ST=1;
_nop_();
ST=0;
P1=0xff;
OE=1;
adval=P1;
OE=0;
return adval;
}

void main()
{
init();
while(1)
{
if(flag_uart==1) ///状态提示
{
flag_uart=0;
ES=0;
TI=1;
switch(flag_on)
{
case 0:puts("on\n");
TR0=1;
break;
case 1:printf("off\n");
TR0=0;
break;
case 2:puts("Error\n");
break;
}
while(!TI);
TI=0;
ES=1;
}
if(flag_tm==1) ////输出结果
{
flag_tm=0;
ad_val=get_ad();
ad_vo=(float)ad_val*5.0/256.0;
ES=0;
TI=1;
printf("%fV\n",ad_vo);
//SBUF=ad_val;
while(!TI);
TI=0;
ES=1;
}
}
}

void timer0() interrupt 1 ////定时1S
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
pau++;
if(pau==20)
{
pau=0;
flag_tm=1;
}

}
void ser() interrupt 4 //////接收上位机指令
{
RI=0;
a=SBUF;
flag_uart=1;
if(a==1)
flag_on=0;
else if(a==2)
flag_on=1;
else
flag_on=2;
}

无标题.jpg (122.54 KB )

无标题.jpg

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝