标题: 用定时器输出占空比为1:1的方波,周期为2ms c语言 [打印本页]

作者: 天才鱼yhx    时间: 2017-1-24 23:04
标题: 用定时器输出占空比为1:1的方波,周期为2ms c语言
用定时器输出占空比为1:1的方波,周期为2ms,如何去编程。C语言

作者: luoshengjin    时间: 2017-1-25 09:10
看手册编程
作者: fx283    时间: 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;
}



希望可以帮到你
作者: 天才鱼yhx    时间: 2017-1-25 16:29
fx283 发表于 2017-1-25 09:36
/****************************************
/*使用定时器T0,工作方式2,八位自动重装方式
/*输出周期为 ...

我测试了下    完全正确,方便写一下注释吗
作者: 天才鱼yhx    时间: 2017-1-25 16:30
fx283 发表于 2017-1-25 09:36
/****************************************
/*使用定时器T0,工作方式2,八位自动重装方式
/*输出周期为 ...

尤其是那些用了定时器和中断的地方
作者: 199419zzq    时间: 2017-1-25 20:45
你网上搜一下这些资料很多的
作者: fx283    时间: 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. }
复制代码

作者: davg1    时间: 2017-1-28 23:34
官网例程 有个叫timer0 timer1 timer2的例子,很详细,用的库,简单明了
作者: 天才鱼yhx    时间: 2017-1-29 09:57
davg1 发表于 2017-1-28 23:34
官网例程 有个叫timer0 timer1 timer2的例子,很详细,用的库,简单明了

            谢谢
作者: yoxi    时间: 2019-1-29 01:32
这个完全用定时器就能解决,无需中断。只有这样你才能了解什么是定时器,什么是定时中断




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1