📄 pcacapture.c
字号:
//====================================================================
//PCA捕捉模块0的CEX0被设置在按键S3对应的引脚上,按下和松开S3,
//将会产生下降和上升沿信号,引发捕捉模块动作。
//---------------------------------------------------------------------
#include <c8051f310.h> // SFR declarations
#include <intrins.h>
//---------------------------------------------------------------------
// Function PROTOTYPES
//---------------------------------------------------------------------
void PORTn_Init (void);
void PCA_Init (void);
void PCA_ISR (void);
sbit led= P1^7;
int i=0;
//-------------------------------------------------------------------
// MAIN Routine
//-------------------------------------------------------------------
void main (void) {
PCA0MD &= ~0x40; // WDTE = 0 (watchdog timer enable bit)
OSCICN |= 0x03; // Set internal oscillator to highest
// setting (24500000)
PORTn_Init (); /*IO口初始化*/
PCA_Init (); /*PCA初始化*/
EA = 1;
while(i<5)
{
_nop_();
}
}
//-------------------------------------------------------
void PORTn_Init (void)
{
P0SKIP = 0xFF;
P1SKIP = 0xFF;
P2SKIP = 0x03;
XBR1 = 0x41; // 使能交叉开关,允许弱上拉,CEX0连到P2.2
P1MDOUT |= 0x80; // 使能P1.7为推挽输出
}
//--------------------------------------------------------
void PCA_Init (void)
{
EIE1 = 0x10; //允许PCA0中断请求
PCA0L = 0x00;
PCA0H = 0x00;
PCA0CPM0 = 0x11;
PCA0CPL0 = 0x00;
PCA0CPH0 = 0x20;
PCA0CN = 0x40; /*允许PCA定时器/计数器*/
}
//--------------------------------------------------------
/*PCA中断子程序*/
void PCA_ISR (void) interrupt 11
{
CF = 0;
CCF0 = 0; /*清匹配中断标志*/
led=~led;
i++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -