找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1307|回复: 2
打印 上一主题 下一主题
收起左侧

单片机C语言比较器中断 运算符!! 是什么意思?双重否定吗?是不是不用也行

[复制链接]
跳转到指定楼层
楼主
ID:278006 发表于 2021-12-30 12:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2021-12-30 14:42 | 只看该作者
两次逻辑取反,0取反为1,非0取反为0,不可以省略。
回复

使用道具 举报

板凳
ID:221871 发表于 2021-12-30 14:43 | 只看该作者
不会是双重否定,估计是笔误,实验验证以下吧。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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