标题: 单片机C语言比较器中断 运算符!! 是什么意思?双重否定吗?是不是不用也行 [打印本页]

作者: level888    时间: 2021-12-30 12:42
标题: 单片机C语言比较器中断 运算符!! 是什么意思?双重否定吗?是不是不用也行
sbit LED        =   P1^1;           //测试脚

void cmp_isr() interrupt 21 using 1 //比较器中断向量入口
{
    CMPCR1 &= ~CMPIF;               //清除完成标志
#include <REG51.H>
    LED = !!(CMPCR1 & CMPRES);      //将比较器结果CMPRES输出到测试口显示
}

void main()
{
    CMPCR1 = 0;                     //初始化比较器控制寄存器1
    CMPCR2 = 0;                     //初始化比较器控制寄存器2

    CMPCR1 &= ~PIS;                 //选择外部管脚P5.5(CMPP)为比较器的正极输入源
//  CMPCR1 |= PIS;                  //选择ADCIS[2:0]所选的ADCIN为比较器的正极输入源

    CMPCR1 &= ~NIS;                 //选择内部BandGap电压VBandGap为比较器的负极输入源
//  CMPCR1 |= NIS;                  //选择外部管脚P5.4(CMPN)为比较器的负极输入源

    CMPCR1 &= ~CMPOE;               //禁用比较器的比较结果输出
//  CMPCR1 |= CMPOE;                //使能比较器的比较结果输出到P1.2

    CMPCR2 &= ~INVCMPO;             //比较器的比较结果正常输出到P1.2
//  CMPCR2 |= INVCMPO;              //比较器的比较结果取反后输出到P1.2

    CMPCR2 &= ~DISFLT;              //不禁用(使能)比较器输出端的0.1uS虑波电路
//  CMPCR2 |= DISFLT;               //禁用比较器输出端的0.1uS虑波电路

    CMPCR2 &= ~LCDTY;               //比较器结果不去抖动,直接输出
//  CMPCR2 |= (DISFLT & 0x10);      //比较器结果在经过16个时钟后再输出

    CMPCR1 |= PIE;                  //使能比较器的上升沿中断
//  CMPCR1 |= NIE;                  //使能比较器的下降沿中断

    CMPCR1 |= CMPEN;                //使能比较器

    EA = 1;

    while (1);
}


作者: npn    时间: 2021-12-30 14:42
两次逻辑取反,0取反为1,非0取反为0,不可以省略。
作者: lzd918    时间: 2021-12-30 14:43
不会是双重否定,估计是笔误,实验验证以下吧。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1