STC 51单片机63——关于STC8H的ADC通道切换问题

使用STC8H时,发现在ADC中断中只能使用一个通道,即使切换了通道,那么数据要不为0,要不就是原先通道的电压。查阅手册,内容并不多,没有发现专门提到的问题。只能去试试,最后发现在ADC中断中,切换通道时,必须先关闭ADC,否则就会失败。以下代码:

void IOInit()

{

P0M0 = 0x00;

P0M1 = 0x07; //P0.0、P0.1、P0.2为ADC

P1M0 = 0x00;

P1M1 = 0x00;

P2M0 = 0x00;

P2M1 = 0x00;

P3M0 = 0x00;

P3M1 = 0x00;

P4M0 = 0x00;

P4M1 = 0x00;

P5M0 = 0x00;

P5M1 = 0x00;

P1PU |= 0x03; //使能P1.0、P1.1的内部4.1k上拉电阻

// P1NCS |= 0x03; //禁止施密特触发

// P1SR &= ~0x03; //电平转换速度快

// P1DR &= ~0x03; //增强电流

// P1IE |= 0x01; //数字输入

}

volatile u16 AdcChannel=0x48; //P0.0口AD转换

void AdcInit(void)

{

P_SW2 |= 0x80; //使能访问扩展RAM区特殊功能寄存器XFR

ADCTIM = 0xbf; //设置ADC内部时序,32个ADC工作时钟

ADCEXCFG = 0x07; //16次AD平均值,进入中断

P_SW2 &= 0x7f; //禁止访问

ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16,ADC数据右对齐

ADC_CONTR = 0x80; //使能ADC模块

EADC = 1; //使能ADC中断

EA = 1;

ADC_CONTR |= AdcChannel; //启动P0.0口AD转换

}

// 交叉采集P00和P02的ADC数据,必须先关闭ADC!

u16 AdcValue=0,Adc8=0,Adc10=0;

u16 Ai=0,Aj=0,An=20; //An<300。如果An是u32,那么计算速度会很慢。

//只做了P0.0的ADC

void ADC_Isr() interrupt 5 //

{

ADC_CONTR=0; //选择不同的通道,需要先关闭ADC,不然转化会出错!!!

AdcValue = (ADC_RES<<8)+ADC_RESL; //读取ADC结果

if(AdcChannel==0x48){

Adc8=Adc8+AdcValue;

AdcChannel=0x4a;

}

else{

Adc10=Adc10+AdcValue;

AdcChannel=0x48;

}

Ai++;

if(Ai>An){

Ai=0;

Adc8=Adc8/An*2;

Adc10=Adc10/An*2;

// ShowU16(Adc8);

// ShowU16(Adc10);

// SendU8('\r');

// SendU8('\n');

if(Adc8>50){ //注意:该阈值可能随代码的增多而改变。

Stop1_2=5;//限制步进电机转动

STBY1=0;//步进电机1驱动失能;

STBY2=0;//步进电机2驱动失能;

}

// if(Adc10>270){ //电推杆检测效果不好,不建议使用

// Stop3_4=5;//限制推杆电机运动

// STBY3=0;//推杆电机驱动失能;

// }

Adc8=0;

Adc10=0;

}

ADC_CONTR=0x80;

ADC_CONTR |= AdcChannel; //继续AD转换

}

相关推荐
Zevalin爱灰灰35 分钟前
编程技巧(基于STM32)第一章 定时器实现非阻塞式程序——按键控制LED灯闪烁模式
stm32·单片机·嵌入式硬件
红花与香菇2____2 小时前
【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
笔记·嵌入式硬件·学习·pcb设计·cadence·pcb工艺
Jerry.yl3 小时前
关于 BK3633 上电时受串口 UART2 影响而无法启动的问题说明
嵌入式硬件·物联网·bk3633
苏慕TRYACE4 小时前
RT-Thread+STM32L475VET6实现红外遥控实验
stm32·单片机·嵌入式硬件·rt-thread
小幽余生不加糖5 小时前
deepseek帮我设计物理量采集单片机口保护电路方案
单片机·嵌入式硬件
Ronin-Lotus7 小时前
蓝桥杯篇---IAP15F2K61S2串口
单片机·嵌入式硬件·职场和发展·蓝桥杯·c·iap15f2k61s2
xiaohai@Linux7 小时前
ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)
c语言·嵌入式硬件·tcp/ip·wifi·esp32
yyqzjw8 小时前
【STM32】外部时钟|红外反射光电开关
stm32·单片机·嵌入式硬件
charlie1145141918 小时前
(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
c语言·stm32·单片机·嵌入式硬件·学习·教程
苏慕TRYACE8 小时前
RT-Thread+STM32L475VET6——ADC采集电压
stm32·单片机·嵌入式硬件·rt-thread