以下是引用微鑫科技在2022/2/24 9:36:51的发言:
只需要一个定时器。
sbit INT_1=P1.X//第1通道输入
bit INT_1_B=0;//第一通道输入标志变量
unsigned char INT_1_TIM=0;//第一通道输入计时变量
void main()
{
while(1)
{
if(INT_1==1&&INT_1_B==1)//如果通道1为高电平,且通道标志为1,则清零通道1标志和时间
{
INT_1_B=0;INT_1_TIM=0;
}
if(INT_1==0&&INT_1_B==0)//如果通道1为低电平,且通道1标志为0,则将通道1标志为1,且时间清零
{
INT_1_B=1;INT_1_TIM=0;
}
if(INT_1==0&&INT_1_TIM>=200.......)//通道1-通道5
{
//执行有效动作
}
}
}
void Tim1_ISR() interrupt X //定时器中断服务函数
{
if(INT_1==0&&INT_1_B==1&&INT_1_TIM<200)
{
INT_1_TIM++;
}
.
.
.
.
}
老哥你这个通道输入不消一下抖吗?PLC自己有默认约200MS的滤波时间(可修改),你这个得程序里处理吧,难道你硬件解决了?