我打开了一个定时器和一个外部中断,定时器没有用起来,不知道怎么回事。设置了优先级,定时器优先。请教一下。

2019-07-15 16:54发布

#include <REGX52.H>
#include <dulianjian_diceng.h>
#include <lcd1602_drive.h>

//--定义使用的IO口--//
sbit PWM1=P1^0;
sbit PWM2=P1^1;

//--定义全局变量--//
unsigned char timer0,timer1,timer2;
unsigned int i,j,k;
unsigned char anjian;

//定时器设定//
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0FC;
    TL0 = 0x18;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
        PT0=1;
//        PT0H=1;
        IT1=1;//设置外部中断1为跳变沿触发方式
        EX1=1;//打开外部中断1中断允许
//        PX1H=0;
        PX1=0;
}

void main (void)
{
  /****************************数据初始化*********************/
          i=100;
        j=0;
        k=0;


   while(1)         
   {

         InitTimer0();
   /************************1602led显示设定******************************/
/*             LCD_PRINT(1,5,1,(j/10000)%10);
                 LCD_PRINT(1,6,1,(j/1000)%10);
                 LCD_PRINT(1,7,1,(j/100)%10);
                 LCD_PRINT(1,8,1,(j/10)%10);
                 LCD_PRINT(1,9,1,j%10);                       
                 LCD_PRINTF(1,12,"rpm%d");                         */

             LCD_PRINT(1,5,1,(k/10000)%10);
                 LCD_PRINT(1,6,1,(k/1000)%10);
                 LCD_PRINT(1,7,1,(k/100)%10);
                 LCD_PRINT(1,8,1,(k/10)%10);
                 LCD_PRINT(1,9,1,k%10);                       
                 LCD_PRINTF(1,12,"rpm%d");               

   /************************1602led显示设定******************************/

      /******************PWM的设定************************/

    if(timer1>1000)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 < 0 )        //改变这个值可以改变直流电机的速度
                {
                        PWM1=1;
                }
                else
                {
                        PWM1=0;
                }
          
        if(timer2>1000)  //PWM周期为100*0.5ms
                {
                        timer2=0;
                }
                if(timer2 < i)        //改变这个值可以改变直流电机的速度
                {
                        PWM2=1;
                }
                else
                {
                        PWM2=0;
                }

                    /******************PWM的设定************************/
      }
}

//定时器功能//
void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x0FC;
    TL0 = 0x18; //重新赋初值
        EA=0;

        timer0++;          
        timer1++;          
        timer2++;
                   
    anjian=dulianjian();  
        if(anjian!=0)
        {i=10*anjian+100;}

        if(timer0>1000)
        {
          timer0=0;
          k=j/1000;                        
          j=0;       
        }

        EA=1;
}

void Intl_Routine(void)  interrupt 2
{
   j++;
}



程序如上

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。