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

📄 cp2.c

📁 数显游标卡尺的抓取信号和协议破解的方面的程序
💻 C
字号:
/*功能:此程序可完成CP1比较器的比较功能,比较器基准信号来自于VREF引脚,
	 比较器响应后将产生中断,可在中断程序中设断点观察.
作者:ZHANGXUEDIAN
时间:2008-10-4
版本:V1.0
***************************************************************/ 
//------------------------------------------------------------------------------------
// 头文件包含
//------------------------------------------------------------------------------------
#include <c8051f020.h>           
//------------------------------------------------------------------------------------
//函数定义
//------------------------------------------------------------------------------------
void PORT_Init (void);
void CPT0_Init (void);
void CPT1_Init (void);

void CPT1_ISR  (void);

sbit led=P2^4;	//红色LED
sbit SCL=P0^0;	//CP1
sbit SDA=P0^1;  //CP0

//------------------------------------------------------------------------------------
//主程序
//------------------------------------------------------------------------------------
void main (void) {
   unsigned char rbyte=0;
   unsigned char i=0,j=0;
   unsigned char start=0;
   unsigned char rdata[3];

   WDTCN = 0xde;   
   WDTCN = 0xad;   //禁止看门狗定时器
	
   PORT_Init ();
   CPT0_Init ();
   CPT1_Init ();	
   				
   //EA=1;			/*开总中断标志*/
 
   while (1)

   {
        start=0;
		i=0;
		while((CPT1CN&0x40)==0x00) //CP+>CP-,led=1
			{	
			   i++;
			   if (i>50) 
				   { //start=1;
				     // led=0;
				      while(start==0)
						  { 
						      j=0;
							  
					          while((CPT1CN&0x40)==0x40) //CP+>CP-,led=1
							    {	
								   //led=1;
								   j++;
								   if (j>10) 
									   { 
									     start=1;																			     
									     break;
									    }
						        }
                           }
                    
			         break;
				    }
			}
			
		//	 led=0;
		

        if(start==1)
	   		{
			    j=0;
				i=0;
				while(j<3)
				   {	
				      if((CPT1CN&0x40)==0x40) //CP+>CP-,led=1
						 {	
						 	 
							 if((CPT0CN&0x40)==0x40)
						        {
								 rbyte = (rbyte >> 1) | 0x80;
								 }
							 else 
							    {								
								  rbyte=rbyte >> 1;
								  }	
						     i++;
							  if (i>7)
							   {
								   i=0;
					               rdata[j++]=rbyte;
								   rbyte=0;
							   }							  	
						  }							
				     }	 //end while if j=3
				 //display rdata
				// led=0;	
			   }
			   //not low
	}
} 
//--------------------------------------------------------------------------------
//函数名称:      CPT1_Init()
//函数功能:      比较器1初始化
//--------------------------------------------------------------------------------
void CPT1_Init (void)
 {
  EIE1   |=0x40;	//允许CP1FIF 标志位(CPT1CN.4)的中断请求
  CPT1CN =0x8F;		//启用CP1比较器,CP+、-回差电压为10mV
  REF0CN |= 0x00;   //用基准电压作为比较信号基准,CP1-接VREF
  XBR1 |=0x01;					//用电位器从3.3V分压输出至CP1+,调节电位器输出电压大、小于VREF看断点变化

 }
 void CPT0_Init (void)
 {
  //EIE1   |=0x40;	//允许CP1FIF 标志位(CPT1CN.4)的中断请求
  CPT0CN =0x8F;		//启用CP1比较器,CP+、-回差电压为10mV
  //REF0CN |= 0x01;   //用基准电压作为比较信号基准,CP1-接VREF
  XBR0 |=0x80;						//用电位器从3.3V分压输出至CP1+,调节电位器输出电压大、小于VREF看断点变化
 }
//------------------------------------------------------------------------------------
//函数名称:      PORT_Init ()
//函数功能:      通用I/O口及交叉开关初始化
//------------------------------------------------------------------------------------
//
void PORT_Init (void)
{
	P2MDOUT   = 0x10;	//LED 输出驱动
    P0MDOUT   = 0x01;	//LED 输出驱动
   	XBR2	  = 0x40; 	/*交叉开关使能*/             
}
//------------------------------------------------------------------------
//函数名称:      CPT1_ISR ()
//函数功能:      比较器1中断程序
//------------------------------------------------------------------------
void CPT1_ISR (void) interrupt 12
{
  	CPT1CN &=~ 0x30;		//清中断标志位,在此设断点观察
	led !=led;

}

⌨️ 快捷键说明

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