求助,关于双路电子开关的修改
如何将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()
{
用 我爱萝丽爱萝丽 大佬修改后 依然不能控制
#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]