📄 cp2.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 + -