第十五讲——利用单片机定时器产生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;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛上码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值