STC15W408AS单片机比较器的相关寄存器

一、比较器内部结构stc15w408as单片机内置比较器功能。的比较器内部规划如下图所示:
比较器正极输入端cmp+电平可以与比较器负极输入端cmp-的电平进行比较,也可以与内部bandgap参考电压(1.27v附近)进行比较。
二、stc15w系列与比较器相关的特殊功能寄存器
2.1 比较器控制寄存器1:cmpcr1cmpcr1 : 比较器控制寄存器1
cmpen:比较器模块使能位
cmpen=1,使能比较器模块;
cmpen=0,禁用比较器模块, 比较器的电源关闭。
cmpif:比较器中断标志位(interrupt flag)
在 cmpen为1的情况下:
当比较器的比较结果由low变成high时, 若是pie被设置成1, 那么内建的某一个叫做cmpif_p的寄存器会被设置成1;
当比较器的比较结果由high变成low时, 若是nie被设置成1, 那么内建的某一个叫做cmpif_n的寄存器会被设置成1;
当cpu 去读取 cmpif 的数值时, 会读到 (cmpif_p || cmpif_n);
当cpu对cmpif写0后, cmpif_p 以及 cmpif_n 都会被清除为0 .
而中断产生的条件是 [ (ea==1) && (((pie==1)&&(cmpif_p==1)) || ((nie==1)&&(cmpif_n==1))) ]
cpu接受中断后, 并不会自动清除此cmpif标志, 用户必须用软件写”0”去清除它。
pie:比较器上升沿中断使能位( pos-edge interrupt enabling)
pie = 1, 使能比较器由low变high的事件 设定cmpif_p/产生中断;
pie = 0, 禁用比较器由low变high的事件 设定cmpif_p/产生中断。
nie:比较器下降沿中断使能位 ( neg-edge interrupt enabling)
nie = 1, 使能比较器由high变low的事件 设定cmpif_n/产生中断;
nie = 0, 禁用比较器由high变low的事件 设定cmpif_n/产生中断。
pis:比较器正极选择位
pis = 1, 选择adcis[2:0] 所选择到的 adcin 做为比较器的正极输入源
pis = 0,选择外部p5.5为比较器的正极输入源
nis:比较器负极选择位
nis = 1,选择外部管脚p5.4为比较器的负极输入源
nis = 0,选择内部bandgap电压bgv为比较器的负极输入源
cmpoe:比较结果输出控制位
cmpoe = 1,使能比较器的比较结果输出到p1.2
cmpoe = 0, 禁止比较器的比较结果输出
cmpres:比较器比较结果 (comparator result)标志位
cmpres = 1,cmp+的电平高于cmp-的电平(或内部bandgap参考电压的电平);
cmpres = 0,cmp+的电平低于cmp-的电平(或内部bandgap参考电压的电平)
此 bit 是一个”只读(read-only)”的bit ; 软件对它做写入的动作没有任何意义。软件所读到的结果是“经过enlcctl控制后的结果”, 而非analog比较器的直接输出结果。
2.2 比较器控制寄存器2:cmpcr2比较器控制寄存器2
invcmpo:比较器输出取反控制位 (inverse comparator output)
invcmpo = 1,比较器取反后再输出到p1.2;
invcmpo = 0,比较器正常输出。
比较器的输出, 采用“经过enlcctl控制后的结果”, 而非analog比较器的直接输出结果。
disflt:去除比较器输出的 0.1us filter
disflt = 1, 关掉比较器的输出0.1us filter (可以让比较器速度有少许提升);
disflt = 0, 比较器的输出有0.1us 的 filter。
lcdty[5:0]:比较器输出端 level-change control的 filter 长度(duty)选择
bbbbbb:=
当比较器由low变high, 必须侦测到该后来的high持续至少bbbbbb个时钟, 此芯片线路才认定比较器的输出是由low转成high; 如果在bbbbbb个时钟内, analog比较器的输出又回复到low, 此芯片线路认为什么都没发生, 视同比较器的输出一直维持在low;
当比较器由high变low, 必须侦测到该后来的low持续至少bbbbbb个时钟, 此芯片线路才认定比较器的输出是由high转成low; 如果在bbbbbb个时钟内, analog比较器的输出又回复到high, 此芯片线路认为什么都没发生, 视同比较器的输出一直维持在high.
若是设定成 000000, 代表没有 level-change control。
三、比较器测试程序
#include stc15.hvoid cmpinit();void main(){ cmpinit(); ea = 1; // cpu开放中断 while (1);}// 初始化比较器模块void cmpinit(){// p5.5为比较器正极// p5.4为比较器的负极// p1.2为比较器的结果输出口 cmpcr1 = 0; // 初始化比较器 cmpcr1 |= 0x80; // 使能比较器模块 cmpcr1 |= 0x02; // 使能比较器的比较结果输出到p1.2 cmpcr1 |= 0x20; // 使能比较器的上升沿中断}// 比较器中断服务函数void cmp_isr() interrupt 21 //比较器中断向量入口{ cmpcr1 &= ~0x40; // 清除完成标志 p12 = cmpcr1 & 0x01; // 将比较器结果cmpres输出到测试口显示}

中兴和华为事件是警醒,更是中国自主创新发展机遇
快速测土配方施肥仪的特点及参数
TCL华星与京东方或将主导全球电视液晶面板市场的走势?
创维Mini LED电视Q70系列上市
LED调光电源是如何接线的
STC15W408AS单片机比较器的相关寄存器
vivoNEX宝石红评测 让众人都能获得最酷炫的体验
日本首次公开最强运载火箭
AI助力,老片修复一直在路上
区块链发展的关键是什么
全自动点焊的功能特点有哪些
如何进行西门子的S-1200的S7单边通讯图文详解
谷歌将大力推广基于HTML5的游戏平台
云计算、大数据、5G以及人工智能等新技术的发展给行业带来崭新机遇
针对大量log日志快速定位错误地方
常用电子仪器原理及使用技巧
华为奋力前行 计划HarmonyOS的4年路线图
施耐德电气发布全新升级服务体系!
大疆Mavic Pro正宗后续产品——Mavic 2(御2)系列变焦版体验
关于RFID读写器在机械手生产框架中的应用