完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
写了个程序使用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 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 xianshi(a1,a2,0); sum+=adpressf; delay1ms(1); xianshi(a1,a2,0); } return (uint)(sum/N); } 不使用浮点数测试发现单片机运行确实比以前要快,主要体现在以前有浮点数时有按键反应迟钝,而现在没有了,但是数码管显示有问题,压力最小等于0时,数码管显示0但是闪烁 |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11764 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 06:04 , Processed in 0.470865 second(s), Total 38, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号