Q:c语言编写51单片机中断程序,执行过程是怎样的?

例如程序:
#include<reg52.h>  
void main(void)
  {
   EA=1;      //开放总中断
   EX0=1;     //允许使用外中断
   IT0=1;    //选择负跳变来触发外中断 
   P0=0xff;         //关闭所有P0口的LED灯
        while(1); //无限循环,
}
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{

P0=~P0;  //每产生一次中断请求,P0取反一次。
  
}
当有中断时,这个程序的执行过程是怎样的???

A1:从main开始,开放总中断,允许使用外中断,选择负跳变来触发外中断,到这时负跳变没来没就一直while(1),等待。来了后执行
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{

P0=~P0;  //每产生一次中断请求,P0取反一次。
  
}

A2:有中断时直接跑到中断服务去

A3:CPU会一直在检测是否有中断请求的。当收到中断请求EX 时,进行软件设置,开启总中断EA ,再设置中断的触发方式IT。

转载自:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=220199

外部中断定时器c语言程序详解

  1. 利用外部中断0,定时器0从数码管到流水灯显示

  2.  

    #include "reg52.h"//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

    #include "intrins.h"

  3.  

    #define uint unsigned int

    #define uchar unsigned char

  4.  

    uchar led,n,i,count=0;

    uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f

    ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F

    uchar sm[]={0x00,0x01};//数码管扫描

    uchar str[2];//显示两位数码管

  5.  

    /******************************************************************/

    /*                    延时函数声明                                */

    /******************************************************************/

    /*void mdelay(uint t)

    {

    uchar n;

    for(;t>0;t--)

    for(n=0;n<125;n++)

    {;}

    }*/

    /*大约一毫秒的延时函数*/

    void mdelay(uint t)

    {

    uchar n;

    while(t--)

    {

    for(n=0;n<123;n++)

    {;}

    }

    }

  6.  

    /******************************************************************/

    /*                   主函数 1                                      */

    /******************************************************************/

    void main()

    {

    EA=1;//开总中断开关

    EX0=1;//打开外部中断0

    INT0=1;//触发方式为下降沿触发

    TH0=0x3c;//设置初值

    TL0=0xb0;

    ET0=1;//打开定时器中断

    TR0=1;//启动定时器

    TMOD=0x01;//设置定时器0为工作方式1

  7.  

    while(1)

    {

    for(i=0;i<2;i++)//数码管显示数据

    {

    P1=0xff;

    P2=sm[i];

    P0=smg[str[i]];

    mdelay(5);

    }

    }

    }

  8.  

    void int0() interrupt 0

    {

    uchar c;

    led=0xfe;

    P2=0x00;

    for(c=0;c<8;c++)//流水灯循环一次

    {

    P1=led;

    led=_crol_(led,1);//左移函数

    mdelay(1000);

    }

    }

  9.  

    void time0() interrupt 1

    {

    TH0=0x3c;

    TL0=0xb0;

    count++;

    if(count==20)//延时一秒0-60显示

    {

    count=0;

    str[0]=n/10;

    str[1]=n%10;

    n++;

    if(n==60)

    {

    n=0;

    }

    }

    }

  10. 10

    本经验只供参考,如有不足,还请见谅。。。

    转载自:https://jingyan.baidu.com/article/870c6fc304cff6b03ee4be45.html

c语言编写51单片机中断程序,执行过程是怎样的?的更多相关文章

  1. 51单片机中断interrupt……using……

    51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using ...

  2. C语言编写的bmp读写程序

    C语言编写的bmp读写程序 建议先把bmp的数据存储格式了解下 <span style="font-size:16px;">#include "Windows ...

  3. Windows程序执行过程

    Windows应用程序: WinMain函数(入口函数): 1. 设计窗体类,注冊窗体类.WNDCLASS 2. 创建窗体,显示及更新窗体. 3. 消息循环. 窗体过程函数(回调函数):WindowP ...

  4. MFC程序执行过程剖析

    一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...

  5. MFC程序执行过程剖析(转)

    一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...

  6. Java程序执行过程及内存机制

    本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用.此外还会介绍Java程序所占用的内存是被如何管理的:堆.栈和 ...

  7. ET 与RETI 基于51单片机中断跳出指令“RETI”浅议

    最近在基于51单片机编程的过程中出现了个很奇怪的问题“程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断”.在有过单片机中断编程经历者都知道当EA=1,ET0=1的 ...

  8. Leaf - 一个由 Go 语言编写的开发效率和执行效率并重的开源游戏服务器框架

    转自:https://toutiao.io/posts/0l7l7n/preview Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏 ...

  9. 【C语言】关于单片机中断详解

    什么是中断?就是打断当前要做的事,转而去执行别的事情.比如小七我现在正在电脑前写帖子,突然老妈叫我帮她下楼拿点东西,于是我就收到了老妈给我的一个中断(可以叫做外部中断),当我去拿东西时,突然尿急(内部 ...

随机推荐

  1. URAL 1349 Farm

    Discription Here is a farm. Here is a farmer that counts how many animal live in his farm: a camels, ...

  2. [Contest20180116]随机游走

    题意:给一棵树,多次询问$a$到$b$期望步数,每一步都是随机的 对期望DP了解更深入了一些 先预处理$up_x$表示从$x$走到$fa_x$的期望步数 可以直接往上走,也可以先去儿子再回来,设$x$ ...

  3. 【kmp算法】hdu4763 Theme Section

    kmp中next数组的含义是:next[i]表示对于s[0]~s[i-1]这个前缀而言,最大相等的前后缀的长度是多少.规定next[0]=-1. 迭代for(int i=next[i];i!=-1;i ...

  4. openresty总结

    协程 1.例如当获取的数据没有前后依赖关系时,可以使用ngx.thread.spawn和ngx.thread.wait同时从数据库不同的库.表或者不同来源(mysql,redis等)获取数据. htt ...

  5. SpingMVC实现操作的第一方式

    (一) 使用SpringMVC框架的步骤 (1):在web.xml中配置前端控制器 (2):在Spring-servlet.xml中配置 配置处理器映射器HandlerMapping(处理器Handl ...

  6. 静态NAT地址转换

    1.配置路由器端口ip(两个端口需要设置两个网段) Router(config)#inter f0/1 Router(confiog-if)#ip add 202.1.1.2 255.255.255. ...

  7. React Native Navigator组件回调

    在push的时候定义回调函数: this.props.navigator.push({ component: nextVC, title: titleName, passProps: { //回调 g ...

  8. redis系列文章

    http://blog.csdn.net/liubenlong007/article/details/53690103

  9. JNI之数组

    Array Operations -- 数组操作 1.GetArrayLength jsize GetArrayLength(JNIEnv *env, jarray array); Returns t ...

  10. Android开发工具

    Android开发工具: AndroidDevTools: 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. ...