本帖最后由 深圳湾 于 2023-3-8 20:29 编辑
求助:while (!(ADC_CONTR & 0x20)),这句执行不过去,可能是什么原因,是不是那里写错了
- void acd_init()
- {
- / *设置电池电压检测IO(P1.3)为高阻输入模式*/
- P1M1 |= 1 << 3;
- P1M0 &= ~(1 << 3);
-
- ADCTIM = 0x3f; // 设置ADC内部时序
- ADCCFG = 0x2f; // 设置ADC时钟为系统时钟/2/16(最慢),ADC数据为右对齐
- ADC_CONTR = 0x80; // 使能ADC(开启ADC电源)
-
- ADC_CONTR &= 0xf0; // 设置ADC通道前先清空寄存(ADC通道配置位在ADC_CONTR寄存的低4位)
- ADC_CONTR |= 0x03; // 使用ADC3通道,P1.3端口
- }
-
- unsigned long adc_reader()
- {
- ADC_CONTR |= 0x40; // 启动ADC控制器
- _nop_();
- _nop_();
-
- / *启动ADC后,要等待ADC转换完成,才能得到ADC数据*/
- while (!(ADC_CONTR & 0x20)) ;
-
- ADC_CONTR &= ~0x20; /*ADC转换完成要手动清除 ADC转化完成标志位*/
- return ((ADC_RES << 8) + ADC_RESL);
复制代码
|