IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机实战教程(20 内置比较器) -> 正文阅读

[嵌入式]51单片机实战教程(20 内置比较器)

? ? ? ?也许大家对比较器并不陌生,比较器类似与运算放大器(有部分运放可以用来做比较器),它有一对差分输入脚-Input/+input,一个输出脚。当-Input的输入电平比+input的输入电平低时,输出脚输出高电平;当-Input的输入电平比+input的输入电平高时,输出脚输出低电平。

? ? ? ? STC15系列部分单片机内置了比较器功能,内置比较器原理与普通比较器一致,即可像普通比较器一样使用也可实现更为复杂的功能。+input的输入脚为P5.5或P2.0,-Input的输入脚为P5.4,输出脚为P1.2,也可将P5.5的输入与内部BandGap参考电压比较。与比较器相关的特殊功能寄存器如下:

?

? ? ? ?从比较器的特殊功能寄存器可以看出,我们可以打开/关闭比较器、可以设置中断、可以将比较结果输出、可以将比较结果取反输出,甚至还可以实现对比较结果滤波滤除非稳定的跳变。

? ? ? ?有了对比较器相关寄存器的了解就,可以写比较器得相关库函数。新建两个文件分别以stccomparator.h, stccomparator.c存入C51 Template文件夹下Library文件夹中。完成后的头文件如下:

/*stccomparator.h
  Designed by Bill Liu
  Version 0.0 
  Modified last by Bill Liu on 12/25/2021
*/
#ifndef __STCCOMPRATOR_H__
#define __STCCOMPRATOR_H__

#include "stc15w4k.h"
#include "mtype.h"
#include "stcint.h"

//*******************************************************
typedef enum
{
  PI_SP55 = 0,
  PI_SP20
}CMP_PISOURCE; // comparator positive input source

//*******************************************************
typedef enum
{
  NI_SP54 = 0,
  NI_SBGV
}CMP_NISOURCE; //comparator negtive input source

//******************************************************
typedef enum
{
  INT_RN = 0, //Neg_edge interrupt enable
  INT_RP      //Pos_edge interrupt enable
}CMP_INTSOURCE; //comparator interrupt source

/***********************************************************
Function: CMP_OutEnable(BOOL mAble);
Return value: void
Discription: configure comparator out enable/disable
Example:
  CMP_OutEnable(0);  //comparator out disable
***********************************************************************/
void CMP_OutEnable(BOOL mAble);

/***********************************************************
Function: CMP_InvResEnable(BOOL mAble);
Return value: void
Discription: configure comparator invert result for outputing enable/disable
Example:
  CMP_InvResEnable(0);  //comparator invert result disable
***********************************************************************/
void CMP_InvResEnable(BOOL mAble);

/***********************************************************
Function: CMP_init(CMP_PISOURCE pIn,CMP_NISOURCE nIn, BOOL intAble, CMP_INTSOURCE intSource,BOOL outAble, BOOL InvAble, ui8 filterCycles);
Return value: void
Discription: init comparator
Example:
  CMP_init(PI_SP55,NI_SP54, 1, INT_N, 1,0, 0);
***********************************************************************/
void CMP_init(CMP_PISOURCE pIn,CMP_NISOURCE nIn, BOOL intAble, CMP_INTSOURCE intSource,BOOL outAble, BOOL InvAble, ui8 filterCycles);

/***********************************************************
Function: CMP_Enable(BOOL mAble);
Return value: void
Discription: comparator enable/disable
Example:
  CMP_Enable(1); // comparator enable
***********************************************************************/
void CMP_Enable(BOOL mAble);

/***********************************************************
Function: CMP_GetResult();
Return value: ui8
Discription: get comparator's result
Example:
  ui8 tem = CMP_GetResult();
***********************************************************************/
ui8 CMP_GetResult();

#endif

完成后的源文件如下:

/*stccomparator.c
  Designed by Bill Liu
  Version 0.0 
  Modified last by Bill Liu on 12/25/2021
*/
#include "stccomparator.h"

/*stccomparator.c
  Designed by Bill Liu
  Version 0.0 
  Modified last by Bill Liu on 12/25/2021
*/

#include "stc15w4k.h"
#include "mtype.h"
#include "stcint.h"

//***********************************************************
void CMP_OutEnable(BOOL mAble)
{
  if(mAble)
    CMPCR1 |= 0x02;
  else
    CMPCR1 &= 0xFD;
}
//End of CMP_OutEnable(BOOL mAble)

//***********************************************************
void CMP_InvResEnable(BOOL mAble)
{
  
  if(mAble)
    CMPCR2 |= 0x80;
  else
    CMPCR2 &= 0x7F;
}
//End of CMP_InvResEnable(BOOL mAble)

//***********************************************************
void CMP_init(CMP_PISOURCE pIn,CMP_NISOURCE nIn, BOOL intAble, CMP_INTSOURCE intSource,BOOL outAble, BOOL InvAble, ui8 filterCycles)
{
  STC_ClearCmpFlag(); 
  if(pIn == PI_SP55)
    CMPCR1 &= 0xF7;
  else
    CMPCR1 |= 0x08;
  if(nIn == NI_SP54)
    CMPCR1 &= 0xFB;
  else
    CMPCR1 |= 0x04;
  STC_IntCmpInit(intAble, 0);
  if(intSource == INT_RN)
    CMPCR1 |= 0x10;
  else
    CMPCR1 |= 0x20;
  if(outAble)
    CMPCR1 |= 0x02;
  else
    CMPCR1 &= 0xFD;
  if(InvAble)
    CMPCR2 |= 0x80;
  else
    CMPCR2 &= 0x40;
  CMPCR2 &= 0xC0;
  CMPCR2 |= filterCycles;
}
//End of CMP_init(CMP_PISOURCE pIn,CMP_NISOURCE nIn, BOOL intAble, CMP_INTSOURCE intSource,BOOL outAble, BOOL InvAble, ui8 filterCycles)

//***********************************************************
void CMP_Enable(BOOL mAble)
{
  if(mAble)
    CMPCR1 |= 0x80;
  else
    CMPCR1 &= 0x40;
}
//End of CMP_Enable(BOOL mAble)

//***********************************************************
ui8 CMP_GetResult()
{
  ui8 tem = CMPCR1 & 0x01;
  return tem;
}
//End of CMP_GetResult()

单片机内置比较器,除了可以像普通比较器一样用法外,还有较多的用途,如用作停电检测,可将电源供电电压分压后做+input,与内部BandGap基准电压比较,当+input电压低于BandGap基准电压时触发中断,单片机将重要参数写入eeprom,以防重要数据丢失。内置比较器还可做外部中断扩展等。本文中的代码及相关库函数,已上传到CSDN,如下离线查看,可去下载,文件名为:

STC15 Comparator Library Source Code.rar。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:21:45  更:2021-12-26 22:22:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:21:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码