单片机的中断系统

单片机的中断系统,第1张

  很多初学单片机的小伙伴都非常惧怕中断的学习,确实中断最难学但也最重要,没学会中断就不能说自己会单片机,如果学会中断就可以做很多事,像做什么电路断路检测系统呀,可以用P3.2脚接到通电电路上并且低电平触发中断系统,假如电路一断电就低电平触发外部中断,然后中断函数内定义一个蜂鸣器,一触发就通电蜂鸣器,像这样的小例子还有很多,所以学会中断很重要,难学的问题在我看来其实就两方面,一个是各个寄存器字码的记忆以及一张图的理解,只要记住了各个寄存器字码和学会看中断系统结构图,可以说你就很容易学会中断或者是定时/计数器了。

单片机的中断系统,单片机的中断系统,第2张

  51单片机中断系统结构图

  外部中断0-----INT0

  定时器0-------T0

  外部中断1-----INT1

  定时器1中断-----T1

  串口中断--RX/TX

  假如我们需要使用外部中断0,就以此为例子,看图,往INT0一走遇到个小门IT0这是什么呢?哦,原来是外部中断0的触发方式,假如我们需要低电平触发所以就选择IT0=0,接着走遇到EX0了,这个小门只有开和关,值等于1就是开,等于0就是关,所以我们需要使用外部中断0当然要他开了,所以EX0=1;接着遇到了EA,诶!怎么这些小门怎么都连在一起呀,哦原来是中断总开关,那么当然需要把这么多门一切打开呀,所以EA=1;接着走遇到了PX0这个门了,怎么这个门那边都可以通过呀,只是路长短不一样而已,额,原来是中断优先级选择器呀,随便怎么走吧,不管他就原来系统的优先级,这一路走下来基本就对各寄存器设置完毕了,看代码吧。

  #include

  sbit LED=P1^0; //定义LED端口

  void DelayUs2x(unsigned char t);//us级延时函数声明

  void DelayMs(unsigned char t); //ms级延时

  void main() {

  LED=0; //LED灯点亮

  EA=1; //全局中断开,就是等于把所有大门打开

  EX0=1; //外部中断0开,等于把外部中断0这个小门打开

  IT0=0; //T1=0表示低电平触发,等于把小门拨到电平触发那一面

  while(1)

  {

  //在此添加其他程序

  }

  }

  /*------------------------------------------------

  外部中断程序0

  ------------------------------------------------*/

  void ISR_INT0(void) interrupt 0

  {

  /*------------此处也可以放其他处理函数,像简单的蜂鸣器报警呀等等!----------*/

  if(!INT0)

  {

  DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误

  if(!INT0)

  while(!INT0);//等待按键释放

  {

  LED=!LED;

  }

  }

  }

  /*------------------------------------------------

  uS延时函数,含有输入参数 unsigned char t,无返回值

  unsigned char 是定义无符号字符变量,其值的范围是

  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

  长度如下 T=tx2+5 uS

  ------------------------------------------------*/

  void DelayUs2x(unsigned char t)

  {

  while(--t);

  }

  /*------------------------------------------------

  mS延时函数,含有输入参数 unsigned char t,无返回值

  unsigned char 是定义无符号字符变量,其值的范围是

  0~255 这里使用晶振12M,精确延时请使用汇编

  ------------------------------------------------*/

  void DelayMs(unsigned char t)

  {

  while(t--)

  {

  //大致延时1mS

  DelayUs2x(245);

  DelayUs2x(245);

  }

  }

  所以只要多记字码和看图,然后结合代码例子,就能学会中断,多练就会熟悉,看多了就能把图记在心里随手捻来。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2710445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存