PWM波(存在问题,待解决)

╰半夏微凉° 2022-08-05 08:17 247阅读 0赞

单片机时钟频率12MHZ,T0做定时器使用,定时时长为0.1ms,要求用P1.0口输出周期为10ms,脉冲宽度按以下规律变化的信号:
第一个脉冲周期,P1.0引脚高电平持续时间为1*0.1ms;
第二个脉冲周期,P1.0引脚高电平持续时间为2*0.1ms;
第三个脉冲周期,P1.0引脚高电平持续时间为3*0.1ms;
第i个脉冲周期,P1.0引脚高电平持续时间为i*0.1ms(0=

  1. ////////////////////////实现目标//////////////////////////////
  2. //单片机时钟频率12MHZ,T0做定时器使用,定时时长为0.1ms,要求用P1.0口输出周期为10ms,脉冲宽度按以下规律变化的信号:
  3. //第一个脉冲周期,P1.0引脚高电平持续时间为1*0.1ms;
  4. //第二个脉冲周期,P1.0引脚高电平持续时间为2*0.1ms;
  5. //第三个脉冲周期,P1.0引脚高电平持续时间为3*0.1ms;
  6. //第i个脉冲周期,P1.0引脚高电平持续时间为i*0.1ms(0=<i<=100).
  7. //即:占空比1%--100% PWM
  8. ///////////////////////定时器初值/////////////////////////////////
  9. //单片机Fosc=12Mhz,T0的定时时长为0.1ms, T0的计数次数为:
  10. // n=(t*Fosc)/12=(0.1ms*12MHz)/12=100
  11. //
  12. //
  13. ////////////////////////////////////////////////////////////
  14. #include<reg52.h>
  15. #define uchar unsigned char
  16. #define out P1^0
  17. uchar PWM,count;
  18. void display(uchar);
  19. void init()
  20. {
  21. TMOD=0X51; //T0:定时、方式1,
  22. TH0=(65536-100)/256;
  23. TL0=(65536-100)%256;
  24. ET0=1; //开T0中断
  25. EA=1; //开全局中断、
  26. TR0=1; //启动定时器/计数器T0
  27. }
  28. void main()
  29. {
  30. //up=100-down;
  31. //count=1;
  32. init();
  33. while(1)
  34. {
  35. if(count==1)
  36. out=1;
  37. else
  38. out=0;
  39. }
  40. }
  41. void time0() interrupt 1 using 1 //T0中断服务函数,中断型号为1
  42. {
  43. TH0=(65536-100)/256; //T0重置初值:0.1ms
  44. TL0=(65536-100)%256;
  45. count++;
  46. if(count==101) count=1;
  47. }
  48. //一个周期分成100份,每份0.1ms;在一个周期中,高电平占有的分量不断增加。

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 STM32f103C8定时器输出PWM信号

    利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能。由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的。 本文章为学习笔记,其中有些地方解释

    相关 js拖拽遇到的问题解决

    以下拖拽代码,遇到一个问题,点击拖拽狗狗后,鼠标松开,继续移动鼠标,狗狗仍是被拖拽状态,得再次点击鼠标,释放拖拽事件。 我百思不得其解,猜测是不是document.onmo

    相关 基于循环DMA+PWM实现正玄

    最近看群里大家在讨论PWM,想起以前写的PWM模拟正玄波的代码,拿出来分享下。 其实也很简单,我就把我做的思路讲解下,期望能帮助到用到的人吧。 首先说下要求: 1、16点