完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是STC给的一个例子,该如何读通道一的数据我打算去测一个24V电压。
#include "stc12c5a60s2.h" #include "intrins.h" #define FOSC 18432000L #define BAUD 9600 typedef unsigned char BYTE; typedef unsigned int WORD; /******************************************************************** 初始化设置 *********************************************************************/ sfr ADC_CONTR = 0xBC; //ADC 控制寄存器 sfr ADC_RES = 0xBD; //ADC 转换结果寄存器 sfr ADC_LOW2 = 0xBE; //ADC 低2位结果寄存器 sfr P1ASF = 0x9D; //Pl口模拟功能控制寄存器 /******************************************************************** ADC 数据转换函数 *********************************************************************/ #define ADC_POWER 0x80 //ADC 电源控制位 #define ADC_FLAG 0x10 //ADC 转换结束标志位 #define ADC_START 0x08 //ADC 开始转换控制位 #define ADC_SPEEDLL 0x00 //420 个时钟周期转换一次 #define ADC_SPEEDL 0x20 //280 个时钟周期转换一次 #define ADC_SPEEDH 0x40 //140 个时钟周期转换一次 #define ADC_SPEEDHH 0x60 //70 个时钟周期转换一次 /******************************************************************** 延时函数 *********************************************************************/ void Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } /******************************************************************** 串口初始化 *********************************************************************/ void InitUart() { SCON = 0x50; TMOD = 0x20; TH1 = TL1 = 0xfd; TR1 = 1; } /******************************************************************** 串口数据输出函数 *********************************************************************/ void SendData(BYTE dat) { while (!ti); //等待数据 TI = 0; //清零标志位 SBUF = dat; //发送数据 } /******************************************************************** ADC 初始化 *********************************************************************/ void InitADC() { P1ASF = 0xff; //设置P1口为开漏模式,使用AD功能 ADC_RES = 0; //AD数据寄存器清空 ADC_CONTR = ADC_POWER | ADC_SPEEDLL; //打开AD电源,转换周期420 Delay(2); //延时 } /******************************************************************** ADC 数据转换函数 *********************************************************************/ BYTE GetADCResult(BYTE ch) { ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//开始转换 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期 while (!(ADC_CONTR & ADC_FLAG));//等待转换结束 ADC_CONTR &= ~ADC_FLAG; //关闭AD转换 return ADC_RES; //返回数据 } /******************************************************************** 编辑数据函数 *********************************************************************/ void ShowResult(BYTE ch) { SendData(ch); //发送显示通道 SendData(GetADCResult(ch)); //发送对应通道的数据 // SendData(ADC_LOW2); //如果你想显示10位结果,选择下一行 } /******************************************************************** 主函数 *********************************************************************/ void main() { InitUart(); //串口初始化 InitADC(); //AD转换初始化 while (1) { ShowResult(0); //显示第一通道的数值 ShowResult(1); //显示第二通道的数值 } } |
|
相关推荐
2个回答
|
|
这就是通道一的数据啊 BYTE GetADCResult(BYTE ch) { ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//开始转换 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期 while (!(ADC_CONTR & ADC_FLAG));//等待转换结束 ADC_CONTR &= ~ADC_FLAG; //关闭AD转换 return ADC_RES; //返回数据 } |
|
|
|
我定义个变量 uint vin; vin=BYTE GetADCResult(0); 用keli 编译不对 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
632 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
671 浏览 0 评论
772 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1340 浏览 0 评论
1166 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12057 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 02:05 , Processed in 0.612342 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号