0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

单片机

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

PWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。

这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,控制IO口输出

波形高低电平持续时间,实现PWM波。

代码如下:

#include

#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;

    }

}

提问者:A493481244 地点:- 浏览次数:5355 提问时间:10-17 17:13
我有更好的答案
提 交
撰写答案
提 交
1 / 3
1 / 3
相关单片机
具有音调控制的单片机立体声前置放大器
用于单片机与电子装置中的开关电源
单片机软硬件复位的条件都有啥
电动机的单片机控制
单片机应用系统开发实例导航