模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

497查看 | 1回复

求助,关于双路电子开关的修改

[复制链接]
发表于 2024-4-19 11:04:21 | 显示全部楼层 |阅读模式

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

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

x
如何将WPM电子开关改成两个通道输入,两个开关通道输出,小白一名,尝试很多次代码修改也无法实现
目标:
P3.4输入通道1    P3.3输出通道1
P3.5输入通道2    P3.2输出通道2



以下为大佬开源的一路电子开关源码

#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int

/*****************************************************/
//15系列新增寄存器
sfr P3M0=0xb2;
sfr AUXR=0x8e;
sfr T2H=0xd6;
sfr T2L=0xd7;
sfr IE2=0xaf;

/*****************************************************/
//数据与标志位

sbit IN=P3^4;

sbit OUT=P3^3;


u16 time;
u8 n,tt;
bit set,over=1;

/******************************************************/
//脉宽测量函数
void measure()
{
 楼主| 发表于 2024-4-19 11:44:47 | 显示全部楼层
用 我爱萝丽爱萝丽 大佬修改后 依然不能控制
#include<reg51.h>
#include<intrins.h>

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

sbit IN=P3^4;     //定义PWM输入引脚
sbit IN1=P3^5;     //定义PWM输入引脚

sbit OUT=P3^3;    //定义输出引脚
sbit OUT1=P3^2;    //定义输出引脚

unsigned int time;    //记录时间

void Delay10us()                //@12.000MHz
{
        unsigned char i;
        
        _nop_();//使用《舵机测试仪》课程中调整过的延时程序
        _nop_();
        i = 24;
        while (--i);
}

main()
{
        OUT=0;        //先关闭输出
        OUT1=0;
        P3M0=8;    //P3.3引脚大电流模式
        
        while(1)
        {
        
                if(IN==1)        //收到PWM高电平,开始测量
                {
                        time=0;  //先把时间清零
                        while(IN==1)  //如果引脚一直为高电平,一直循环
                        {
                                Delay10us();
                                time=time+1;  //每循环一次,就记录了10us时间
                        }
                        //引脚变成低电平,循环结束
                        
                        if(time>90&&time<120)//0.9ms~1.2ms高电平
                        {
                                OUT=0;  //关闭开关
                        }        
                        
                        if(time>180&&time<210)//1.8ms~2.1ms高电平
                        {
                                OUT=1;  //打开开关
                        }                  

  


                if(IN1==1)        //收到PWM高电平,开始测量
                {
                        time=0;  //先把时间清零
                        while(IN1==1)  //如果引脚一直为高电平,一直循环
                        {
                                Delay10us();
                                time=time+1;  //每循环一次,就记录了10us时间
                        }
                        //引脚变成低电平,循环结束
                        
                        if(time>90&&time<120)//0.9ms~1.2ms高电平
                        {
                                OUT1=0;  //关闭开关
                        }        
                        
                        if(time>180&&time<210)//1.8ms~2.1ms高电平
                        {
                                OUT1=1;  //打开开关
                        }   
              
                }
               
               
        }
}
求助,关于双路电子开关的修改 开源,电子开关,输出通道,输入通道,求助 作者:445951515 3298
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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