445951515 发表于 2024-4-19 11:04:21

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

如何将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()
{

445951515 发表于 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;//打开开关
                        }   
            
                }
               
               
      }
}
页: [1]
查看完整版本: 求助,关于双路电子开关的修改