完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
(1)直接输出AD值是对的。3.1V对应输出9D (2)AD均值 for(m=0;m<5;m++) 应该自加5次的呀(m=0,1,2,3,4),但是除以5就是不对,3.1V输出C4,大了,要除以6。 也试过m<10,还是C4 /********************************************************************************************** 项目:5410AD AD转换发送给串口 功能:P1.0 AD采样后将值发送给串口 设计:robin_chen559 日期: 2013.12.18 备注:Fosc=11.0592M **********************************************************************************************/ #include #include #define uint unsigned int #define uchar unsigned char ***it LED_G = P1^6; //指示LED uint AD_Res=0; //函数声明 void Delay_MS(uint delay); //延时函数声明 void AD_INIT(void); //AD初始化 float AD_Result(void); //AD结果程序 void InitUart(); //串口初始化程序 void Sent_Data(uchar dat); //串口发送数据 //毫秒延时程序 void Delay_MS(uint delay) { uint dy; while(delay--) { for(dy=0;dy<600;dy++); } } //AD初始化 void AD_INIT(void) { P1M0 = 0x01; // 0000 0001 P1M1 = 0xff; // 1111 1111 P1^0 11开漏模式,AD使用。其余口推挽 ADC_CONTR|=0x80; //ADC_CONTR 1000 0000 开启ADC电源 Delay_MS(5); //延时1mS待上电稳定 } //AD转换 float AD_Result(void) { uchar m; ADC_DATA = 0x00; //清除AD转换高8位结果 ADC_LOW2 = 0x00; //清除AD转换低2位结果 for(m=0;m<5;m++) //AD结果5次自加 { ADC_CONTR |= 0x08; // 启动AD转换 Delay_MS(1); // 等待输入电压稳定 while(1) // 等待AD转换完成 { if( (ADC_CONTR&0x10) == 0x10 ) //AD_FLAG 为1,跳出循环 { break ; } } AD_Res = (AD_Res + ADC_DATA); ADC_CONTR = 0xe0; // 清除转换标志位。关闭电源 } AD_Res = AD_Res/6; //求5次AD结果均值 return (AD_Res) ; //返回AD转换结果 } //串口初始化程序 void InitUart() // 初始化,定义串口的波特率 { PCON = 0x00; //SMOD =0,串口波特率正常 TMOD = 0x20; //定时器1,模式2,八位自动重装 SCON = 0x42; //5a,方式1,串行口10位异步通信 TH1 = 0xFD; //SMOD =0,fd=0xfd,9600波特率 TL1 = 0xFD; TR1 = 1; //启动定时器 } //串口数据传送 void Sent_Data(uchar dat) { while (!ti); TI=0; SBUF= AD_Res ; } //主程序 void main() { AD_INIT() ; //AD初始化 InitUart() ; //串口初始化 while(1) { AD_Result(); //AD处理程序 Sent_Data(); //串口发送AD结果 LED_G = 0; Delay_MS(300); LED_G = 1; Delay_MS(300); } } (3)值刚好,直接输出ADRES/除以m+1 |
|
相关推荐
1 个讨论
|
|
自加之前没有变量清零,下一次循环自加的时候多加了一次
添加AD_Res=0;,程序结构有问题 for(m=0;m<5;m++) //AD结果5次自加 { ADC_CONTR |= 0x08; // 启动AD转换 Delay_MS(1); // 等待输入电压稳定 while(1) // 等待AD转换完成 { if( (ADC_CONTR&0x10) == 0x10 ) //AD_FLAG 为1,跳出循环 { break ; } } AD_Res = (AD_Res + ADC_DATA); ADC_CONTR = 0xe0; // 清除转换标志位。关闭电源 } AD_Res = AD_Res/6; //求5次AD结果均值 return (AD_Res) ; //返回AD转换结果 } |
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11770 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 10:49 , Processed in 0.592381 second(s), Total 44, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号