微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我打开了一个定时器和一个外部中断,定时器没有用起来,不知道怎么回事。设置了优先级,定时器优先。请教一下。

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

时间:10-02 整理:3721RD 点击:
#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++;
}

程序如上

我发现问题了,就是优先级有问题。
怎么设置定时器的执行优先级(物理优先级)?

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

网站地图

Top