第 14 章 STC 单片机比较器 原理及实现 何宾 2015.02 1
本章主要内容 STC 单片机比较器结构 STC 单片机比较器寄存器组 STC 单片机比较器应用 2
STC 单片机比较器结构 STC15W 系列单片机内置了模拟比较器 对于 STC15W201S STC15W404S, 以及 STC15W1K16S 系 列单片机的比较器内部结构 3
STC 单片机比较器结构 S T C 15W 系列单片机内置了模拟比较器 对于 STC15W201S STC15W404S, 以及 STC15W1K16S 系列单片机的比较器内部结构 从图中可以看出, 比较器正端输入 CMP+ 的输入电压来自单片机的 P5.5 引脚, 而比较器的负端输入 CMP- 的输入电压来自单片机的 P5.4 引脚或者是内部的 BandGap 参考电压 (1.27V) 当: VCMP+>VCMP- 时, 比较器输出逻辑高 (1) VCMP+<VCMP- 时, 比较器输出逻辑低 (0) 4
STC 单片机比较器结构 5
STC 单片机比较器结构 对于内部集成 A D C 的 S T C 15W401AS, 以及 STC15W4K32S4 系列单片机的比较器内部结构 从图中可以看出, 比较器正端输入 CMP+ 的输入电压来自单片机的 P5.5 引脚或者 ADCIN 的输入, 而比较器的负端输入 CMP- 的输入电压来自单片机的 P5.4 引脚或者是内部的 BandGap 参考电压 (1.27V) 当: VCMP+>VCMP- 时, 比较器输出逻辑高 (1) VCMP+<VCMP- 时, 比较器输出逻辑低 (0) 6
STC 单片机比较器结构 7
STC 单片机比较器寄存器组 -- 比较控制寄存器 1 比较控制寄存器 CMPCR1 该寄存器位于特殊功能寄存器地址为 0xE6 的位置 当复位后, 该寄存器的值为 00000000 比较控制寄存器 CMPCR1 各位含义 比特 B7 B6 B5 B4 B3 B2 B1 B0 名字 CMPEN CMPIF PIE NIE PIS NIS CMPOE CMPRES CMPEN 比较器模块使能位 当该位为 1 时, 使能比较器模块 ; 当该位为 0 时, 禁止 比较器模块, 即 : 关闭比较器的电源 8
CMPIF 比较器中断标志位 STC 单片机比较器寄存器组 -- 比较控制寄存器 1 当比较器的输出由逻辑低变成逻辑高时, 如果 PIE 设置为 1, 则将单片机 中内建的一个称为 CMPIF_P 的寄存器置 1; 当比较器的输出由逻辑高变成逻辑低时, 如果 NIE 设置为 1, 则将单片 机中内建的一个称为 CMPIF_N 的寄存器置 1; 当 CPU 读取 CMPIF 时, 会同时读 CMPIF_P 和 CMPIF_N, 只要有一个为 1, 则 CMPIF 就置为 1 注 : 当软件对该位写 0 时, 将 CMPIF_P 和 CMPIF_N 标志清零 9
PIE STC 单片机比较器寄存器组 -- 比较控制寄存器 1 比较器上升沿中断使能控制位 当该位为 1 时, 使能比较器上升沿中断 ; NIE 当该位为 0 时, 禁止比较器上升沿中断 比较器下降沿中断使能控制位 当该位为 1 时, 使能比较器下降沿中断 ; PIS 当该位为 0 时, 禁止比较器下降沿中断 比较器正端选择位 当该位为 1 时, 选择 ADCIS[2:0] 所选择到的 ADCIN 作为比较器的正端输入 ; 当该位为 0 时, 选择外部 P5.5 引脚的输入作为 比较器的正端输入 10
STC 单片机比较器寄存器组 -- 比较控制寄存器 1 NIS 比较器负端选择位 当该位为 1 时, 选择外部 P5.4 引脚的输入作为比较器的负端输入 ; 当该位为 0 时, 选择内部 BandGap 电压 BGV 为比较器的负端输入 CMPOE 比较器结果输出控制位 当该位为 1 时, 使能将比较器的结果输出到单片机的 P1.2 引脚 ; 当该位为 0 时, 禁止比较器的比较结果输出 CMPRES 比较器比较结果标志位 当该位为 1 时,VCMP+>VCMP-; 当该位为 0 时,VCMP+<VCMP- 11
增强型 PWM 发生器相关寄存器组 -- 比较控制寄存器 2 比较控制寄存器 CMPCR2 该寄存器位于特殊功能寄存器地址为 0xE7 的位置 当复位后, 该寄存器的值为 00001001 比较控制寄存器 CMPCR2 各位含义 比特 B7 B6 B5 B4 B3 B2 B1 B0 名字 INVCMPO DISFLT LCDTY[5:0] INVCMPO 比较器输出取反控制位 当该位为 1 时, 将比较器的输出取反后再输出到 单片机的 P1.2 引脚 ; 当该位为 0 时, 比较器正常输出 12
DISFLT 增强型 PWM 发生器相关寄存器组 -- 比较控制寄存器 2 去除比较器输出的 0.1µS 过滤器控制位 当该位为 1 时, 关掉比较器输出 的 0.1µS 过滤器 ; 当该位为 0 时, 比较器的输出经过 0.1µS 过滤器 13
LCDTY[5:0] 增强型 PWM 发生器相关寄存器组 -- 比较控制寄存器 2 比较器输出端用于控制电平变化过滤器长度的设置位 当比较器的输出结 果变化的脉宽时间小于 LCDTY[5:0] 所设置的时钟周期的值, 则该脉冲的 变化不能被输出, 也就是被过滤掉 14
STC 单片机比较器应用 在 STC 学习板上提供了标记为 W1 的可变电位器, 用于将单片机供电电压分压后, 通过单片机的 P5.5 引脚送到比较器的正端 CMP+ 在该设计中, 将 C M P + 的电压和 S TC 15 系列单片机内的 BandGap 电压 ( 大约为 +1.27V) 进行比较 15
STC 单片机比较器应用 当不断调整 STC 学习板上的可变电位器 W1 时, 送到 P5.5 引脚 当 VP5.5<VBandGap 时,STC 学习板上标记为 LED9 的 LED 灯会闪烁, 用于提示电压过低 在调整电位器 W1 的过程中, 每当电压 VP5.5>VBandGap 时, 标记为 LED10 的灯会闪烁一下, 表示 VP5.5 当前电压高于 VBandGap 16
STC 单片机比较器应用 例 低电压比较检测 C 语言描述的例子 #include "reg51.h" sfr CMPCR1 =0xE6; sfr CMPCR2 =0xE7; #define CMPEN 0x80 #define CMPIF 0x40 // 声明 CMPCR1 寄存器的地址 0xE6 // 声明 CMPCR2 寄存器的地址 0xE7 // 定义 CMPEN 的值为 0x80, 使能位 // 定义 CMPIF 的值为 0x40, 中断标志位 #define PIE 0x20 // 定义 PIE 的值为 0x20, 上升沿中断使能位 #define NIE 0x10 // 定义 NIE 的值为 0x10, 下降沿中断使能位 #define PIS 0x08 // 定义 PIS 的值为 0x08, 比较器正端选择位 #define NIS 0x04 // 定义 NIS 的值为 0x04, 比较器负端选择位 #define CMPOE 0x02 #define CMPRES 0x01 // 定义 CMPOE 的值为 0x02, 比较器结果输出控制位 // 定义 CMPRES 的值为 0x01, 比较器比较结果标志位 17
STC 单片机比较器应用 #define INVCMPO 0x80 // 定义 INVCMPO 的值为 0x80, 比较结果反向输出控制位 #define DISFLT 0x40 // 定义 DISFLT 的值为 0x40, 比较器输出端滤波使能控制位 #define LCDTY 0x3F // 定义 LCDTY 的值为 0x3F, 比较器输出区抖时间控制 void cmp_int() interrupt 21 // 定义比较器中断服务程序 cmp_int { P46=!P46; // 单片机引脚 P4.6 取反 CMPCR1 &=~CMPIF; // 清除比较器中断标志位 } 18
STC 单片机比较器应用 void main() { unsigned int j=0; P46=0; // 引脚 P4.6 初值为 0 CMPCR1=0; //CMPCR1 寄存器清零 CMPCR2=0; //CMPCR2 寄存器清零 CMPCR1&=~PIS; // 选择外部引脚 P5.5 作为比较器的正端输入 CMPCR1&=~NIS; // 选择单片机 BandGap 电压作比较器的负端输入 CMPCR1&=~CMPOE; // 禁止输出比较器的比较结果 CMPCR2&=~INVCMPO; // 比较器结果正常输出到单片机引脚 P1.2 CMPCR2&=~DISFLT; // 使能比较器输出端的 0.1μS 滤波电路 19
STC 单片机比较器应用 CMPCR2&=~LCDTY; CMPCR2 =(DISFLT & 0x10); CMPCR1 =PIE; CMPCR1 =CMPEN; EA=1; // 比较器结果不去抖动直接输出 // 比较器结果经过 16 个时钟周期后输出 // 使能比较器的上升沿中断 // 使能比较器 //CPU 允许响应中断请求 20
STC 单片机比较器应用 } while(1) { if((cmpcr1 & 0x01)==0) { for(j=0;j<30000;j++); P47=!P47; } else P46=1; } // 如果比较结果为低 // 延迟一段时间 //P4.7 引脚取反 // 否则当比较结果为高时, 将 P4.6 引脚拉高 21
STC 单片机比较器应用 下载和分析设计的步骤主要包括 : 打开 STC-ISP 软件, 在该界面内, 选择硬件选项 将 输入用户程序运行时的 IRC 频率 设置为 12.0000MHz 单击下载 / 编程按钮, 按前面的方法下载设计到 STC 单片机 用小螺丝刀旋转 STC 学习板上标记为 W1 的电位器旋钮 22