标题: 基于51单片机和Proteus的PWM输出程序 [打印本页]

作者: 染落莫a    时间: 2020-5-14 17:17
标题: 基于51单片机和Proteus的PWM输出程序
共有10个级别的脉冲宽度波形,可以通过观察LED的亮暗时间的变化,或者通过虚拟示波器观察P0.0脚输出脉冲宽度不断变化的十个级别。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar PWM_T=0;         //占空比控制变量
  6. sbit PWM_OUT=P0^0;

  7. void main()
  8. {
  9.         bit flag=1;                //控制LED灯渐亮渐熄方式
  10.         uint n;
  11.         TMOD=0x02;                  //定时器T0,8位方式2定时模式
  12.         TH0=241;                  //15μs溢出一次(11.0592M)
  13.         TL0=241;
  14.         TR0=1;
  15.         ET0=1;
  16.         EA=1;
  17.         PWM_OUT=1;
  18.         while(1)
  19.         {
  20.                 for (n=0;n<30000;n++);                 //延时,将响应定时器T0中断
  21.                 if (flag==1)
  22.                 PWM_T++;
  23.                 else
  24.                 PWM_T--;
  25.                 if (PWM_T>=10)
  26.                 flag=0;
  27.                 if (PWM_T==0)
  28.                 flag=1;
  29.         }
  30. }

  31. timer0()interrupt 1 using 2
  32. {
  33.         static uchar t;                  //用t保存当前时间在1s的比例位置
  34.         t++;                                  //每15μs增1
  35.         if (t==10)                          //1.5ms的周期
  36.         {
  37.                 t=0;
  38.                 PWM_OUT=0;
  39.         }
  40.         if (PWM_T==t)
  41.         PWM_OUT=1;
  42. }
复制代码

所有资料51hei提供下载:
51PWM.rar (45.65 KB, 下载次数: 67)








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1