zoukankan      html  css  js  c++  java
  • 中断

    stc51单片机的cpu只有一个核,也就是一次只能执行一段代码。

    中断就是当我们在正常执行代码的过程中间,如果触发了中断,就是cpu会马上停止执行当前的代码,就算当前的代码没有执行完比如循环还有没有跳出等,然后去执行另外一段我们要求去执行代码,等那段代码执行完后在回来接着执行原本的代码。

    stc89c52中的中断方式有三个,外部中断,定时器中断和串口中断。

    中断相关的配置也放在了特殊寄存器中。并且不同类型的中断也配置了不止一个。比如有外部中断1,外部中断2等,他们之间的原理一样但控制的引脚和各自存储数据的地址不同。

    特殊寄存器中配置的中断间也可以相互打断,只要是根据中断的优先级,优先级高的可以打断优先级低的。优先级也是可以通过改变对应位的值由用户自行配置。

    同一优先级的定时器之间不能相互打断。但是当两个同优先级的打断在同一时间触发的时候,会按中断器的编号由小到大执行,这个编号也就是cpu遍历这几个中断器的顺序,是定死了的。

    1.外部中断

    外部中断的触发方式类型也有两种,一种是下降沿触发,另外一种是低电平触发。下降沿触发就是当对应引脚由高电平变为低电平的时候触发。低电平触发就是对应引脚输入低电平的时候触发。

    下面的示例是使用外部中断0,用下降沿触发的方式。外部中断0对应的引脚是P3^2,在我的机器上对应最后一个按钮,中断编号是0。

    #include <reg52.h>

    sbit LED0 = P0^0;
    sbit KEY = P3^2;
    unsigned char flag = 0;

    void Int0() interrupt 0 //表示定义一个叫做Int0的方法,当0号编号的打断被触发的时候执行这个方法。
    {
    if(0 == KEY)//再这个方法里面我们判断了按键是否被按下即对应引脚的值是否为0,如果为0则将标志flag的值设置为1。
    {
    flag = 1;
    }

    }

    void main()
    {
    IT0 = 1;//IT0用于配置外部中断0的触发方式,为1的时候是下降沿触发,0是低电平触发
    EX0 = 1;//EX0用于配置外部中断0是否可用,只有设置为1时外部中断0才能被触发
    EA = 1;//EA用于配置是否触发中断,只有配置为1时才能触发,配置为0时所有的中断都不会触发包括定时器中断和串口中断
    KEY = 1;//将P3^2引脚值默认设置为1,这样当我们按下按钮时就变为0,就可以用下降沿触发的方式触发外部中断0
    LED0 = 1;//led灯设置为灭的状态
    while(1)
    {
    if(1 == flag)//当flag为1的时候即打断的代码执行后,将flag置为0,led灯状态取反。实现按一下灯亮,再按一下灯灭...
    {
    flag = 0;
    LED0 = ~LED0;
    }
    }
    }

    低电平触发


    #include <reg52.h>
    #include <intrins.h>

    sbit LED0 = P0^0;
    sbit KEY = P3^2;


    void delay_ms(unsigned int n)
    {
    unsigned int i=0,j=0;
    for(i=0; i<n; i++)
    for(j=0; j<123; j++);
    }

    void Int0() interrupt 0
    {
    EX0 = 0; //关闭外部中断0,防止按键抖动多次进入
    delay_ms(20);
    if(0 == KEY)
    {
    LED0 = ~LED0;
    while(0 == KEY); //等待按键释放,如果此次不检测按键释放,则由于中断允许迅速,会造成多次进入。
    }
    EX0 = 1; //开启外部中断0
    }

    void main()
    {
    IT0 = 0;
    EX0 = 1;
    EA = 1;
    KEY = 1;
    LED0 = 1;
    while(1) ;
    }

  • 相关阅读:
    C# GridView点击某列打开新浏览器窗口
    大白话系列之C#委托与事件讲解(二)
    大白话系列之C#委托与事件讲解(一)
    Razor语法大全
    Expression<Func<T,TResult>>和Func<T,TResult>
    C#委托的介绍(delegate、Action、Func、predicate)
    Android--样式经验
    Android--onSaveInstanceState()保存数据
    Android--ActivityLiving生命周期
    android--快捷键
  • 原文地址:https://www.cnblogs.com/maycpou/p/13582634.html
Copyright © 2011-2022 走看看