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. Visual Studio 2017 编译Clang

    到http://releases.llvm.org/download.html下载LLVM和clang源码 比如: http://releases.llvm.org/6.0.0/llvm-6.0.0. ...

  2. luogu P1313 计算系数

    二项式定理 组合数取膜 费马小定理 #include<iostream> using namespace std; #define mod 10007 #define int long l ...

  3. python基础-文件处理与函数

    1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...

  4. xshell与虚拟机无法连接

    遇到xshell无法连接到虚拟机的情况,我大概总结为以下几种情况: 1.宿主机或虚拟机中的防火墙阻止了xshell的访问. 关闭宿主机和虚拟机中的防火墙,linux虚拟机中的防火墙关闭为 :servi ...

  5. jQuery当中的事件(第六章ppt)

    bink绑定事件 hover合成事件 代码示例: <!DOCTYPE html> <html> <head> <title>test1.html< ...

  6. Shell中 调用/引用/包含 另外的脚本文件的两种方法

    脚本 first (测试示例1) #!/bin/bash echo 'your are in first file' 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 s ...

  7. 【mybatis】mybatis中insert 主键自增和不自增的插入情况【mysql】

    主键不自增:返回值是插入的条数 <insert id="add" parameterType="EStudent"> insert into TSt ...

  8. Linux tftp配置

    TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现. xinetd(eXtended InterNET services daemon)是新一代的网络守护进程服务程序,又叫超级INTE ...

  9. javascript快速入门13--BOM——浏览器对象模型(Browser Object Model)

    什么是BOM? BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对 ...

  10. 一起來玩鳥 Starling Framework(4)TouchEvent,Touch,以及TouchPhase

    這一篇來介紹一下TouchEvent.我們先來談單點的touch,下一篇再介紹MultiTouch.翻過Starling文件的應該會發現,Starling裡面沒有MouseEvent,而是整合在Tou ...