关于pwm脉冲输出的问题
时间:10-02
整理:3721RD
点击:
#include<reg51.h> // 本程序是要输出脉冲周期为20ms高电平1ms的脉冲用来控制舵机,用两个定时器,每次中断时间都是0。1ms,中断10次就是1ms。
sbit P1_0=P1^0; // 用两个定时器,每次中断时间都是0。1ms,中断10次就是1ms。
int n,m,np=0,mp=0;
void init() //初始化设置
{
TMOD=0X22;
EA=1;
ET0=1;
ET1=1;
}
main()
{
init();
P1_0=0;
while(1)
{
n=10;m=200-10; // n m确定中断的次数
TH0=156; //定时器方式2的初值设置晶振是12mhz,每0.1ms一个中断TH0=256-100;
TL0=156;
TH1=156;
TH1=156;
P1_0=1;TR0=1;
while(np<n){P2=np;} //等待定时器1的中断,中断10次后就是1ms
TR0=0;P1_0=0;TR1=1;
while(mp<m){P3=mp;}
TR1=0;
}
}
void pwm0() interrupt 1
{
np++; P1_0=1; //np用来判别中断了几次,与n比较中断10后就执行下面程序
TH0=156;
TL0=156;
}
void pwm1() interrupt 3
{
mp++; P1_0=0;
TH1=156;
TL1=156;
}
我想用程序输出20ms'脉冲其中高电平为1ms,可是程序输出的是脉冲为几十微妙的,我不知道这是为什么 求解啊
sbit P1_0=P1^0; // 用两个定时器,每次中断时间都是0。1ms,中断10次就是1ms。
int n,m,np=0,mp=0;
void init() //初始化设置
{
TMOD=0X22;
EA=1;
ET0=1;
ET1=1;
}
main()
{
init();
P1_0=0;
while(1)
{
n=10;m=200-10; // n m确定中断的次数
TH0=156; //定时器方式2的初值设置晶振是12mhz,每0.1ms一个中断TH0=256-100;
TL0=156;
TH1=156;
TH1=156;
P1_0=1;TR0=1;
while(np<n){P2=np;} //等待定时器1的中断,中断10次后就是1ms
TR0=0;P1_0=0;TR1=1;
while(mp<m){P3=mp;}
TR1=0;
}
}
void pwm0() interrupt 1
{
np++; P1_0=1; //np用来判别中断了几次,与n比较中断10后就执行下面程序
TH0=156;
TL0=156;
}
void pwm1() interrupt 3
{
mp++; P1_0=0;
TH1=156;
TL1=156;
}
我想用程序输出20ms'脉冲其中高电平为1ms,可是程序输出的是脉冲为几十微妙的,我不知道这是为什么 求解啊
这程序太乱了,用2个while循环不卡死才怪,另外,用一个定时器就好了。
当中断1来临后,执行完pwm0(),但不一定执行while(np<n){P2=np;} ,有可能还卡在while(mp<m){P3=mp;},而执行不到while(np<n){P2=np;},自己想办法吧,小编肯定是新手