找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11700|回复: 4
收起左侧

妹子求教!单片机输出占空比为50%的PWM,且可调节频率大小

[复制链接]
ID:85795 发表于 2015-7-15 23:03 | 显示全部楼层 |阅读模式
   作为妹子,当初真的不应该选电子专业。555555
    以下程序是输出脉冲是固定频率的可调节占空比图中所示为初始50%占空比的波形图以及20%、40%、60%
猎豹截图20150715225748.png



   怎么在这基础上改成:占空比(50%)不变频率可调节(初始频率5HZ,可向上调节6、 7 、8HZ,向下调节5、 4 、3HZ。
   求指点,万分谢谢
  1. #include<reg52.h>

  2. #define uint unsigned int

  3. sbit pwm=P0^7;
  4. sbit k1=P2^0;
  5. sbit k2=P2^1;

  6. bit bz;//定义一个按键是否松开的标志位

  7. uchar b;
  8. uchar m=5;//m为控制占空比的变量,初始占空比50%

  9. void delay(uint i)
  10. {
  11.         while(i--);
  12. }

  13. void dingshi() interrupt 1//定时中断
  14. {
  15.         TL0=(65536-1000)%256; //1ms初始化
  16.         TH0=(65536-1000)/256;
  17.         b++;
  18.         if(b==10)
  19.                 b=0;   //10ms周期定时
  20.         if(b<m)
  21.                 pwm=1;
  22.         else
  23.                 pwm=0;//高低电平保持时间分配
  24. }

  25. void main()
  26. {
  27.         EA=1;
  28.         ET0=1;
  29.         TMOD=0x01;//定时0工作在方式1,1ms中断1次
  30.         TL0=(65536-1000)%256;
  31.         TH0=(65536-1000)/256;
  32.         TR0=1;//开中断
  33.         while (1)
  34.         {        
  35.                 if((k1==0)&&(bz==0))
  36.                 {
  37.                         delay(1110);
  38.                         if(k1==0)
  39.                         {
  40.                                 bz=1;
  41.                                 m++;
  42.                                 if(m==11)
  43.                                         m=10;
  44.                         }
  45.                 }//每按一次占空比自增10%
  46.                
  47.                 if((k2==0)&&(bz==0))
  48.                 {
  49.                         delay(1110);
  50.                         if(k2==0)
  51.                         {
  52.                                 bz=1;
  53.                                 m--;
  54.                                 if(m==255) if((k1==1)&&(k2==1))
  55.                         bz=0;//判断按键是否松开
  56.                
  57.         }
  58. }
复制代码



回复

使用道具 举报

ID:77578 发表于 2015-7-16 00:26 来自触屏版 | 显示全部楼层
我觉得你可以改b,既然占空比一定,那么m的值就不用变了,按照你原先的程序里1ms进去一次中断,进入十次中断为一周期,也就是10ms一周期,频率为100hz你要该成5hz的话就是1000ms/5=200,然后b设置成两百,m就为b/2,占空比就为50%了,同理就可以设置其他频率了,不过像3这样除不尽的数可能就会有误差了,你可以试试,我也没做过这个程序,目前就这一种想法了,要是有什么好的方法也麻烦你发出来,大家一起交流

评分

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

查看全部评分

回复

使用道具 举报

ID:86938 发表于 2015-8-6 16:57 | 显示全部楼层
TMOD=0x01;//定时0工作在方式1,1ms中断1次
回复

使用道具 举报

ID:39590 发表于 2015-8-6 17:17 | 显示全部楼层
改变高底电平的时间。
回复

使用道具 举报

ID:85795 发表于 2015-8-7 13:55 | 显示全部楼层
已经解决了。
外部再加两个I/O口进行周期的加减输入。同脉宽调节部分程序一样。
谢谢楼上的各位。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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