最近需要高低电平控制外设,飞控的继电器输出没弄明白。刚好手头有闲置单片机,简单写了个PWM转IO控制程序。原程序为STC15F104E(对,就是那个外部中断有问题的单片机),程序仅1个延时参数,如有需要可根据不同单片机自行调整延时参数和扩展输出。
思路:死循环以下内容{内首先定义计数Count为0,输入PWM信号为低电平时无动作,输入PWM信号为高电平时以100us为单位计数,如果计数为15~25之间(1500us至2500us之间),则输出高电平,否则输出低电平}。
修改建议:1、不同单片机、时钟频率需更改100us延时参数;2、根据输出需要,可以将1000us至2000us之间分为若干时间段分别控制不同输出端口。
程序如下:
/*STC1F104E PWM->IO*/
//@11.0592MHz
#include<reg51.h>
sfr P3M1 = 0xb1 ;
sfr P3M0 = 0xb2 ;
sbit P_IN = P3^5 ;
sbit P_OUT = P3^4 ;
unsigned char Count;
void Delay100us()
{
unsigned char i, j;
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
void main()
{
P3M0 = 0x10 ;
P3M1 = 0x20 ;
while(1)
{
Count = 0;
while(P_IN == 0);
while(P_IN == 1)
{
Count++;
Delay100us();
}
if(25>Count&&Count>15)
{
P_OUT =1;
}
else
{
P_OUT =0;
}
}
}
|