找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 47|回复: 4
收起左侧

STC8G1K08A单片机ADC不起作用

[复制链接]
ID:1055402 发表于 2024-9-20 14:23 | 显示全部楼层 |阅读模式
void IO_Init()
{
        P3M1 = 0x04;//0000 0100  p3.2高阻输入 作为ADC输入口
        P3M0 = 0x08;//0000 1000  p3.3推挽输出
        P5M1 = 0x20;//0010 0000  p5.5高阻输入 未使用
        P5M0 = 0x10;//0001 0000         p5.4推挽输出
}
void ADC_Init()
{
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x2f;                              //设置ADC时钟为系统时钟/2/6  右对齐  20K
    ADC_CONTR = 0xc2;                           //使能ADC模块
}
void ADC_Read(void)
{
        unsigned int i16Tem;                       
        ADC_CONTR |= 0x40;                          //继续AD转换       
        _nop_();
        _nop_();
        while (!(ADC_CONTR & 0x20));                //查询ADC完成标志
               
       
            ADC_CONTR &= ~0x20;                         //清中断标志

      i16Tem = ADC_RES<<8|ADC_RESL;  // 读取通道2 (P3.2) 的ADC值
    ADC_CH =i16Tem;
}

void ADC_Test(void)
{
        ifADC_CH>560)
        {
                PWM_Output_Capp1(200);
        }
        else if(ADC_CH <= 512 ) &&ADC_CH >= 256 ))
        {
                PWM_Output_Capp1(50);
        }
        else
        {
                PWM_Output_Capp1(256);
        }
       
}

void main()
{
        IO_Init();      //引脚初始化
        EA = 0;
        PWM_Init();
        ADC_Init();
        TIM_Init();
        Timer0_Init();       
        EA = 1;
        Data_Init();
       
    while (1)
                {
                        PWM_Output_Capp2(256);
                        ADC_Read();
                        ADC_Test();
                }
                       
}

以上是程序的部分代码,按照手册和案例程序写的,PWM输出都是正常的,但是ADC输入好像不起作用

回复

使用道具 举报

ID:170318 发表于 2024-9-21 09:10 | 显示全部楼层
void ADC_Read(void)
{
        unsigned int i16Tem;
       ADC_CONTR|=0x02;               // 设定转换的通道,P3.2是0100,增加这句               
        ADC_CONTR |= 0x40;                          //继续AD转换      
        _nop_();
        _nop_();
        
        while (!(ADC_CONTR & 0x20));                //查询ADC完成标志
               
      
            ADC_CONTR &= ~0x20;                         //清中断标志

      i16Tem = ADC_RES<<8|ADC_RESL;  // 读取通道2 (P3.2) 的ADC值
    ADC_CH =i16Tem;
}
回复

使用道具 举报

ID:170318 发表于 2024-9-21 09:11 | 显示全部楼层
程序中缺少“开启转换通道”这条语句
回复

使用道具 举报

ID:170318 发表于 2024-9-21 09:12 | 显示全部楼层
同时还缺少ADC寄存器清零的语句
回复

使用道具 举报

ID:170318 发表于 2024-9-21 09:16 | 显示全部楼层
程序中缺少开启“转换通道”
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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