标题: 请教一下单片机代码读取P1.0 P1.1adc为啥读取不到数值 [打印本页]

作者: 宏达工控    时间: 2025-7-26 12:41
标题: 请教一下单片机代码读取P1.0 P1.1adc为啥读取不到数值
#include <STC15F2K60S2.H>
void InitADC(void)
{
P1ASF = 0x03;
ADC_RES = 0;        
ADC_CONTR = 0x80;
_nop_();           // 等待ADC稳定
    _nop_();
    _nop_();
    _nop_();
        
}
unsigned int GetADCResult(unsigned char ch)
unsigned int result;
ADC_CONTR = (ADC_CONTR & 0xF8) | (ch & 0x07);
ADC_CONTR |= 0x08;
_nop_();
    _nop_();
while (!(ADC_CONTR & 0x10));
ADC_CONTR &= ~0x10;
result = (ADC_RES << 2) | (ADC_RESL & 0x03);
   
    return result;
}
void main(void)
{
    unsigned int voltage = 0;  //
    unsigned int current = 0;  //
while(1)
    {
                        // 采集电压值(通道0:P1.0)
        voltage = GetADCResult(0);
        // 电压转换.最大数3000
       voltage = (voltage * 3000) / 1023; //3000
   
                        //voltage = 2999;
                        // 采集电流值(通道1:P1.1)
       current = GetADCResult(1);
current = (current * 1000) / 1023;
}
作者: WL0123    时间: 2025-7-26 16:37
    P1M0 = 0x00; P1M1 = 0x03; 设置P1.0、P1.1为高祖模式
  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>

  3. void InitADC(void)
  4. {
  5.         P1ASF = 0x03;
  6.         ADC_RES = 0;        
  7.         ADC_RESL = 0;
  8.         ADC_CONTR = 0x80;
  9.         _nop_();           // 等待ADC稳定
  10.         _nop_();
  11.         _nop_();
  12.         _nop_();        
  13. }
  14. unsigned int GetADCResult(unsigned char ch)
  15. {
  16.         unsigned int result;
  17.         ADC_CONTR = (ADC_CONTR & 0xF8) | (ch & 0x07);
  18.         ADC_CONTR |= 0x08;
  19.         _nop_();
  20.         _nop_();
  21.         _nop_();
  22.         _nop_();
  23.         while (!(ADC_CONTR & 0x10));
  24.         ADC_CONTR &= ~0x10;
  25.         result = (ADC_RES << 2) | (ADC_RESL & 0x03);
  26.        
  27.         return result;
  28. }
  29. void main(void)
  30. {
  31.         unsigned int voltage = 0;  //
  32.         unsigned int current = 0;  //
  33.         P1M0 = 0x00; P1M1 = 0x03;
  34.         InitADC();
  35.         while(1)
  36.         {
  37.                 // 采集电压值(通道0:P1.0)
  38.                 voltage = GetADCResult(0);
  39.                 // 电压转换.最大数3000
  40.                 voltage = ((long)voltage * 3000) / 1024; //3000
  41.                
  42.                 //voltage = 2999;
  43.                 // 采集电流值(通道1:P1.1)
  44.                 current = GetADCResult(1);
  45.                 current = ((long)current * 1000) / 1024;
  46.         }
  47. }
复制代码






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1