- 打卡等级:以坛为家II
 
				- 打卡总天数:481
 
				
				
				- 最近打卡:2025-11-04 08:33:02
 
				  
  
金牌会员 
 
 
	- 积分
 - 1410
 
 
 
 
 | 
 
 
发表于 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下集里的程序) 
 
 |   
 
 
 
 |