STC8比较器功能案例介绍

news/2024/10/18 16:51:23/

STC8比较器功能案例介绍


  • 📌相关篇《STC8功能脚切换相关寄存器P_SW1和P_SW2以及MCLKOCR介绍》

📋基于内部参考电压源,使用外部端口P3.7作为比较器正极输入源,比较器结果输出到P3.4 或者P4.1(由P_SW2 中的CMPO_S 进行设定)上。

在这里插入图片描述
在这里插入图片描述

📑实验说明

  • 🌿采用10K电位器,0 - 5V可调电压范围,可调端接到P37外部端口引脚上,当调节电位器,使电压在1.2V左右时,接在在外部端口引脚P3.4 或者P4.1上的led灯状态有变化,也就是可以看到比较器输出结果。

🛠相关寄存器配置

  • 🍁比较器输出功能脚切换
    在这里插入图片描述
    P_SW2 &= ~0x08;                             //选择P3.4作为比较器输出脚
//		P_SW2 |= 0x08;                              //选择P4.1作为比较器输出脚
  • 🌴比较器输出结果
    在这里插入图片描述
    CMPCR2 &= ~0x80;                            //比较器正向输出
//  CMPCR2 |= 0x80;                             //比较器反向输出

🏳‍🌈注意事项

  • 👉🏻STC8H8K64U 的B 版本芯片,比较器不能选择ADC 通道作为正极输入。(这一点坑了我好久,多注意看芯片手册中附录内容:注意事项,留意版本信息)
    在这里插入图片描述

🔖目前市面上在售的LQFP48以及LQFP64封装的STC8H8K64U单片机大部分都是B版本的,LQFP32封装的有C、D版本的,如果默写功能的使用有特定要求的,在购买前最好和商家确认芯片具体的版本信息。

📝示例程序

  • 🔖参考代码来源于STC8实验箱。
  • 🖋本代码通过比较器功能,将结果不仅输出到对应的P34/P41引脚上,还将结果赋值给了P47口。
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- Web: www.STCMCUDATA.com  ---------------------------------------*/
/* --- BBS: www.STCAIMCU.com  -----------------------------------------*/
/* --- QQ:  800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
/*---------------------------------------------------------------------*//*************  功能说明    **************本例程基于STC8H8K64U为主控芯片的实验箱9进行编写测试,STC8H系列支持新版本比较器芯片可通用参考.比较器的正极可以是 P3.7、P5.0、P5.1 端口或者 ADC 的模拟输入通道,而负极可以是 P3.6 端口或者是内部 BandGap 经过 OP 后的 REFV 电压(1.19V内部固定比较电压)。通过中断或者查询方式读取比较器比较结果,CMP+的电平低于CMP-的电平P47口输出低电平(LED10亮),反之输出高电平(LED10灭)。******************************************/#include "stc8h.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
#include "intrins.h"void CMP_Isr() interrupt 21
{CMPCR1 &= ~0x40;                         //清中断标志P47 = CMPCR1 & 0x01;                     //中断方式读取比较器比较结果
}void main()
{P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能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;   //设置为准双向口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;  //查询方式读取比较器比较结果}
}

📝比较器选择ADC 通道作为比较器正极(CMP+)输入端程序示例

  • ✨本程序注意所使用的芯片版本信息,必须大于B版本。
  • 经测试,使用查询方式可以获取比较器结果,使用中断方式不行。
  • 🌿使用ADC 输入脚作为CMP+输入脚,将P11作为ADC通道输入脚,P3.4作为比较器输出脚。
    在这里插入图片描述
  • 📋当P11引脚电压低于内部参考电压1.186V时,接在P34引脚上的状态指示led亮起;当P11引脚电压高于内部参考电压1.186V时,接在P34引脚上的状态指示led熄灭;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
//测试工作频率为11.0592MHz
#include "stc8h.h"
#include "intrins.h"//void CMP_Isr() interrupt 21
//{
//    CMPCR1 &= ~0x40; //清中断标志
//		P21 = !(CMPCR1 & 0x01);  //中断方式读取比较器比较结果
//}void main()
{P_SW2 |= 0x80; //使能访问XFRP0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;//    P1M0 &= 0xfe; //设置P1.0 为输入口P1M0 &= 0xfd; //设置P1.1 为输入口
//		    P1M0 &= 0xfb; //设置P1.3 为输入口P1M1 |= 0x02;//设置P1.1 为输入口
//	P1M1 |= 0x03;//设置P1.3 为输入口
//    P1M0 = 0x00;
//    P1M1 = 0xff;ADC_CONTR = 0x81; //使能ADC 模块并选择P1.1 为ADC 输入脚CMPEXCFG = 0x00;
// CMPEXCFG &= ~0x03; //P3.7 为CMP+输入脚
// CMPEXCFG |= 0x01; //P5.0 为CMP+输入脚
// CMPEXCFG |= 0x02; //P5.1 为CMP+输入脚CMPEXCFG |= 0x03; //ADC 输入脚为CMP+输入脚
//    CMPEXCFG &= ~0x04; //P3.6 为CMP-输入脚CMPEXCFG |= 0x04; //内部1.19V 参考电压为CMP-输入脚CMPCR2 = 0x00;//    CMPCR2 &= ~0x80;                            //比较器正向输出CMPCR2 |= 0x80;                             //比较器反向输出//  CMPCR1 &= ~0x02;  //禁止比较器输出CMPCR1 = 0x00;P_SW2 &= ~0x08;                             //选择P3.4作为比较器输出脚
//		P_SW2 |= 0x08;                              //选择P4.1作为比较器输出脚CMPCR1 |= 0x02; //使能比较器输出CMPCR1 |= 0x80;
//    EA = 1;while(1){P21 = (CMPCR1 & 0x01);  //中断方式读取比较器比较结果}
}

http://www.ppmy.cn/news/327597.html

相关文章

基于大疆智图和云端地球,发布OSGB格式三维航拍模型

一 三维模型生成 1、利用大疆精灵4进行航拍 2、利用大疆智图进行三维建模,在1处选择拷贝的航拍文件夹,2处勾选三维模型。 在高级设置里面选择模型格式,这里我们选择最普遍的格式之一,OSGB格式。 结束后得到osgb格式的三维模型…

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

文章目录 一、前言二、校正参数计算三、POS数据提取和处理1、打开提取和处理软件2、选择航片所在文件夹或者Timestamp.MRK文件3、选择提出和处理后的POS数据保存位置4、选择投影坐标系统5、输入校正参数6、点击【提取并生成POS数据文件】四、温馨提示五、POS数据提取和处理软件…

大疆飞行模拟(DJI Flight Simulator)软件的使用

大疆无人机,没买到也可以模拟体验下飞行。今天体验了一下,效果非常棒。DJI Flight Simulator是官网提供的一个仿真软件,类似于游戏的操作,用于学习练习无人机飞行。如果你有真机,可以用真机的手持遥控器控制飞行器&…

航测正射如何用Pix4D处理大疆无人机照片生成正射影像图

本篇主要介绍用Pix4D处理大疆无人机照片生成正射影像图 详细步骤如下(采用是精灵4RTK和Pix4D4.5.6版本): 1.拷贝数据到电脑然后打开软件新建项目输入项目名称并选好路径点击下一步 2.添加无人机照片路径或选择添加照片完成并点击下一步 3.因…

DML——数据库查询语言

查询——select SELECT [DISTINCT/ALL/] {*|column|expression [alias],…} FROM table [Natuarl join /] where子句; Natuarl join 自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元祖队。 列名(属性名)完成相同值相同去除重复列拓展&…

java SSM 游戏账号租售平台myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 游戏账号租售平台是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

算法刷题-哈希表-查找常用字符

查找常用字符 1002. 查找常用字符思路其他语言版本 1002. 查找常用字符 力扣题目链接 给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返…

使用apt处理注解-将观察者模式用于apt

import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** * 使用apt处理注解* * 注解处理工具apt,这是Sun为了帮助注解的处理过程而提供的工具…