PICAD采样、数码管显示问题
时间:10-02
整理:3721RD
点击:
写了个程序使用PIC16f1936,有1路AD采用,检测压力传感器,信号0.5-4.5V对应0-10bar,接到单片机运算是0-5V对应0-1023(10位采集精度),所以0.5-4.5V对应数字量就是102.3-920.7再对应0-10bar压力,数码管只显示精度0.1bar,由于第一次在AD转换中使用了浮点数,而单片机不支持,导致运行很慢,后来去掉了浮点数,但是都有问题,请高手看看问题出在那里;
1.使用了浮点数程序:
uint qu_adpress() //AD数据取样
{
uint adpress;
uint adpressf;
GO_nDONE=1; //启动AD
while(GO_nDONE); //检测是否完成
adpress=ADRESH;// 取高8位
adpress=adpress<<8|ADRESL;// AD转换的低8位存在ADRESL寄存器中,高2位存在ADRESH寄存器的低两位中,
adpressf=(adpress-102.3)/102.3*12.5; //0-5V对应数字量0-1023,压力传感器信号0.5-4.5V对应0-10bar,转换数字量后是102.3-920.7对应0-10bar,
adpress=adpressf; //显示转换公式:接收数字量为X, (X-102.3)*1.25/102.3
return (adpress);
}
uint pingjun() //AD取样求平均值,连续取12次后求平均值,
{
uint sum=0;
uchar count=0;
for(count=0;count<N;count++)
{
xianshi(a1,a2,0);
sum+=qu_adpress();
delay1ms(3);
xianshi(a1,a2,0);
}
return (uint)(sum/N);
}
2.不使用浮点数程序:
uint qu_adpress() //AD数据取样
{
uint adpress;
GO_nDONE=1; //启动AD
while(GO_nDONE); //检测是否完成
adpress=ADRESH;// 取高8位
adpress=adpress<<8|ADRESL;// AD转换的低8位存在ADRESL寄存器中,高2位存在ADRESH寄存器的低两位中,
adpress=adpress*10;//AD值乘以10
adpress=(adpress-1023)/1023*125/10;
return (adpress);
}
uint pingjun() //AD取样求平均值,连续取12次后求平均值
{
uint sum=0;
uchar count=0;
for(count=0;count<N;count++)
{
xianshi(a1,a2,0);
sum+=adpressf;
delay1ms(1);
xianshi(a1,a2,0);
}
return (uint)(sum/N);
}
不使用浮点数测试发现单片机运行确实比以前要快,主要体现在以前有浮点数时有按键反应迟钝,而现在没有了,但是数码管显示有问题,压力最小等于0时,数码管显示0但是闪烁
1.使用了浮点数程序:
uint qu_adpress() //AD数据取样
{
uint adpress;
uint adpressf;
GO_nDONE=1; //启动AD
while(GO_nDONE); //检测是否完成
adpress=ADRESH;// 取高8位
adpress=adpress<<8|ADRESL;// AD转换的低8位存在ADRESL寄存器中,高2位存在ADRESH寄存器的低两位中,
adpressf=(adpress-102.3)/102.3*12.5; //0-5V对应数字量0-1023,压力传感器信号0.5-4.5V对应0-10bar,转换数字量后是102.3-920.7对应0-10bar,
adpress=adpressf; //显示转换公式:接收数字量为X, (X-102.3)*1.25/102.3
return (adpress);
}
uint pingjun() //AD取样求平均值,连续取12次后求平均值,
{
uint sum=0;
uchar count=0;
for(count=0;count<N;count++)
{
xianshi(a1,a2,0);
sum+=qu_adpress();
delay1ms(3);
xianshi(a1,a2,0);
}
return (uint)(sum/N);
}
2.不使用浮点数程序:
uint qu_adpress() //AD数据取样
{
uint adpress;
GO_nDONE=1; //启动AD
while(GO_nDONE); //检测是否完成
adpress=ADRESH;// 取高8位
adpress=adpress<<8|ADRESL;// AD转换的低8位存在ADRESL寄存器中,高2位存在ADRESH寄存器的低两位中,
adpress=adpress*10;//AD值乘以10
adpress=(adpress-1023)/1023*125/10;
return (adpress);
}
uint pingjun() //AD取样求平均值,连续取12次后求平均值
{
uint sum=0;
uchar count=0;
for(count=0;count<N;count++)
{
xianshi(a1,a2,0);
sum+=adpressf;
delay1ms(1);
xianshi(a1,a2,0);
}
return (uint)(sum/N);
}
不使用浮点数测试发现单片机运行确实比以前要快,主要体现在以前有浮点数时有按键反应迟钝,而现在没有了,但是数码管显示有问题,压力最小等于0时,数码管显示0但是闪烁