jbzl521 发表于 2023-8-27 17:48:44

8g1k08 替换 15w408as ADC功能不正常

用8g1k08 替换 15w408as后,adc部分总是出现异常,有时候能读取正确,有时错误,部分代码如下,请指教
8g1k08 adc 部分代码
#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x20            //ADC完成标志
#define ADC_START   0x40            //ADC起始控制位
#define VOLChlA   0x06
#define VOLChlB   0x07


void AdcDeviceInit(void)
{
         P_SW2 |= 0x80;
          ADCTIM = 0x2f; /*内部时序0 01 01111 */
          P_SW2 &= 0x7f;
          ADCCFG = 0x0f; /*左对齐,SPEED设为8*/
         ADC_RES = 0;                  
      ADC_RESL = 0;
      EADC = 1;
      PADC = 1;
}

替换的15w408as 部分代码
#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位

void AdcDeviceInit(void)
{
    P1ASF = 0xc0;//11000000                  
      CLK_DIV |= 0x00;
      ADC_RES = 0;                  
      ADC_RESL = 0;
      EADC = 1;
      PADC = 1;
}

神农鼎 发表于 2023-8-27 18:46:05

你直接使用 STC8G的参考程序,和STC15W408AS不一样的




下载个最新的STC8G数据手册研究下

梁工 发表于 2023-8-28 10:27:35

STC8G、STC8H的ADC有改进,初始化稍有不同。

#define ADC_START        (1<<6)        /* 自动清0 */
#define ADC_FLAG        (1<<5)        /* 软件清0 */

#define        ADC_SPEED        3                /* 0~15, ADC时钟 = SYSclk/2/(n+1) */
#define        RES_FMT                (1<<5)        /* ADC结果格式 0: 左对齐, ADC_RES: D9 D8 D7 D6 D5 D4 D3 D2, ADC_RESL: D1 D0 000000 */
                                                        /*             1: 右对齐, ADC_RES: 000000D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0 */

#define CSSETUP                (0<<7)        /* 0~1,ADC通道选择时间      0: 1个ADC时钟, 1: 2个ADC时钟,默认0(默认1个ADC时钟) */
#define CSHOLD                (1<<5)        /* 0~3,ADC通道选择保持时间(n+1)个ADC时钟, 默认1(默认2个ADC时钟)                */
#define SMPDUTY                10                /* 10~31, ADC模拟信号采样时间(n+1)个ADC时钟, 默认10(默认11个ADC时钟)            */
                                                        /* ADC转换时间: 10位ADC固定为10个ADC时钟, 12位ADC固定为12个ADC时钟.

        P_SW2 |=0x80;        //访问XSFR
        P1n_pure_input(0x03);        //设置要做ADC的IO做高阻输入
        P3n_pure_input(0x7f);        //设置要做ADC的IO做高阻输入
        ADC_CONTR = 0x80 + 0;        //ADC on + channel
        ADCCFG = RES_FMT + ADC_SPEED;
        ADCTIM = CSSETUP + CSHOLD + SMPDUTY;
页: [1]
查看完整版本: 8g1k08 替换 15w408as ADC功能不正常