为什么这个在中断中行,在主程序中就不行了呢?

2019-03-24 19:40发布

小弟写了一个程序,打算用定时器的方法来控制多个步进电机。
下面是程序。这个是在while循环中版本。还有一个,是在中断中的,在while中的步进电机不能转。但是在中断中就可以转了。为什么呢?
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar zheng[]={0x08,0x04,0x02,0x01};
uchar fan[]={0x01,0x02,0x04,0x08};   uchar k=0,i=0,j=0;
void main()
{  

  TMOD=0x01;
  TH0=(65536-50000)/256;//设置初值,每个计数周期计时50ms
  TL0=(65536-50000)%256;
  EA=1;                 //打开中断开关
  ET0=1;                //打开定时器中断
  TR0=1;                //打开定时器0
  while(1)
        {
          if(k%2==0 || k==0)
          {
            P0=zheng;
                i++;
                if(i>=4)
                i=0;
          }
        }
}
void timer0() interrupt 1
{
  TH0=(65536-50000)/256;//设置初值,每个计数周期计时50ms
  TL0=(65536-50000)%256;
  k++;
if(k>200)
k=0;
}



中断中写法。
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar zheng[]={0x08,0x04,0x02,0x01};
uchar fan[]={0x01,0x02,0x04,0x08};   uchar k=0,i=0,j=0;
void main()
{  

  TMOD=0x01;
  TH0=(65536-50000)/256;//设置初值,每个计数周期计时50ms
  TL0=(65536-50000)%256;
  EA=1;                 //打开中断开关
  ET0=1;                //打开定时器中断
  TR0=1;                //打开定时器0
  while(1)
        {
         ;
        }
}
void timer0() interrupt 1
{
  TH0=(65536-50000)/256;//设置初值,每个计数周期计时50ms
  TL0=(65536-50000)%256;
if(k%2==0 || k==0)
          {
            P0=zheng;
                i++;
                if(i>=4)
                i=0;
          }

  k++;
if(k>200)
k=0;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
辛昕
1楼-- · 2019-03-25 17:42
6L的兄弟一针见血啊.....
BTW,那个判断有点多余。
0 % 2 还是0

一周热门 更多>