AD转换程序没有问题 Display是P1 仿真后P1连接的二极管显示AD转换的结果是对的 但是用这个值计算 结果是0 比如:ad输入4V P1显示为204 正确 ,用P1的值乘100再除51 应该得400 但是结果为0;这是为什么 一下是代码
/*************************************************
数据比较
*************************************************/
void data_compare()
{ uchar dd;
Display=ReadADCH0();
dd=Display;
height_real=(dd*100)/51;
P0=height_real;
if(height_real<height_min)
{
BELL=1;
MOTOR1=1;
}
/* if(height_real>=height_max)
{
BELL=1;
MOTOR2=1;
}
if(height_real==height_set)
{
BELL=0;
MOTOR1=0;
MOTOR2=0;
}*/
}
/*************************************************
主函数
*************************************************/
void main()
{
init();
while(1)
{
data_compare();
}
}
height_real是int型的 我写P0=height_real;是想看看P0有没有值 这句没有用 主要是height_real比较的那句 一直不对 height_real值一直是0
int dd;
Display=ReadADCH0();
dd=Display;
height_real=(dd*100)/51;
if(height_real<height_min)
{
BELL=1;
MOTOR1=1;
}
改过后还是不行 那个height_real总是0
昨天用浮点数还是不行 同学说51运算浮点数有点问题 就改成整形 结果还不对
这样吧,直接给dd赋值10,然后执行height_real=(dd*100)/51,再看height_real的值是多少
追问这样算的是没问题的 应该是我ad0832程序的问题? 但是Display显示的是没问题的啊 、还有您看那个截图 P1口引脚有灰色的不确定电平是不是有问题
追答这样没问题,那就应该是ReadADCH0();函数的问题了。我很少用这个仿真软件,灰色应该是因为没有加限流电阻的关系,把二极管加个限流电阻试试
追问显示的是没问题 我输入是4v P1显示值204 8位精度ad 值是没问题的 关键就是height_real算出来是0
追答unsigned int dd;
Display=ReadADCH0();
dd=Display;
height_real=(dd*100)/51;当dd = 204的时候,这样计算出来也是0吗?
如果height_real也是 unsigned int类型的
P0=height_real;P0应该是height_real的低8位,也就是0x90啊
对啊 就是0 很是郁闷 就算是204 算出来400 P0也是有值的啊 不可能为0啊 我把输入改成2V 算出来应该是200 不会超 也是0 大神 加一下QQ吧 细谈好吧
本回答被提问者采纳51单片机和ADC0809配合时出现错误现象,求解
你把adc的CLK接单片机的ALE 试试。定时器 就 不用了。我之前遇到的问题是这样的(可能和你有点不一样):用proteus 仿真 是好的(也用的是定时器控制CLK)但是,实际线路中,开机第一次转换是好的,接下来改变电位器就没反应了。改变电位器后,再重启就又有一次好的(此时电位器的值)。下面是...
我这个51单片机AD转换电路错在哪里呢,怎么老是运行不起
仿真图中,用单片机的ALE输出信号,又用D触发器分频后送到ADC0809上,要是实物这种做法还可以。但是,用proteus 仿真就不行了,单片机的ALE是没有信号输出的,所以ADC电路无时钟信号。其实,仿真时,可以直接用时钟信号的,在proteus 左边工具栏中选信号源,就是S字母那个,从中选DCLOCK,就是时钟脉冲信...
51单片机AD转换不稳定
1.是不是电平有跳动的不稳定,比如输入电平抖动(干扰导致),你只是肉眼没看出来而已,所以认为它是稳定的。这个解决方法如果输入是稳定电压(直流),那就在电压之间加上个电容就完事了。2.是不是输入电压的范围超了?如果是范围超了,加个分压电路,然后在单片机程序里面再按比例的增加就行了。
51 单片机,写的一个与电脑通讯的小程序,用 ISP 烧录入 STC12C5608AD...
因为你下载程序时选择单片机使用的是内部时钟 内部时钟是不稳定的,会影响到你的波特率,波特率不对,当然不能通讯了
c51单片机中AD转换数值处理问题 二进制能否与十进制数字直接相乘得到十...
那么你的问题 如果你把值通过pc显示 那么 pc会自己类型转换 成你要的 如果你用液晶显示 那么恭喜你 你要自己做一个小数显示 或者转换成字符串 如果你用串口调试工具 那么看这个工具是否支持 再看你的例子 0x4b*5\/255 能行 但是注意类型 类型不对小心 单片机会取整 一般 用a*1....
普中的51单片机stc90C516RD+中的AD转换怎么用(买了一个风速传感器)_百度...
对于使用51单片机STC90C516RD+进行AD转换的问题,您可以按照以下步骤进行操作:1. 连接传感器:将风速传感器与单片机进行连接。通常,风速传感器会有两个输出引脚,其中一个是信号引脚,用于连接到单片机的ADC输入引脚。2. 配置引脚:在编程之前,您需要将相应的引脚配置为ADC输入模式。通过查阅STC90C516RD+...
adc0809转换的一些问题(与51单片机配合)
1 、地址是人为定义的,在51单片机中P0口是低位地址8位与数据口8位分时复用,所有连接在地址总线上的器件,都必须有一个地址区间(地址块),例如,RAM 62256需要32Kbyte,0000H--7FFFH,就是一个片选信号。ad转换器需要一个,经过地址译码器,译码后的“区间”,即储存器的片选信号,译码器可以分成...
求大神帮我看看下面关于51单片机中AD转换,使用的是ADC0808,为什么显示...
端口预读必须先 全置 高电平,然后读 信号
51单片机AD转换的问题,求大神解答。
就是个语法 dat<<=1 ==> dat=dat<<1;dat|=DOUT ==> dat=dat|DOUT
51单片机接TLC2543进行A\/D转换输出数据末两位一直跳动
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一...