内部比较器的用途是检测外部传感器的状态变化,例如霍尔开关,有金属接近的时候输出高电平,没有则输出低电平,为什么不直接用IO口来检测呢? 我想比较器跟普通 IO 检测一个很不同的地方就它有参考电压,设置一个合理的阀值就能让比较器正确的工作,这点是 IO 不能比拟的,而且比较器也有中断,方便程序的编写。
#include
__CONFIG(0xFF32);
#define LED0 RD0
/*
实验方法:
RA0(Vin-)和RA3(Vin+)的电平比较,并将结果输出到LED
*/
void CM_init(void)
{
TRISA=0x09; //RA0与RA3设置为输入
TRISD=0x00;
PORTD=0xff;
CMCON=0x02; //两个独立比较器,有C1OUT/C2OUT作为输出
CMIE=1;
GIE=1;
PEIE=1;
}
void main()
{
CM_init();
while(1);
}
void interrupt ISR(void)
{
if(CMIF)
{
CMIF=0;
LED0=C1OUT; //将比较器的结果输出到LED0
}
}
关键字:PIC16F877A 内部比较器
引用地址:
PIC16F877A内部比较器使用Demo
推荐阅读最新更新时间:2024-03-16 16:23
PIC16F877A 的sleep mode
power down mode也就是sleep mode,状态位PD被清零;程序中加入sleep()便可以使IC进入sleep mode。 在sleep mode下,若watchdog使能,则watchdog被清除后,继续工作;oscillator停止工作;IO口保持进入sleep mode时的状态;MCLR 许要设置为逻辑高电平。 从sleep mode醒来的几种方式: 1、外部MCLR的reset; 2、若watchdog使能,可以利用watchdog唤醒,TO bit被清; 3、INT唤醒,portB口有外部中断的功能; 另外在datasheet中也讲解到利用外部中断(如下几种可以唤醒device) 从s
[单片机]
基于RFID的室内定位系统设计
RFID读写器和标签系统均采用低功耗MCU芯片PIC16F877A作为核心控制单元,以低功耗无线射频收发器芯片CC2500为核心配合外围滤波器和天线等构成系统的通信单元。在读写器与标签进行数据通信的过程中,通过获取RSSI(ReceivedSignalStrengthIndicator,接收信号强度指示)信号推测出读写器与标签之间的距离,在获得来自于多个具有固定位置信息的标签的RSSI信号后,可以实现对读写器的无线定位。实验结果表明,该系统在室内环境中能够实现较高精度的无线区域定位。 随着科技的进步和社会经济的发展,人们对定位服务的要求越来越高,传统的定位系统已经不能满足室内定位的需求。GPS在户外环境的定位中应用广泛,
[单片机]
基于PIC16F877A的秒表程序
//该源程序已在实验板上调试通过,读者可直接引用,并可利用软件编程的灵活性,加以拓展,实现更为复杂的功能。 //此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒 //定义0.01 秒、0.1 秒、1秒、10秒计时器 #include p IC .h #include math.h unsigned char s0,s1,s2,s3; unsigned char s ; unsigned char k ,data ,sreg; unsigned int i; const table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90}; //
[单片机]
PIC16F877A初学之定时器中断篇
程序功能:让RC口的八个灯亮65MS灭65MS采用定时器0中断来完成 程序如下: tmr0 equ 01h pcl equ 02h status equ 03h option_reg equ 81h i NTC on equ 0bh portc equ 07h trisc equ 87h tmr0_b equ 0 w equ 0 f equ 1 rp0 equ 5 t0if equ 2 w_temp equ 7fh portc_b equ 23h flag equ 24h
[单片机]