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

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

3天内不再提示

STC89C52通过配置相关寄存器即可实现Timer的功能控制

h1654155971.7688 来源:未知 作者:李倩 2018-04-20 08:38 次阅读

一、PWM

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的工作方式

4. Timer0/1计数寄存器

TL0

TL1

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

}

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

    关注

    6001

    文章

    43970

    浏览量

    620784
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4897

    浏览量

    209889

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

文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    采用STC89C52单片机的电子密码锁设计原理及实现

    与使用STC89C52RC单片机内部E2PROM有关的特殊功能寄存器见表2。2.2.1 ISP CONTR控制寄存器ISP_CONTR
    发表于 10-23 09:58

    stc89c52

    stc89c52
    发表于 08-17 22:47

    关于STC89C52与AT89S52的问题

    了 现在手上只有STC89C52芯片,不知道是否可以把原来设计使用的AT89S52STC89C52芯片来使用,(直接把原来的程序烧进去)就是只换芯片 板子没有任何改变 求助大家帮忙解答谢谢了!!
    发表于 12-23 22:27

    at89s52stc89c52

    请问一下:这两种芯片at89s52stc89c52可以相互替换吗?而且用于at89s52的程序可用于stc89c52吗?今天做了电路板,但由于条件不足程序不能烧进at
    发表于 06-14 18:11

    stc89c52stc89c51

    stc89c52stc89c51有啥区别呀,小白刚刚学单片机
    发表于 11-28 23:22

    STC89C52的问题

    我想用STC89C52的芯片写一个摇杆控制遥控小车的程序,我不懂模数转换,哪位大神能给我一个具体的程序
    发表于 08-14 18:22

    采用STC89C52单片机实现智能电子密码锁的控制功能

    ,写人数据有效保存时间可达100年。片内DataFlash(E2PROM)地址如表1所示。 2.2 相关特殊功能寄存器 与使用STC89C52RC单片机内部E2PROM有关的特
    发表于 07-19 02:04

    STC89C52单片机

        STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储STC89C52
    发表于 07-14 06:07

    基于STC89C52单片机的点阵屏设计

    STC89C52STC89C52STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储STC89C5
    发表于 07-19 08:34

    怎么实现基于STC89C52自动循迹小车的设计?

    怎么实现基于STC89C52自动循迹小车的设计?
    发表于 09-29 08:51

    基于STC89C52的音乐播放设计资料分享

    STC89C52做音乐播放内部晶振11.0592MHZC大调音符对照表###TH0,TL0初始值小星星乐谱硬件电路实现用于驱动蜂鸣器###蜂鸣器实现代码(运用模块化编程)###主函数
    发表于 12-02 08:18

    STC89C52定时的介绍

    目录定时的介绍STC89C52定时资源定时框图定时工作模式中断系统单片机引脚图中断服务流程中断资源定时
    发表于 01-13 08:05

    stc89c52单片机的io口有数据寄存功能吗?

    stc89c52单片机的io口有数据寄存功能吗?也就是在修改io口的值之前,保持原值?
    发表于 03-24 09:58

    stc89c52引脚图及引脚功能说明

    本文为您带来单片机STC89C52引脚图,及STC89C52各个具体的引脚功能说明,详情请看如下全文内容。
    发表于 09-21 11:35 37.7w次阅读
    <b class='flag-5'>stc89c52</b>引脚图及引脚<b class='flag-5'>功能</b>说明

    STC89C52

    STC89C52
    发表于 11-25 15:51 153次下载
    <b class='flag-5'>STC89C52</b>