0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机的Timer,运用PWM完成呼吸灯

0BFC_eet_china 来源:未知 作者:李倩 2018-05-02 09:14 次阅读

Pulse Width Modulation脉冲宽度调制,简称PWM。

PWM(脉冲宽度调制)对模拟信号电平进行数字编码的方法,计算机只能输出0或5V的数字电压值而不能输出模拟电压,而我们如果想获得一个模拟电压值,则需通过使用高分辨率计数器,改变方波的占空比来对一个模拟信号的电平进行编码。

仍输出数字信号,因为满幅值的直流供电只有5V(1)和0V(0)两种。电压是以一种连接(1)或断开(0)的重复脉冲序列被夹到模拟负载上去的,连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,只要带宽足够,可以输出任意不大于最大电压值的模拟电压。

输出电压=(接通时间/脉冲时间)*最大电压值

12

二、51单片机Timer

作者用的单片机是STC89C52,其内部有3个16位Timer,分别为T/C0,T/C1,T/C2,通过配置相关寄存器即可实现Timer的功能控制。

控制PWM需要用到定时器来生成不同占空比的波形,采用定时器中断的方式。

相关寄存器:

1.IE寄存器

2. TCON寄存器

3. TMOD寄存器

控制Timer0/1的工作方式


TL14. Timer0/1计数寄存器

TL0

TH0

TH1

当定时开启后,TL0(TL1)自动跟随机器周期加一。当TL0(TL1)满了后,自动清零同时向TH0(TH1)进一位,不需要手动操作.

而当TL0(TL1)和TH0(TH1)都满了以后,此时如果定时中断和总中断都已经打开,那么就会发生溢出中断,同时这两个寄存器清零

三、运用PWM完成呼吸灯

1. 硬件电路

2. 软件驱动

unsigned char PWM_COUNT; //计数

unsigned int HUXI_COUNT; //占空比更新时间

unsigned char PWM_VLAUE; //占空比比对值

bit direc_flag; //占空比更新方向

void timer0_init()

{

TMOD=0x02; //模式设置,00010000,定时器0,工作于模式2(M1=1,M0=0)

TH0=0x47; //定时器溢出值设置,每隔200us发起一次中断。

TL0=0X47;

TR0=1; //定时器0开始计时

ET0=1; //开定时器0中断

EA=1; //开总中断

PWM_COUNT =0;

}

void time0() interrupt 1

{

PWM_COUNT++;

HUXI_COUNT++;

if(PWM_COUNT == PWM_VLAUE) //判断是否到了点亮LED的时候

LED = 1; //点亮LED

if(PWM_COUNT == 10) //当前周期结束

{

LED = 0; //熄灭LED

PWM_COUNT = 0; //重新计时

}

if((HUXI_COUNT == 600) && (direc_flag == 0))

{ //占空比增加10%

HUXI_COUNT = 0;

PWM_VLAUE++;

if(PWM_VLAUE == 9) //占空比更改方向

direc_flag = 1;

}

if((HUXI_COUNT == 600) && (direc_flag == 1))

{ //占空比减少10%

HUXI_COUNT = 0;

PWM_VLAUE--;

if(PWM_VLAUE == 1) //占空比更改方向

direc_flag = 0;

}

}

void main()

{

HUXI_COUNT = 0;

PWM_COUNT = 0;

PWM_VLAUE = 5;

direc_flag = 0;

LED = 1; //默认LED熄灭

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

while(1);

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4898

    浏览量

    209899
  • 51单片机
    +关注

    关注

    269

    文章

    5649

    浏览量

    120698

原文标题:51单片机PWM的控制(呼吸灯)

文章出处:【微信号:eet-china,微信公众号:电子工程专辑】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎么51单片机模拟PWM

    才开始接触单片机 想用51做个呼吸~~~~大神求教
    发表于 12-23 22:32

    51单片机原理图

    跪求51单片机中DA_pwm白炽呼吸的原理图,谢了
    发表于 05-23 21:29

    呼吸实验51单片机pwm程序分享

    ] /********************************************************************************************************* ** 工程功能 :呼吸实验 ** 工程作者 :Blu
    发表于 07-19 03:19

    怎样去设计一种基于51单片机呼吸

    51单片机(呼吸)c语言湖北民族学院信息工程学院课程设计报告书题目:基于51单片机
    发表于 07-14 06:57

    51单片机呼吸程序设计

    51单片机呼吸程序设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语言编程实现LE
    发表于 07-14 07:54

    基于51单片机呼吸怎样设计

    课程设计报告书题目:基于51单片机呼吸设计信息工程学院课程设计任务书学 号1学生姓名专业(班级)设计题目基于51
    发表于 07-15 08:01

    怎么样去设计基于单片机PWM呼吸

    51单片机(呼吸)C语言版基于单片机PWM呼吸
    发表于 07-15 06:02

    51单片机如何利用PWM定时器实现呼吸

    51单片机如何利用PWM定时器实现呼吸
    发表于 10-15 09:24

    怎样去设计一种基于51单片机的简易呼吸

    基于51单片机的简易呼吸的设计原理是什么?怎样去设计一种基于51单片机的简易
    发表于 10-18 08:37

    如何利用51单片机实现呼吸的设计?

    如何利用51单片机实现呼吸的设计?
    发表于 10-19 06:24

    通过PWM调制模拟呼吸

    //功能:通过PWM调制模拟呼吸//名称:呼吸#include //调用含有51专用寄存器的
    发表于 11-17 08:25

    基于51单片机的七彩呼吸设计资料分享

    ”。(4)按键3按下时,恢复起始亮法。1 先做一个呼吸由易到难,先做一个呼吸呼吸是让小
    发表于 11-19 07:11

    STC15单片机呼吸程序介绍

    STC15单片机呼吸程序主控STC15W4K61S4频率24Mhz该程序用了PCA/PWM作为LED的驱动,因为目标板(15F2K60S2)上没有增强型
    发表于 02-18 07:44

    单片机PWM控制LED输出呼吸的效果,这个PWM的频率应该设置成多少呢 ?

    单片机PWM控制LED输出呼吸的效果,这个PWM的频率应该设置成多少呢 ?
    发表于 10-15 11:47

    51单片机 呼吸灯 七彩呼吸

    由暗到亮“呼吸”。(4) 按键3按下时,恢复起始亮法。1 先做一个呼吸灯由易到难,先做一个呼吸灯。呼吸灯是让小灯从暗到亮变化,然后从亮回到暗。并一直循环。
    发表于 11-12 11:51 57次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b> <b class='flag-5'>呼吸</b>灯 七彩<b class='flag-5'>呼吸</b>灯