📄 cp0test.c
字号:
//连接CP0+和+2.5V,CP0-和P1.0。
//按下S3键,程序先进入“CPT0_DOWN”后进入“CPT0_UP”,同时观察D4闪烁。
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f000.h>
#include <stdio.h>
#include <intrins.h>
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void delaynms (unsigned int m);
void SYSCLK_Init (void);
void PORT_Init (void);
void CPT0_Init(void);
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
sbit led= P1^4;
unsigned int i;
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main(void){
WDTCN = 0xde; // disable watchdog timer
WDTCN = 0xad;
SYSCLK_Init ();
PORT_Init ();
CPT0_Init();
EA=1;
EIE1|=0x30;
while (1);
}
//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR2 = 0x40; // XBAR2: Initial Reset Value
PRT1CF = 0x10; // Output configuration for P1
}
//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
// delaynms counter
OSCXCN = 0x67; // start external oscillator with
for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)
while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
}
//-----------------------------------------------------------------------------
// delaynms
//-----------------------------------------------------------------------------
void delaynms (unsigned int m)
{
unsigned int oo,ll;
for (oo=0;oo<m;oo++)
{
for(ll=0;ll<1140;ll++);
}
}
//-----------------------------------------------------------------------------
// CPT0_Init
//-----------------------------------------------------------------------------
void CPT0_Init(void)
{
CPT0CN = 0x0F; // Comparator 0 Control Register
CPT0CN|= 0x80; // 使能比较器0
delaynms(1); // 延时
}
//-----------------------------------------------------------------------------
// CPT0_UP
//-----------------------------------------------------------------------------
void CPT0_UP (void) interrupt 11
{
CPT0CN &= ~0x20; // CP0RIF EIE1.5
EIE1&=~0x30;
for (i=0;i<10;i++)
{
delaynms(1000);
led=~led;
}
EIE1|=0x30;
}
//-----------------------------------------------------------------------------
// CPT0_DOWN
//-----------------------------------------------------------------------------
void CPT0_DOWN (void) interrupt 10
{
CPT0CN &= ~0x10; // CP0FIF EIE1.4
EIE1&=~0x30;
for (i=0;i<10;i++)
{
delaynms(100);
led=~led;
}
EIE1|=0x30;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -