找回密码
 立即注册
查看: 424|回复: 2

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

[复制链接]

该用户从未签到

1

主题

0

回帖

41

积分

新手上路

积分
41
发表于 2023-8-27 17:48:44 | 显示全部楼层 |阅读模式
用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;
}
回复 送花

使用道具 举报

该用户从未签到

553

主题

9636

回帖

1万

积分

管理员

积分
14131
发表于 2023-8-27 18:46:05 | 显示全部楼层
你直接使用 STC8G的参考程序,和STC15W408AS不一样的
1.png

2.png

下载个最新的STC8G数据手册研究下
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

3097

回帖

6981

积分

超级版主

积分
6981
发表于 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 0  0  0  0  0  0 */
                                                        /*             1: 右对齐, ADC_RES: 0  0  0  0  0  0  D9 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;
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-26 16:19 , Processed in 0.055898 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表