PCA三路外中断

#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中断标志
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值