单片机两个定时器控制输出pwm波

2020-01-30 14:05发布

我的目的是用定时器0控制pwm的周期,固定它。然后定时器1控制pwm的占空比,可是问题是定时器1根本不工作啊,还有一大部分程序运行时间都浪费到了定时器0里面

        /*定时器赋初值----------------*/
unsigned char pwm_on;
sbit pwm_out=P2^4;//pwm输出端口
void TimerInit(void)
{       
       
        TMOD=0x11;//定时器0和定时器1工作于模式一
        TH0=(65536-50)/256;//初值50us,pwm频率为20khz
        TL0=(65536-50)%256;
        ET0=1;//打开定时器中断
        TR0=1;//启动定时器0
        PT0=0;//定时器0优先级低
       
        TR1=0;
        ET1=1;
        PT1=1;

        EA=1;//开总中断
       
}


void main()
{
        pwm_on=25;//占空比设置
        pwm_out=0;
        Lcd_Init();//LCD初始化
        TimerInit();
        while(1)
        {
                DataProcessing ();//数据处理
                Display();
        }
}

//中断控制pwm
void Timer0irp (void) interrupt 1
{
        pwm_out=1;
        TH0=(65536-50)/256;
        TL0=(65536-50)%256;//定时器0设置为50ms的周期
        TH1=(65536-pwm_on)/256;       
        TL1=(65536-pwm_on)%256;;//由定时器1设置占空比
        TR1=1;
       
//        CLK=~CLK;
       
}
void Timer1irp (void) interrupt 3
{
        TR1=0;
        pwm_out=0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
kcfoo1
1楼-- · 2020-02-01 08:29
kcfoo1 发表于 2013-3-12 18:28
你用的是什么单片机呀,有2个16位定时器

AT89C52啊
chensheng00
2楼-- · 2020-02-01 12:11
chensheng00 发表于 2013-3-12 18:30
恩是的,T1的pwm_out=0;发的时候急了,但是改了之后pwm控制依然不行啊,还有你说的运算是说赋初值吗》 ...

关中断好像是ET0=0 吧,你把ET位控制也加进去试试,th0=da1; da1在住程序循环中计算就可以了,
chensheng00
3楼-- · 2020-02-01 13:53
 精彩回答 2  元偷偷看……
kcfoo1
4楼-- · 2020-02-01 17:19
顶下,有人来么
chensheng00
5楼-- · 2020-02-01 19:07
chensheng00 发表于 2013-3-12 18:30
AT89C52啊

未验证,原理上应该是这样的,楼主验证一下。

52的T2定时器工作在脉冲输出状态时,可以等效为一个残废的PWM,软件控制下就好了。
T2的脉冲输出时,是占空比为50%的方波,我们可以在T2溢出中断调整T2的捕获时间,这样就实现了占空比的调节。
T2定时器很牛X的,用在你这个问题上有点大材小用了。

下面是示例伪代码,我没有用Keil演算,直接手写的...大概就是这个意思...T2向上记数,[TH2、TL2]与T2CAP匹配了就将P1_1反向,并从0开始计数。
void Timer2irp (void) interrupt 5       //忘了中断号是多少了
{        
      if(P1_1)                               //T2好想必须由这个IO输出脉冲
            T2CAP = pwm_on;
      else
            T2CAP = 50us - pwm_on;
      TF2 = 0;                              //T2比较讨厌,得自己手动清除标志
}
chensheng00
6楼-- · 2020-02-01 22:21
takashiki 发表于 2013-3-13 07:33
未验证,原理上应该是这样的,楼主验证一下。

52的T2定时器工作在脉冲输出状态时,可以等效为一个残废的 ...

如果把端口改了,我又要改其他元器件的接法,比较麻烦啊,可以指出来我的那个程序错在哪了吗!我怎么看都是对得,但是一调试就是错的

一周热门 更多>