标题: 单片机中断程序 有些地方不太理解 [打印本页]

作者: 可爱萌萌哒    时间: 2020-4-30 11:08
标题: 单片机中断程序 有些地方不太理解
#include<reg52.h>
#define uchar unsigned char
uchar i=0,j=0;
bit b=0;
void main()
{
  uchar sum[]={0xc0,0xf9,0xa4,
  0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  EX0=1;
  IT0=1;
  EX1=1;
  IT1=1;
  EA=1;
  ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
         TR0=1;
        while(1)
        {
           P0=sum[j/10];
           P1=sum[j%10];
        }
}
void time() interrupt 1
{
  i++;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  if(i==20)
  {
  i=0;
  j++;
  }
          if(j==60)
          {
             j=0;

          }
}
void time2()  interrupt 0
{
   if(b==0)
   {
   TR0=0;
   b=1;
   }
else
{
    b=0;
        TR0=1;
}
}
void time3() interrupt 2
{
     j=0;
         i=0;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  TR0=1;
   }
有些地方不太理解
如果定时时间到了,跳到中断,什么时候返回主函数
如果正在计时器中断中运行,外部中断启动,会不会跳到外部中断?
EX0=1;
  IT0=1;
  EX1=1;
  IT1=1;
  EA=1;
  ET0=1;这几个有没有顺序?
作者: xxpp2011    时间: 2020-4-30 14:47
中断优先级外部中断0-定时器0-外部中断1-定时器1-串口
作者: lzw1997    时间: 2020-4-30 16:34
发现你们这些人等级挺高的,但是知识量不够啊,第一个问题:当然是处理完中断就返回啊,如果有新的中断产生根据优先级判断是否继续处理新产生的中断。下面那我写了优先级我就不说了,51是优先级数越低优先级越高,interrupt 0是外部中断0,后面1 2 3 4分别定时器0 外部中断 1定时器1 串口中断,所以你的第二个问题是看定时器假如是定时器0的话,外部中断是外部中断0就会跳,外部中断1就不跳,等处理完了会去处理外部中断1然后在返回main。
作者: 饮酒作乐    时间: 2020-4-30 16:44
中断都必须有中断服务函数的。不同的中断在同一优先级也有天然的优先顺序
作者: 权威人物    时间: 2020-4-30 17:53
哪里不理解?不说出来全给你分析么?
作者: 可爱萌萌哒    时间: 2020-4-30 21:18
lzw1997 发表于 2020-4-30 16:34
发现你们这些人等级挺高的,但是知识量不够啊,第一个问题:当然是处理完中断就返回啊,如果有新的中断产生 ...

第一学期开课,好多东西不懂,谢谢您了
作者: 可爱萌萌哒    时间: 2020-4-30 21:21
权威人物 发表于 2020-4-30 17:53
哪里不理解?不说出来全给你分析么?

刚开始学,就是觉得不理解,如果进入中断函数,在中断函数中改变的值,他是直接影响到主函数,还是等中断函数全部执行完,返回主函数时才会影响主函数的值
作者: 灼羊    时间: 2020-4-30 22:12
中断是有优先级的




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