找回密码
 立即注册

QQ登录

只需一步,快速开始

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

通过单片机定时器产生PWM波的源程序

[复制链接]
跳转到指定楼层
楼主
ID:111063 发表于 2016-3-27 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过单片机定时器产生PWM波  PWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。 这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,

控制IO口输出 波形高低电平持续时间,实现PWM波。   代码如下:

   #include<reg52.h>

  #define T0_INTERRUPT 1  //T0中断向量号

#define PWMH_L 0x9C  

#define PWMH_H 0xFF   //PWM低电平时间0.1ms   

#define PWML_L 0xCE  #define PWML_H 0xFF   

//PWM高电平时间0.05ms    sbit LED1 = P1^0;   //常亮LED,作为对比,仿真看不出效果

sbit LED2 = P1^1;    //PWM驱动LED     

typedef unsigned char uchar; typedef unsigned int uint;   

void Init_T0();   

void main() {   

   LED1 = 0;      //点亮LED1   

LED2 = 1;      //熄灭LED2  

   Init_T0();    //初始化定时器0   

while(1)     {         

PCON |= 0x01; //单片机进入休眠模式,节省功耗

     }

}   



void Init_T0() {

     TMOD &= 0xF0;     

TMOD |= 0x01;  //16位定时器模式           

TH0 = PWML_H;

        TL0 = PWML_L;   

        EA = 1;       //开全局中断  

   ET0 = 1;      //允许T0中断     

TR0 = 1;      //启动定时器

}  



void T0_Interrupt() interrupt T0_INTERRUPT

{      

TF0 = 0;     

if(LED2 == 1)

    {         

LED2 = 0;        //设置低电平持续时间,LED2亮        

TH0 = PWMH_H;        

TL0 = PWMH_L;   

}     

else     

{         

LED2 = 1;        //设置高电平持续时间,LED2灭                 

TH0 = PWML_H;         

TL0 = PWML_L;  

   }

}


评分

参与人数 2黑币 +81 收起 理由
暗光 + 31 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:81140 发表于 2016-10-20 22:09 | 只看该作者
单片机睡眠模式挺有趣的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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