微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于pwm脉冲输出的问题

关于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,可是程序输出的是脉冲为几十微妙的,我不知道这是为什么 求解啊

这程序太乱了,用2个while循环不卡死才怪,另外,用一个定时器就好了。

当中断1来临后,执行完pwm0(),但不一定执行while(np<n){P2=np;} ,有可能还卡在while(mp<m){P3=mp;},而执行不到while(np<n){P2=np;},自己想办法吧,小编肯定是新手

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top