微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 下面的程序是源代码,我修改了以下具体的数值(两条注释),发现原本的呼吸灯变成了快速地一亮一灭,为什么?

下面的程序是源代码,我修改了以下具体的数值(两条注释),发现原本的呼吸灯变成了快速地一亮一灭,为什么?

时间:10-02 整理:3721RD 点击:
#include "reg52.h"                       
typedef unsigned int u16;          
typedef unsigned char u8;
sbit PWM=P2^1;
bit DIR;
u16 count,value,timer1;
void Timer1Init()
{
        TMOD|=0X10;
        TH1 = 0xFF;
        TL1 = 0xff;   
               
        ET1=1;//打开定时器1中断允许
        EA=1;//打开总中断
        TR1=1;//打开定时器                       
}
void main()
{       
        Timer1Init();  
        while(1)
        {
                if(count>3000)                                //count的数值由原来的200改为3000,value的数值由1000改为5000,
                {                                             //之后现象就如我在题目中所说的一样,为什么会这样?
                        count=0;                         //PWM的周期和占空比的数值到底应该根据什么条件进行合理的设置?
                        if(DIR==1)                                       
                        {
                          value++;
                        }                       
                        if(DIR==0)
                        {
                          value--;
                        }
                }
               
                if(value==5000)
                {
                  DIR=0;
                }
                if(value==0)
                {
                  DIR=1;
                }
                               
                if(timer1>5000)                         
                {                                                                                                                       
                        timer1=0;                                                                                       
                }
                if(timer1 <value)                            
                {                                                                       
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }               
        }               
}
void Time1(void) interrupt 3   
{
        TH1 = 0xFF;
        TL1 = 0xff;   //1us
        timer1++;
   count++;       
}

if(count>3000)把这值个改小点。

时间设置的过快                          

快速熄灭,点亮;3楼说明了原因,2楼说明了方法。 小编温习一下定时中的知识,想出来原因,就会有大收获啦~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top