我是靠谱客的博主 矮小皮皮虾,这篇文章主要介绍51单片机系列——外部中断怎么写(讲解+实例:改变流水方向),现在分享给大家,希望可以做个参考。

小编在学习51单片机中断的时候常常被外部中断、定时/计数器和串行口弄的稀里糊涂的,本来就是个小小学渣,怎么能经得起折磨!!!
闲来无事,今天写一遍这个来介绍说明一下外部中断INT0、INT1。其他的小编以后再整理给大家。
先上一个实例:
题目:
实例仿真图:
图1
程序

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int

void delay1s(void)   //延时1s
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  
}

void main(void){
 P0 = 0x01; //设一个初值
 IP = 0x04;  //设置中断优先级,人为的将INT1的优先级设置大于INT0
 IT0 = 1; //TCON,设置中断触发方式为边沿触发方式
 IE = 0x85; //IE,开总中断允许,开INT0,INT1中断允许
 while(1); //死循环,等待中断信号
}

void int0_p(void) interrupt 0{ //外部中断0中断服务程序,其中 “int0_p(void)”函数名随意
  uint j;
 delay1s();
 for(j=0;j<7;j++){
   P0 = _crol_(P0,1);
  delay1s();
 }
}

void int1_p(void) interrupt 2{ //外部中断0中断服务程序,其中 “int1_p(void)”函数名随意
  uint i;
 delay1s();
 for(i=0;i<7;i++){
   P0 = _cror_(P0,1);
  delay1s();
 }
}

实例的结果:
(1)当仅按下INT0引脚处的按键K1时,LED自上向下依次点亮,即顺流水一次。
(2)当仅按下INT1引脚处的按键K2时,LED自下向上依次点亮,即逆流水一次。
(3)当按下K1后,在LED顺流水的过程中按下K2,LED变成逆方向依次点亮,一段时间后又变成顺流水,然后结束。(默认INT0的优先级大于INT1,我们在程序中将INT1的优先级设置大于INT0)

总结:
中断初始化过程:
1、设置IP:完成中断优先级的设置:
(老师的PPT,借来一用,嘿嘿)图2
2、设置TCON:设置中断触发方式
这个TCON可以位操作:例:程序中设置外部中断0为边沿触发,可直接写成IT0=1;
图3
3、设置IE:开总中断,开需要的中断
(IE也可以位操作)
注意:外部中断的中断标志位是自动清除的
图4
4、写中断服务程序的中断号如下:
图5
补充:中断标志的撤销说明如下:
图6

最后

以上就是矮小皮皮虾最近收集整理的关于51单片机系列——外部中断怎么写(讲解+实例:改变流水方向)的全部内容,更多相关51单片机系列——外部中断怎么写(讲解+实例内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部