1、看引脚图有PCA中断
2、配置寄存器设置
P_SW1 |= ~(1 << 5)
P_SW1 |= (1 <<4 );
引脚选择了P3.5 P3.6 P3.7
CCON = 0x00;
CMOD = 0x08;选择系统时钟
CCAPM0 = 0x11;进行下降沿捕获,允许中断
CCAPM1 = 0x11;
CCAPM2 = 0x11;
捕获中断号为7
3、程序代码
#include "stc8g.h"
#include "intrins.h"
sbit K1 = P3^7;
sbit K2 = P3^6;
sbit K3 = P3^5;
sbit LED_R = P0^5;//红色灯
sbit LED_Y = P0^6;//黄色LED
sbit LED_G = P0^7;//绿色LED
void Delay1us()
{
unsigned char i;
_nop_();
_nop_();
i = 9;
while(--i);
}
void Delay1ms()
{
unsigned char i,j;
_nop_();
_nop_();
i = 46;
j = 113;
do{
while(--j);
}while(--i);
}
void Delay_ms(unsigned int ms)
{
while(ms--)
{
Delay1ms();
}
}
void PCA_Init()
{
P_SW1 |= ~(1 << 5);
P_SW1 |= (1 << 4);
CCON = 0x00;//清除中断标志
CMOD = 0x08;//选择系统时钟
CCAPM0 = 0x11;//进行下降沿捕获,允许中断
CCAPM1 = 0x11;
CCAPM2 = 0x11;
EA = 1;
}
void PCA_Isr() interrupt 7
{
if(CCF0 == 1)
{
CCF0 = 0;
LED_R = !LED_R;
}
if(CCF1 == 1)
{
CCF1 = 0;
LED_Y = !LED_Y;
}
if(CCF2 == 1)
{
CCF2 = 0;//捕获中断标志位清0
LED_G = !LED_G;
}
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
PCA_Init();
while(1)
{
}
}