一个51产生PWM的演示程序

发布时间:2016-9-13 11:19    发布者:designapp
关键词: PWM , 51
  这是一个51产生PWM的演示程序
  其中P1.3 P1.4是两个输出,这个程序比较匆忙,没有严格验证,可能有错,如有错误请指正。
  /*****************************************************************************
  * 程序名称:PWM占空比调整演示程序 *
  * 编写时间:2005.9.15 23:30分 *
  * 程序版本:1.0 *
  *
  * *
  ******************************************************************************
  *程序思路说明: *
  * *
  *关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数 *
  *设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样*
  *可以设定占空比可从1-100变化。即0.01ms*100=1ms *
  ******************************************************************************/
  #i nclude
  #define uchar unsigned char
  /*****************************************************************************
  * TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256; *
  * TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*
  * 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 *
  * 间为1ms*65536=65.536ms *
  ******************************************************************************/
  #define V_TH0 0XFF
  #define V_TL0 0XF6
  #define V_TMOD 0X01
  void init_sys(void); /*系统初始化函数*/
  void Delay5Ms(void);
  unsigned char ZKB1,ZKB2;
  void main (void)
  {
  init_sys();
  ZKB1=40; /*占空比初始值设定*/
  ZKB2=70; /*占空比初始值设定*/
  while(1)
  {
  if (!P1_1) //如果按了+键,增加占空比
  {
  Delay5Ms();
  if (!P1_1)
  {
  ZKB1++;
  ZKB2=100-ZKB1;
  }
  }
  if (!P1_2) //如果按了-键,减少占空比
  {
  Delay5Ms();
  if (!P1_2)
  {
  ZKB1--;
  ZKB2=100-ZKB1;
  }
  }
  /*对占空比值限定范围*/
  if (ZKB1>99) ZKB1=1;
  if (ZKB1=100) click="0";
  if (click<=ZKB1) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
  P1_3=0;
  else
  P1_3=1;
  if (click<=ZKB2)
  P1_4=0;
  else
  P1_4=1;
  }
本文地址:https://www.eechina.com/thread-173690-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表