zy888035 发表于 2021-8-27 21:48:08

请大家帮忙看看程序哪里有问题,PWM开关

#include<reg51.h>
#include<intrins.h>

sfr P3M0=0xb2;//声明 引脚输出模式寄存器

sbit IN1=P3^4;//定义PWM输入引脚
sbit OUT1=P3^3; //定义输出引脚
sbit IN2=P3^5;//定义PWM输入引脚
sbit OUT2=P3^2; //定义输出引脚

unsigned int time1; //记录时间
unsigned int time2; //记录时间
void Delay10us()//@12.000MHz
{
unsigned char i;

_nop_();//使用《舵机测试仪》课程中调整过的延时程序
_nop_();
i = 24;
while (--i);
}

main()
{
OUT1=0; //先关闭输出
OUT2=0;
P3M0=13;
while(1)
{

   if(IN1==1) //收到PWM高电平,开始测量
   {
    time1=0;//先把时间清零
    while(IN1==1)//如果引脚一直为高电平,一直循环
      {
       Delay10us();
       time1=time1+1; //每循环一次,就记录了10us时间
       }
    if(time1>90&&time1<120)//0.9ms~1.2ms高电平
    {
   OUT1=0;//关闭开关
   }
       if(time1>180&&time1<210)//1.8ms~2.1ms高电平
   {
      OUT1=1; //打开开关
   }
    }
       
        if(IN2==1) //收到PWM高电平,开始测量
   {
    time2=0;//先把时间清零
    while(IN2==1)//如果引脚一直为高电平,一直循环
      {
       Delay10us();
       time2=time2+1; //每循环一次,就记录了10us时间
       }
    if(time2>90&&time2<120)//0.9ms~1.2ms高电平
    {
   OUT2=0;//关闭开关
   }
       if(time2>180&&time2<210)//1.8ms~2.1ms高电平
   {
      OUT2=1; //打开开关
   }
    }        
}
}

飞天狼 发表于 2021-8-28 08:00:00

我是个凑数的。。。

chinaz1919 发表于 2021-8-28 10:46:42

找到好贴不容易,我顶你了,谢了

姜姜 发表于 2021-8-28 16:20:04

学习了,谢谢分享。

jjyffhjkissdfjk 发表于 2021-8-29 12:36:54

我一般都直接用固件一刷就好了

Rocklive 发表于 2022-3-24 22:40:30

我之前的想法和你一样,这样改了之后是不是两个两关都打开时闪一闪的。后来经浅雪大神解答后就解决了。你在第一个通道检测前加一段等到他是低电平结束后再开始就可以了。
页: [1]
查看完整版本: 请大家帮忙看看程序哪里有问题,PWM开关