STC8H4K64TL
今天遇到1个ADC读取的问题。
设置,ADCEXCFG,自动多次取平均:测内部1.19V正常,但是测外部ADC,数值一直不对。结果加个延时好了。
实测:ADCEXCFG配置<-到->启动AD转换的时间间隔需加到60ms,读取数值才正常。
- ADCEXCFG |= 0x0F;//即16次采样后取平均值,
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms(); Delay1ms();
- // 启动AD转换
- ADC_CONTR |= 0x40; // ADC_START=1
- _nop_();
- _nop_();
- _nop_();
- while (!(ADC_CONTR & 0x20)); // 查询ADC完成标志
- ADC_CONTR &= ~0x20; // 清完成标志
复制代码
初始化
- //ADC初始化
- P_SW2 |= 0x80; //使能访问XFR
- ADCTIM = 0x3f; //设置ADC内部时序 转换时间选择
- P_SW2 &= 0x7f;
- ADCCFG = 0x2f; //右对齐,设置ADC时钟为系统时钟/2/16
- ADC_CONTR = ADC_CONTR |0X80|8;
复制代码
解决办法:在没用到ADC_ETR控制脚时,可以提前配置ADCEXCFG
- 更新后的硬件选项为:
- . 系统ISP工作频率: 24.096MHz
- . 内部IRC振荡器的频率: 11.064MHz
- . 掉电唤醒定时器的频率: 35.625KHz
- . 振荡器放大增益使能
- . 用户EEPROM大小被设置为 0.5 K
- . P3.2和P3.3与下次下载无关
- . 上电复位时增加额外的复位延时
- . 复位引脚用作普通I/O口
- . 检测到低压时复位
- . 低压检测门槛电压 : 2.00 V
- . 上电复位时,硬件不启动内部看门狗
- . 上电自动启动内部看门狗时的预分频数为 : 256
- . 空闲状态时看门狗定时器停止计数
- . 下次下载用户程序时,将用户EEPROM区一并擦除
- . 下次下载用户程序时,没有相关的端口控制485
- . 下次下载时不需要校验下载口令
- . 内部参考电压: 1191 mV (参考范围: 1100~1300mV)
- 芯片出厂序列号 : F834C973009963
-
- 单片机型号: STC8H4K64TL
-
- . 用户设定频率: 11.059MHz
- . 调节后的频率: 11.064MHz ( 主时钟分频系数 = 1; )
- . 频率调节误差: 0.043%
复制代码
|