51单片机一个io口输出不同的4个不同的pwm

2024-11-18 23:31:59
推荐回答(4个)
回答1:

1、首先要明白PWM的含义,PWM就是输出不同占空比的脉冲,
2、普通51单片机IO口输出PWM的话,可以用定时器去计时,比如要输出100HZ的占空比50%的PWM。可以配置1ms的定时器中断,在中断中计数,一个中断就是1ms,100HZ的脉冲,周期是10ms,50%的占空比,可以计数到5的时候把Io口取反;程序如下
void main()
{
TMOD = 0x01;

TH0 = 0xFC;

TL0 = 0x18; // 晶振选择12MHz,配置定时器中断1ms

ET0 = 1;

TR0 =1;

EA= 1;

while(1); //程序停止在这里,,接下来就是去响应中断
}
void Timer0() interrupt 1
{
static unsigned char t = 0;

TH0 = 0xFC;

TL0 = 0x18; //重新装入初值;
t++;

if(t <5)

{
IO = 0;

}
else if(t < 10)
{
IO = 1;

}
else

{
t = 0;

}

}
上面的程序就是周期是10ms,占空比为50%的输出了,,,需要调节占空比的话,只要改变IO口电平电话的时间就可以了;

3、多个IO口 输出不同占空比的PWM;
原理是和1个的是一样的, 多用几个时间变量去计时,判断就可以了。

4、上面说的是普通的51单片机,现在有很多增强型单片机,内部有PWM模块,可以直接使用,赋值一个周期值,比如30000到特定的寄存器里面; 然后改变第一次电平变化的时间和第二次电平变化的时间 就可以实现不同的占空比调节了。具体的可以参考下单片机的数据手册都会有例程说明的,。如果是使用内部PWM模块的话,需要选择含有多路PWM功能的单片机来满足设计要求了。

回答2:

提供下思路,两个定时器。一个控制高低电平,另一个控制四种PWM的顺序及时长。

回答3:

不可以,一个具有PWM输出功能的IO口只能输出一路PWM

回答4:

你需要分时输出吗?不然的话一个IO口就只能输出一路PWM信号。