单片机两个定时器控制输出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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
21条回答
chensheng00
2020-01-30 21:47
bbs2009 发表于 2013-3-12 14:47
不理解 LZ 为何要用 2个定时器, 一个就够了

看lz的程序,定时器0是输出1,定时器1中断是输出0,只是lz没想好,定时器是同时工作的,其实lz只要让定时器轮流工作就可以了。在定时器0中断时关0开1中断,在定时器1中断时关1开0中断,只是这样浪费了个定时器而已

一周热门 更多>