proktv 发表于 2025-1-14 16:40:40

求救 ADC13通道跟内部1.19v基准比较 没有结果

结果再p60 LED显示adc13通道是可调电压的跟内部1.19基准比较中断没结果 求救



#include "stc8h.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
#include "intrins.h"


void CMP_Isr() interrupt 21
{
    CMPCR1 &= ~0x40;                         //清中断标志
//   P47 = CMPCR1 & 0x01;                     //中断方式读取比较器比较结果
                P60 = CMPCR1 & 0x01;                     //中断方式读取比较器比较结果
}

void main()
{
    P_SW2 |= 0x80;//扩展寄存器(XFR)访问使能

    P0M1 = 0x00;   P0M0 = 0xFF;   //设置P0为高阻输入模式
        //        P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
               
                P40 = 0 ;
                P61 = 0 ;
               

    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x8d;                           //使能ADC模块 并设置为13通道

    CMPEXCFG = 0x00;
//CMPEXCFG |= 0x40;                           //比较器DC迟滞输入选择,0:0mV; 0x40:10mV; 0x80:20mV; 0xc0:30mV

//CMPEXCFG &= ~0x04;                        //P3.6为CMP-输入脚
    CMPEXCFG |= 0x04;                           //内部1.19V参考电压为CMP-输入脚

//    CMPEXCFG &= ~0x03;                        //P3.7为CMP+输入脚
//CMPEXCFG |= 0x01;                           //P5.0为CMP+输入脚
//CMPEXCFG |= 0x02;                           //P5.1为CMP+输入脚
    CMPEXCFG |= 0x03;                           //ADC输入脚为CMP+输入脚
               
               


    CMPCR2 = 0x00;
    CMPCR2 &= ~0x80;                            //比较器正向输出
//CMPCR2 |= 0x80;                           //比较器反向输出
    CMPCR2 &= ~0x40;                            //使能0.1us滤波
//CMPCR2 |= 0x40;                           //禁止0.1us滤波
//CMPCR2 &= ~0x3f;                            //比较器结果直接输出
    CMPCR2 |= 0x10;                           //比较器结果经过16个去抖时钟后输出

    CMPCR1 = 0x00;
    CMPCR1 |= 0x30;                           //使能比较器边沿中断
//CMPCR1 &= ~0x20;                            //禁止比较器上升沿中断
//CMPCR1 |= 0x20;                           //使能比较器上升沿中断
//CMPCR1 &= ~0x10;                            //禁止比较器下降沿中断
//CMPCR1 |= 0x10;                           //使能比较器下降沿中断

//CMPCR1 &= ~0x02;                            //禁止比较器输出
    CMPCR1 |= 0x02;                           //使能比较器输出

    P_SW2 &= ~0x08;                           //选择P3.4作为比较器输出脚
//P_SW2 |= 0x08;                              //选择P4.1作为比较器输出脚
    CMPCR1 |= 0x80;                           //使能比较器模块

    EA = 1;

    while (1)
    {
//      P50 = CMPCR1 & 0x01;//查询方式读取比较器比较结果
    }
}


DebugLab 发表于 2025-1-14 17:03:00

什么型号,比较器是新版还是旧版




小飞侠 发表于 2025-1-14 17:13:44

先用官方例程测试一下比较器,看看结果是否正确

小飞侠 发表于 2025-1-14 17:15:27

直接使用ISP软件里边的例程,修改一下IO口

proktv 发表于 2025-1-15 08:21:44

小飞侠 发表于 2025-1-14 17:15
直接使用ISP软件里边的例程,修改一下IO口

我就是再实验性里的程序修改 搞不懂哪里出错ai8051U 正常 ai8h不正常

Lkck8210 发表于 2025-1-15 09:49:47

proktv 发表于 2025-1-15 08:21
我就是再实验性里的程序修改 搞不懂哪里出错ai8051U 正常 ai8h不正常

所以你用的8H是啥型号啥封装的?

梁工 发表于 2025-1-15 10:34:22

proktv 发表于 2025-1-15 08:21
我就是再实验性里的程序修改 搞不懂哪里出错ai8051U 正常 ai8h不正常

试试我的例子:



proktv 发表于 2025-1-15 15:03:07

Lkck8210 发表于 2025-1-15 09:49
所以你用的8H是啥型号啥封装的?

8h8k_64

proktv 发表于 2025-1-15 15:06:50

梁工 发表于 2025-1-15 10:34
试试我的例子:

梁总的例子里面没有ADC通道跟基准1.19V比较的

梁工 发表于 2025-1-15 21:38:50

proktv 发表于 2025-1-15 15:06
梁总的例子里面没有ADC通道跟基准1.19V比较的

有全部通道的,你要比较,属于数据处理,你拿结果比较一下不就可以了。我实际的数据处理要比你的简单比较要复杂得多。
页: [1] 2
查看完整版本: 求救 ADC13通道跟内部1.19v基准比较 没有结果