找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3045|回复: 7
收起左侧

关于PWM的疑问

[复制链接]
ID:66425 发表于 2014-9-20 20:04 | 显示全部楼层 |阅读模式
#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,可是程序输出的是脉冲为几十微妙的,我不知道这是为什么 求解啊

回复

使用道具 举报

ID:66032 发表于 2014-9-21 17:36 | 显示全部楼层
用51来写PWM我没用过, 主程序初始化有笔误TH1=156; 由于51在中断过程中要消耗时钟周期,因此坐骑来要去不断尝试,才能调出来,如果用PIC, AVR 和MSP430F 1,2,3,4,5系列的都好用,而且占空比很准

评分

参与人数 1威望 +45 黑币 +45 收起 理由
admin + 45 + 45 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:19715 发表于 2014-9-21 23:08 | 显示全部楼层
中断次数的计数器没有复位清零
main()
{  
   init();
   n=10;m=200-10;    // n m确定中断的次数
   P1_0=0;
while(1)
   {
   TH0=156;          //定时器方式2的初值设置晶振是12mhz,每0.1ms一个中断TH0=256-100;
   TL0=156;
   P1_0=1;TR0=1;
   np=0;               //中断次数的计数器要清零
   while(np<n){P2=np;} //等待定时器1的中断,中断10次后就是1ms
   TR0=0;

   TH1=156;
   TH1=156;
   P1_0=0;TR1=1;  
   mp=0;               //中断次数的计数器要清零         
   while(mp<m){P3=mp;}
   TR1=0;
   }
}

评分

参与人数 1威望 +45 黑币 +45 收起 理由
admin + 45 + 45 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:19715 发表于 2014-9-21 23:13 | 显示全部楼层
本帖最后由 明白 于 2014-9-21 23:17 编辑

输出脉冲周期跟n+m(200)成正比例
用两个定时器有点浪费,不主张这样,
其实用一个定时器就可以完成
回复

使用道具 举报

ID:66511 发表于 2014-9-22 19:47 | 显示全部楼层
学习学习~~
回复

使用道具 举报

ID:66425 发表于 2014-9-28 22:12 | 显示全部楼层
明白 发表于 2014-9-21 23:08
中断次数的计数器没有复位清零
main()
{  

真大神  谢谢    这小问题害我找了半天
回复

使用道具 举报

ID:66425 发表于 2014-9-28 22:14 | 显示全部楼层
mqwu 发表于 2014-9-21 17:36
用51来写PWM我没用过, 主程序初始化有笔误TH1=156; 由于51在中断过程中要消耗时钟周期,因此坐骑来要去不 ...

恩恩  学习到了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表