#include "STC15W4K.H" // 包含STC15W4K寄存器定义文件
sbit LED_PCA0=P0^1; // PCA0对应P1.1脚
sbit LED_PCA1=P0^0; // PCA1对应P1.0脚
sbit LED_PCA2=P0^2; // PCA2对应P3.7脚
void port_mode() // 端口模式
{
P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main (void)
{
port_mode(); // 所有IO口设为准双向弱上拉方式。
CMOD=0x80; // 空闲模式下停止PCA 计数器工作
// PCA 时钟源为SYSclk /12,禁止PCA 计数器溢出时中断
CCON=0; // 清0 PCA计数器溢出中断请求标志位CF
// CR = 0, 不允许PCA计数器计数;PCA各模块中断请求标志位CCFn清0
CL=0; // PCA 计数器清0
CH=0;
CCAPM0=0x11; // 设置PCA模块0下降沿触发捕捉功能
CCAPM1=0x31; // 设置PCA模块1上升/下降沿均可触发捕捉功能
CCAPM2=0x31; // 设置PCA模块2上升/下降沿均可触发捕捉功能
EA=1; // 开整个单片机所有中断共享的总中断控制位
CR=1; // 启动 PCA 计数器(CH,CL)计数
while(1); // 等待中断
}
void PCA(void) interrupt 7 //PCA中断服务程序
{
if(CCF0) // PCA模块0中断服务程序
{
LED_PCA0=! LED_PCA0; // LED_PCA0取反,表示PCA模块0发生了中断
CCF0=0; // 清PCA模块0中断标志
}
else if(CCF1) // PCA模块1中断服务程序
{
LED_PCA1=!LED_PCA1; // LED_PCA1取反, 表示PCA模块1发生了中断
CCF1=0; // 清PCA模块1中断标志
}
else if(CCF2) // PCA模块2中断服务程序
{
LED_PCA2=!LED_PCA2; // LED_PCA2取反, 表示PCA模块2发生了中断
CCF2=0; // 清PCA模块2中断标志
}
}
PCA三路外中断
最新推荐文章于 2025-04-12 22:31:00 发布