8H1K比较器用不了 | 可以了,用ADCx 作比较器正极输入,ADC的电源要开,通道要设对
8h1k08程序:
void main(void)
{
P_SW2 = 0x80;
P1=0x00;
P1M0 = 0xff; P1M1 = 0x00; //推挽
P3=0x00;
P3M0 = 0x00; P3M1 = 0xff; //高阻
P3IE = 0xff;
P5M0 = 0xff; P5M1 = 0x00;
ADC_CONTR = 0x80; //开启ADC
ADC_CONTR |= 0x0a; //选择adc10 p32
CMPCR2 = 0x08; //关闭 0.1us 模拟滤波功能,数字滤波8+2周期
CMPEXCFG = 0x03; //选择比较器正端ADC,负端P36
CMPCR1 = 0x80; //使能比较功能
CMPCR1 |= 0x10; //使能比较功能
CMPCR1 |= 0x20; //使能比较功能
EA = 1;
while(1)
{
P54 = 0;
Delay100ms();
P54 = 1;
Delay100ms();
}
}
void CMP_Routine(void) interrupt 21
{
P17 = 1;
Delay100us();
P17 = 0;
Delay100us();
P17 = 1;
Delay100us();
P17 = 0;
Delay100us();
if(CMPCR1 & 0x01)
{
P16 = 1;
}
else
{
P16 = 0;
}
CMPCR1 &= ~0x40; //清除标志
}
刚上电会中断,主循环正常运行,中断里延时去掉也无法进入,
然后我给P36与p32加正反电压,都无法进入中断
后来我把中断去了直接在主循环判断 if(CMPCR1 & 0x01) 也不行
搞了一天了,问问各位大佬这是什么问题
woc,老哥们不用了
我配置了CMPEXCFG = 0x03; //选择比较器正端ADC,负端P36
又加了配置 CMPCR1 |= 0x0c; //选择比较器正端ADC,负端P36
就可以了,但是这个 CMPCR1 (适用于旧版比较器,新版比较器使用 CMPEXCFG 中的 CMPPS 进行选择)
这个不是旧版比较器吗?
这个新版本与旧版是在那个地方看的?
具体还是看数据手册吧 tailimo 发表于 2024-10-3 21:14
woc,老哥们不用了
我配置了CMPEXCFG = 0x03; //选择比较器正端ADC,负端P36
...
这个可以看技术手册,芯片型号部分介绍,里面有写使用的是新版比较器还是旧版比较器 tailimo 发表于 2024-10-3 21:14
woc,老哥们不用了
我配置了CMPEXCFG = 0x03; //选择比较器正端ADC,负端P36
...
页:
[1]