48
185
2322
金牌会员
//------------------------------------------------------- #include <STC8H.h> #define FOSC 11059200UL #define BRT (65536 - (FOSC / 115200+2) / 4) bit busy; //-------------------------------------------------------- void delay_1ms(u16 value) //@22.1184MHz { u8 i,j; while(value>0) { i = 29; j = 183; do { while (--j); } while (--i); value--; } } //----字节发送函数--------------------------------------- /* void SendByte(u8 D) { SBUF=D; while(!TI); TI=0; }*/ //------------------------------------------------------ void ADC_Init() { P1M0 = 0x00; P1M1 = 0x02; //设置P1.1为高阻模式(ADC 口) P1IE = 0xfd; //关闭P1.1数字通道 ADCTIM = 0x3f; //设置 ADC 内部时序 ADCCFG = 0x2f; //设置 数据存放为高4位+低8位模式、ADC 时钟为系统时钟/2/16 ADC_CONTR = 0x80; //使能 ADC0 模块 delay_1ms(5); } //------------------------------------------------------------------- void ADCRead() { ADC_RES = 0; ADC_RESL = 0; ADC_CONTR=0xc1; //启动AD转换ADC_POWER=1、ADC_START=1 delay_1ms(5); while ((ADC_CONTR & 0x20)==0); //等待ADC转换标志ADC_FLAG=1 ADC_CONTR &= ~0x20; //清除标志 //return ((u16)ADC_RES * 256 + (u16)ADC_RESL); } //--------------------------------- void UartIsr() interrupt 4 { if (TI) { TI = 0; busy = 0; } if (RI) { RI = 0; } } //-------------------------------- void UartInit() { SCON = 0x50; TMOD = 0x00; TL1 = BRT; TH1 = BRT >> 8; TR1 = 1; AUXR = 0x40; busy = 0; } //---------------------------------- void UartSend(char dat) { while (busy); busy = 1; SBUF = dat; } //====主函数=========================================== void main() { GPIO_set(); //预置所有I/O口全部为准双向口 EAXSFR(); ADC_Init(); UartInit(); ES = 1; EA=1; while(1) { ADCRead(); UartSend(ADC_RES); //串口输出采样结果高8位 UartSend(ADC_RESL);//串口输出采样结果低8位 delay_1ms(1000); } } 复制代码
使用道具 举报 送花
116
2748
6932
版主
王*** 发表于 2024-2-19 13:06 首先应该尝试较短时间的连续发送adc测量数值,看看是否有波动。 如果存在波动,应该使用均值滤波算法对一段 ...
乐此*** 发表于 2024-2-19 13:17 多谢你的回复与指点,我会根据你的建议继续各种尝试的,先谢了。
王*** 发表于 2024-2-19 13:22 如果没有测量ADC时间的要求,可以将ADCTIM设置成0xff试试,先从硬件下手,看看是否有有所改变。 使用软件 ...
76
6682
1万
超级版主
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-9-3 14:29 , Processed in 0.125146 second(s), 92 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.