[MINI51] 这个论坛好像不是很活跃啊!MINI54LAN ADC转换后数值一直是0,为什么呢?

[复制链接]
 楼主| zjx_arm 发表于 2013-4-17 14:24 | 显示全部楼层 |阅读模式
事情是这样的,小弟在淘宝上买了一块min51的开发板,MCU是MINI54LAN,把MINI54LAN的第41个引脚(ADC CHEN0)跟一个也是淘宝上买的热敏电阻模块的模拟输出引脚相连,然后按照手册跟官网上载的代码配合起来把AD模块初始化了,然后启动转换并读取ADDR0的值,结果发现ADD0一直等于0x20000,也就是0~9这10位数据一直是0,不知道为什么啊。。。我的热敏电阻模块有3跟针脚,vcc gnd A0,VCC接MINI54LAN上的AVCC,GND接MINI54LAN上的GND,A0接MINI54LAN上的第41个引脚。。。热敏电阻模块原理图如下,AD模块初始化代码如下:
  1. void Init_ADC(void)
  2. {
  3.         IPRSTC2 |= ADC_RST;//复位ADC外设   
  4.     IPRSTC2 &= ~ADC_RST;//ADC模块从复位状态恢复到正常状态   
  5.     APBCLK |= ADC_CLKEN;//使能ADC时钟
  6.        
  7.         //选择外部晶振作为ADC时钟源   
  8.     CLKSEL1 = CLKSEL1 & (~ADC_CLK) | ADC_12M_32K;  
  9.     CLKDIV |= 0x00050000;//ADC时钟6分频   
  10.     ADCR |= ADEN;//使能ADC

  11.         //选择ADC的0~7通道
  12.         //ADCHER |= (CHEN0|CHEN1|CHEN2|CHEN3|CHEN4|CHEN5|CHEN6|CHEN7);
  13.         ADCHER |= (CHEN0);
  14.        
  15.         //AIN0  
  16.     P5_MFP = P5_MFP & (~P53_MFSEL) | P53_AIN0;//配置P5.3为AD输入脚   
  17.     P5_OFFD |= OFFD3;//关数字输入通路   
  18.     P5_PMD = P5_PMD & (~Px3_PMD) | Px3_IN;//配置P5.3为输入模式
  19.        
  20.         //AIN1
  21. /*        P5_MFP = P5_MFP & (~P52_MFSEL) | P52_INT1;  
  22.     P5_OFFD |= OFFD2;  
  23.     P5_PMD = P5_PMD & (~Px2_PMD) | Px2_IN;

  24.         //AIN6
  25.         P3_MFP = P3_MFP & (~P30_MFSEL) | P30_AIN6;  
  26.     P3_OFFD |= OFFD0;  
  27.     P3_PMD = P3_PMD & (~Px0_PMD) | Px0_IN; */

  28.           
  29.     ADSR |= ADF;//清中断标志   
  30.     ADCR |= ADIE;//使能ADC中断   
  31.     NVIC_ISER = ADC_INT;//使能NVIC里ADC中断矢量
  32. }

  33. void Start_ADC(uint8_t u8CHEN)
  34. {
  35.         ADCR |= ADST;//启动ADC
  36. }
  37. void ADC_IRQHandler(void)
  38. {
  39.         static uint16_t u16ADCValue = 0;
  40.         uint8_t acBuff[20] ={0};

  41.         //清中断标志
  42.     ADSR |= ADF;
  43.         //读ADC结果
  44.     u16ADCValue = ADDR0 & 0x000003FF;
  45.         sprintf(acBuff,"the value %d\n", u16ADCValue);
  46.        
  47.         Write_UART(acBuff, 128);  
  48. }

  49. //main函数就初始化了AD模块,然后就启动转换,结果发现在AD中断的处理函数内读出来的数值都是0
热敏电阻模块原理图如下:
这边不知道怎么上图,反正就是把一个热敏电阻跟一个10K的电阻串联,然后两头一边接VCC一边接GND,然后在引出一根A0模拟量输出端,A0就接开发板的AD模块通道0输出引脚了。。。
 楼主| zjx_arm 发表于 2013-4-17 14:27 | 显示全部楼层
这是热敏电阻模块的原理图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
airwill 发表于 2013-4-17 17:26 | 显示全部楼层
结果为0, 最大可能应该是 ADC 没有启动过, 查设置吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部