完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
stc ADC例子
//假定测试[color=rgb(68, 68, 68) !important]芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" #define FOSC 12000000L //#define BAUD 9600 typedef unsigned char BYTE; typedef unsigned int WORD; sfr AUXR = 0x8e; //辅助寄存器 sfr ADC_CONTR = 0xBC; //ADC控制寄存器 sfr ADC_RES = 0xBD; //ADC高8位结果 sfr ADC_LOW2 = 0xBE; //ADC低2位结果 sfr P1ASF = 0x9D; //P1口第2功能控制寄存器 #define ADC_POWER 0x80 //ADC[color=rgb(68, 68, 68) !important]电源控制位 #define ADC_FLAG 0x10 //ADC完成标志 #define ADC_START 0x08 //ADC起始控制位 #define ADC_SPEEDLL 0x00 //540个时钟 //#define ADC_SPEEDL 0x20 //360个时钟 //#define ADC_SPEEDH 0x40 //180个时钟 //#define ADC_SPEEDHH 0x60 //90个时钟 //sfr P0=0x80; sfr P0M1=0x93; sfr P0M0=0x94; //sfr P1=0x90; sfr P1M1=0x91; sfr P1M0=0x92; //sfr P2=0xA0; sfr P2M1=0x95; sfr P2M0=0x96; //sfr P3=0xB0; sfr P3M1=0xB1; sfr P3M0=0xB2; /*---------------------------------*/ void port_mode() // 端口模式 { P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00; } void InitADC(); BYTE GetADCResult(BYTE ch); void Delay(WORD n); void ShowResult(BYTE ch); void main() { // unsigned int a; port_mode(); InitADC(); //初始化ADC while (1) { //ShowResult(0); //显示通道0 P0=GetADCResult(1);//显示通道1 // ShowResult(2); //显示通道2 //ShowResult(3); //显示通道3 //ShowResult(4); //显示通道4 // ShowResult(5); //显示通道5 //ShowResult(6); //显示通道6 //ShowResult(7); //显示通道7 } } /*---------------------------- //发送ADC结果到PC void ShowResult(BYTE ch) { SendData(ch); //显示通道号 SendData(GetADCResult(ch)); //显示ADC高8位结果 // SendData(ADC_LOW2); //显示低2位结果 } ----------------------------*/ //读取ADC结果 BYTE GetADCResult(BYTE ch) { ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); //等待4个NOP _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG)); //等待ADC转换完成 ADC_CONTR &= ~ADC_FLAG; //Close ADC return ADC_RES; //返回ADC结果 } /*---------------------------- 初始化ADC ----------------------------*/ void InitADC() { P1ASF = 0xff; //设置P1口为AD口 ADC_RES = 0; //清除结果寄存器 ADC_CONTR = ADC_POWER | ADC_SPEEDLL; Delay(2); //ADC上电并延时 } /*---------------------------- 软件延时 ----------------------------*/ void Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } |
|
相关推荐
|
|
1330 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1263 浏览 3 评论
2430 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1416 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1847 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 10:20 , Processed in 0.494512 second(s), Total 67, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号