模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

1028查看 | 5回复

[求助贴] 请大家帮忙看看程序哪里有问题,PWM开关

[复制链接]
发表于 2021-8-27 21:48:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
#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 | 显示全部楼层
我是个凑数的。。。
回复 支持 反对

使用道具 举报

发表于 2021-8-28 10:46:42 | 显示全部楼层
找到好贴不容易,我顶你了,谢了
回复 支持 反对

使用道具 举报

发表于 2021-8-28 16:20:04 | 显示全部楼层
学习了,谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2021-8-29 12:36:54 来自手机 | 显示全部楼层
我一般都直接用固件一刷就好了
回复 支持 反对

使用道具 举报

发表于 2022-3-24 22:40:30 来自手机 | 显示全部楼层
我之前的想法和你一样,这样改了之后是不是两个两关都打开时闪一闪的。后来经浅雪大神解答后就解决了。你在第一个通道检测前加一段等到他是低电平结束后再开始就可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!