⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wcp1.c

📁 C8051F.rar
💻 C
字号:
//参考程序B : WCP1.c  此程序可完成CP1比较器的比较功能,比较器基准信号来自于VREF引脚,比较器响应后将产中断, 在主程序中设定P4=0FH,.在中断程序中对P4求反,同时发光二极管的状态也会改变.比较器1上升沿中断服务程序 ,鸣笛二次,比较器1下降沿中断服务程序 ,鸣笛一次.
#include <c8051f020.h> 
#include <intrins.h>
sbit BELL = P3^5;        
void PORT_Init (void);
void CPT1_Init (void);
void CPT1_ISR  (void);
void CPT1B_ISR  (void);
void sleep_ms(unsigned int count);
void main (void) {
    WDTCN = 0xde;   
   WDTCN = 0xad;   //禁止看门狗定时器
   P4=0x0f;
   PORT_Init ();
   CPT1_Init ();					
   EA=1;
   while (1) 
   {                         
   }
} 
void CPT1_Init (void)// 比较器1初始化
 {
  EIE1   |=0xC0;  //比较器CP1下降沿/上升沿中断允许位置1,允许CP1RIF标志位/CP1FIF标志位的中断请求.
  CPT1CN =0x8F;     //CP1允许,CP1正/负回差设定为10mv
  REF0CN |= 0x01;   //用基准电压作为比较信号基准,CP1N接VREF
 }
void PORT_Init (void)   // 通用I/O口及交叉开关初始化
{
  XBR2    = 0x40;  
  XBR1    =0x01;     //将CP1输出端引到P0.1脚 
  XBR0    =0x80;     //将CP0输出端引到P0.0脚            
  P74OUT |= 0x03;       //P4为推挽输出
}
void CPT1_ISR (void) interrupt 12  //比较器1下降沿中断服务程序
{                                //鸣笛一次
  CPT1CN &=~ 0x30;
      P4 = ~P4;           //发光二极管的状态改变
	   BELL=0;
	  sleep_ms(100);
	  BELL=1;
}
void CPT1B_ISR (void) interrupt 13  //比较器1上升沿中断服务程序
{                                   //鸣笛二次
  CPT1CN &=~ 0x30;
      P4 = ~P4;           //发光二极管的状态改变
	  BELL=0;           //鸣笛
	  sleep_ms(100);   
	  BELL=1;
	  sleep_ms(100);
	  BELL=0;           //鸣笛
	  sleep_ms(100);
	  BELL=1;
}
void sleep_ms(unsigned int count)
{
  unsigned char ii,jj;
  for(ii=0;ii<count;ii++)
    {
      for(jj=0;jj<250;jj++)
	  _nop_();			
    }	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -