- 打卡等级:以坛为家I
- 打卡总天数:374
- 最近打卡:2025-04-29 08:33:10
高级会员
- 积分
- 978
|
发表于 2024-2-21 13:38:17
|
显示全部楼层
我仿真了一下,除了第一次 ADCval 是个比较大的树(如0x062F)之外,其他时间几乎都是0或1,忽略第一次的话,应该都是对的,但打印出来就是7,偶尔出现8或10。
附上中断方式查询ADC的程序:
void ADC_isr() interrupt 5
{
ADC_CONTR &= ~0x20; // 清空读取flag
ADCval = (ADC_RES <<8) + ADC_RESL; // 这里高8位除第一次是0x06外,之后都是0。低8位第一次是0x2几,之后不是0就是1。
ADC_CONTR |= 0x40; // 再次启动 AD 转换
}
主程序中:
while(1){
// 查询时的ADC:
//ADC_VAL = ADC_Read(0); // 查询时用的变量。通道0
//printf("当前 ADC 数\xfd值:%hd\t对应电压:%hd mV\r\n", ADC_VAL, ADC_CAL_Voltage(ADC_VAL));
// 中断时的ADC(下面一句放到10ms一次的定时中断中,结果一样):
printf("当前 ADC 数\xfd值:%hd\t对应电压:%hd mV\r\n", ADCval, ADC_CAL_Voltage(ADCval)); // 仿真时这里ADCval一直是0或1,正确,但USB-CDC串口助手中总是返回7
}
为何仿真时ADCval总是0,但实际打印出来是7(如图,HEX显示是0x37)?冲哥的视频中用的STC32G,返回的是5。但我查询方式时,按键不按下,返回总是0或1,显示也都正确。(我用的冲哥17课视频ADC下集里的程序)
|
|