找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2602|回复: 0
打印 上一主题 下一主题
收起左侧

基于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)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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