m0_74919493 2023-06-10 20:51 采纳率: 0%
浏览 112
已结题

51单片机输出pwm时无法调节频率,如何解决?

通过以下代码用51单片机输出pwm时可以调节占空比 但无法设定频率 帮忙看下是代码的问题还是什么问题 用keil5 用普中烧录


#include<reg51.h>
 
#define uint unsigned int 
#define uchar unsigned char        
 
uchar time; 
double count=55; //定义占空比,并初始占空比为55%
sbit PWM=P2^0;      //P2^0口输出PWM 
sbit key_add=P3^1;   //电机加速的按键 的I/O口
sbit key_dec=P3^0;   //电机减速的按键 的I/O口
 
 
/************函数声明**************/
void delayxms(uint z); //延时
void Motor_add();   //电机加速,即增加占空比
void Motor_dec();    //电机减速,即减少占空比
void timer0_init();  //定时器0初始化
 
/*********主函数********************/
void main()
{  
 timer0_init();
 delayxms(5);
 while(1)
 {
  Motor_add();
  Motor_dec();
 }
}
 
/****************延时处理**********************/
void delayxms(uint z) //延时xms程序
{
    uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
 
 
void Motor_add()  //电机加速
{
  if(key_add==0)
  {
   delayxms(2); //此处时间不能太长,否者会的中断产生冲突
  if(key_add==0)
  {
   count+=0.5; //每按一次加速按键占空比加0.5
   if(count>=70)     //限定占空比上限
 {
  count=70;
 }
  }
 while(!key_add);
  }
}
 
void Motor_dec()//电机减速
{
 if(key_dec==0)
 {
  delayxms(2);//此处时间不能太长,否者会的中断产生冲突
  if(key_dec==0)
  {
   count-=0.5;   //每按一次减速按键占空比减0.5
   if(count<=30)    //限定占空比下限
   {
 count=30;
   }
  }
 while(!key_dec);
   }
}
 
/***********定时器0初始化***********/
void timer0_init()
{
  TMOD=0x01; //定时器0工作于方式1
  TH0=(65536-20)/256;
  TL0=(65536-20)%256;
  TR0=1;
  ET0=1;
  EA=1;
}
 
/**************定时0中断处理******************/
void timer0_int() interrupt 1 
{
 
  TR0=0;    //设置定时器初值期间,关闭定时器
  TH0=(65536-20)/256;
  TL0=(65536-20)%256;
  TR0=1;
  
  time++;
  if(time<count)   //count为占空比
  {
 PWM=1;    //输出高电平
  }
  else 
 PWM=0; 
  if(time>=100)
  {
 time=0;
  }
 }

  • 写回答

10条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 创建了问题 6月10日

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮