找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8579|回复: 9
收起左侧

用定时器输出占空比为1:1的方波,周期为2ms c语言

  [复制链接]
ID:162360 发表于 2017-1-24 23:04 | 显示全部楼层 |阅读模式
用定时器输出占空比为1:1的方波,周期为2ms,如何去编程。C语言

评分

参与人数 1黑币 +8 收起 理由
菜鸡一只314159 + 8 赞一个!

查看全部评分

回复

使用道具 举报

ID:55881 发表于 2017-1-25 09:10 | 显示全部楼层
看手册编程
回复

使用道具 举报

ID:162229 发表于 2017-1-25 09:36 | 显示全部楼层
/****************************************
/*使用定时器T0,工作方式2,八位自动重装方式
/*输出周期为2ms,占空比为50%的pwm波
/* *************************************/

#include<reg52.h>
typedef unsigned char uchar
uchar i;
sbit pwm=P1^0       //定义pwm输出端口为P1^0
void InitTimer0()
{
    TMOD = 0x02;
    TH0 = 0x00;
    TL0 = 0x0EC;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void main(void)
{
    InitTimer0();
        while(1)
        {
                if(i<=50) pwm=1;
                else      pwm=0;
        }

}

void Timer0Interrupt(void) interrupt 1
{
    i++;
        if(i>=100) i=0;
}



希望可以帮到你
回复

使用道具 举报

ID:162360 发表于 2017-1-25 16:29 | 显示全部楼层
fx283 发表于 2017-1-25 09:36
/****************************************
/*使用定时器T0,工作方式2,八位自动重装方式
/*输出周期为 ...

我测试了下    完全正确,方便写一下注释吗
回复

使用道具 举报

ID:162360 发表于 2017-1-25 16:30 | 显示全部楼层
fx283 发表于 2017-1-25 09:36
/****************************************
/*使用定时器T0,工作方式2,八位自动重装方式
/*输出周期为 ...

尤其是那些用了定时器和中断的地方
回复

使用道具 举报

ID:162841 发表于 2017-1-25 20:45 来自手机 | 显示全部楼层
你网上搜一下这些资料很多的
回复

使用道具 举报

ID:162229 发表于 2017-1-26 16:55 | 显示全部楼层
天才鱼yhx 发表于 2017-1-25 16:30
尤其是那些用了定时器和中断的地方
  1. /****************************************
  2. /*使用定时器T0,工作方式2,八位自动重装方式
  3. /*输出周期为2ms,占空比为50%的pwm波
  4. /* *************************************/

  5. #include<reg52.h>
  6. typedef unsigned char uchar
  7. uchar i;
  8. sbit pwm=P1^0       //定义pwm输出端口为P1^0
  9. void InitTimer0()
  10. {
  11.     TMOD = 0x02;           //定时器T0,工作方式2,八位自动重装
  12.     TH0 = 0x0EC;              //定时器自动重装值
  13.     TL0 = 0x0EC;             //定时器初始值0xec ,定时20us
  14.     EA = 1;                    //开 总中断
  15.     ET0 = 1;                 //开启定时器T0中断允许位
  16.     TR0 = 1;                 //打开定时器
  17. }

  18. void main(void)
  19. {
  20.     InitTimer0();
  21.         while(1)
  22.         {
  23.                 if(i<=50) pwm=1;           //将2ms平分,占空比为50%。
  24.                 else      pwm=0;
  25.         }

  26. }

  27. void Timer0Interrupt(void) interrupt 1
  28. {
  29.     i++;
  30.         if(i>=100) i=0;        //20us乘以100,为2ms,
  31. }
复制代码

评分

参与人数 1黑币 +8 收起 理由
菜鸡一只314159 + 8 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:68499 发表于 2017-1-28 23:34 来自手机 | 显示全部楼层
官网例程 有个叫timer0 timer1 timer2的例子,很详细,用的库,简单明了
回复

使用道具 举报

ID:162360 发表于 2017-1-29 09:57 | 显示全部楼层
davg1 发表于 2017-1-28 23:34
官网例程 有个叫timer0 timer1 timer2的例子,很详细,用的库,简单明了

            谢谢
回复

使用道具 举报

ID:473159 发表于 2019-1-29 01:32 | 显示全部楼层
这个完全用定时器就能解决,无需中断。只有这样你才能了解什么是定时器,什么是定时中断

评分

参与人数 7黑币 +136 收起 理由
sheng7533967 + 12
钻牛尖滴刘尖尖 + 12
站着说话不腰疼 + 12
Trump1438 + 15
shuisheng60 + 35
jinsheng7533967 + 35
刀刀见红 + 15

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表