标题: pwm语法 看起来没问题 但是改变占空比 效果没改变 求解 [打印本页]

作者: 159753    时间: 2017-11-10 14:56
标题: pwm语法 看起来没问题 但是改变占空比 效果没改变 求解
使用定时器   让P2^3口(小灯)    发送PWM   占空比是固定值
想用  if   判断语句实现   控制高低电平时间
但是改变高低电平的分配时间   灯的亮度不发生改变  
求个详细解答    程序如下
#include "reg52.h"                         

typedef unsigned int u16;         
typedef unsigned char u8;

sbit PWM=P2^3;          //--定义使用的IO口--//

u16 timer1;                   //--定义一个全局变量--//

void Timer1Init()
{
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。

        TH1 = 0xFF;
        TL1 = 0xff;   //1us
               
        ET1=1;//打开定时器1中断允许
        EA=1;//打开总中断
        TR1=1;//打开定时器                       
}

void main()
{       
        Timer1Init();  //定时器1初始化
        while(1)         
        {       
                        if(timer1>1000)                //设定周期
                        {
                                timer1=0;                 //周期归零
                                if(timer1<=100)        //调占空比   改变此值  小灯亮度没变化,求解释@@##¥%……
                                {
                                        PWM=1;                 
                                }
                                else
                                {  
                                        PWM=0;
                                }
                        }
                       
        }               
}

void Time1(void) interrupt 3    //3 为定时器1的中断号
{
        TH1 = 0xFF;
        TL1 = 0xff;   //1us
        timer1++;

       
}


作者: yzwzfyz    时间: 2017-11-10 14:57
中断设置为1us是不合理的。
你想一想,CPU执行一条指令需要多少时间?
另外:CPU在下列情况下是不能响应中断的:
1、当一条指令正在执行中,尚未完成时;
2、当本中断已被响应后,尚未 RETI 时;
你想想,如此。你的中断还能不能每隔1uS中断一次呢?
另外你的主程序还有没有办法顺利地执行下去吗?会不会一个中断接着一个中断地到来?
改一下程序吧,学习不认真的家伙。
作者: sldx    时间: 2017-11-10 23:09
思路不错,但同楼上说法,1us的延迟没啥意义,你定个毫秒的定时还差不多
作者: 天0    时间: 2017-11-11 10:21
定时的频率搞低一点,频率太高,51单片机速度跟不上
作者: Taliban    时间: 2017-11-11 14:16
定时中断时间太短了,主函数差不多一直卡着不动了
作者: 1123212143255    时间: 2017-11-11 18:41
1u秒上面TH1等于0xff,写成大写的0xFF了。
作者: cccc8888    时间: 2017-11-11 23:24
if(timer1>1000)                //设定周期
                     //   {
                                timer1=0;                 //周期归零
                                if(timer1<=100)        //调占空比   改变此值  小灯亮度没变化,求解释@@##¥%……
                                {
                                        PWM=1;                 
                                }
                                else
                                {  
                                        PWM=0;
                                }
                    //    }
作者: 159753    时间: 2017-11-13 08:44
谢谢 各位   
作者: 微烽细雨    时间: 2017-11-13 09:20
中断执行时间过短了




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