打印

51单片机定时产生pwm波程序

[复制链接]
2151|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tee.|  楼主 | 2012-3-5 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
    }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:有进步,嘿嘿。。

23

主题

1652

帖子

6

粉丝