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. 嵌入式C语言编写51单片机控制电机转速

    使用C语言进行编程,51单片机利用PWM技术控制电机转速 1.仿真图如下 2.程序如下: #include <reg52.h> #include <intrins.h> #in ...

  2. 51单片机扩展io口C语言编写,51单片机扩展IO口后扩展口的地址如何确定

    1. 然后它说8255的A口.B口.C口.控制寄存器的地址分别为7FFCH.7FFDH.7FFEH.7FFFH.这个是怎么算出来的? 高八位7F是因为p2.7为0是选通8255的cs片选端,第八位是F ...

  3. c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序

    当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章 用51单片机中断编写的4x4键盘程序 作者:未知   来源:山涧一溪流   点击数:-  更新时间:2014年06 ...

  4. 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管

    设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序). #inc ...

  5. 单片机c语言reti的用法,基于51单片机中断跳出指令“RETI”浅议

    原标题:基于51单片机中断跳出指令"RETI"浅议 =RET指令+通知CPU中断服务已结束. 最近在基于编程的过程中出现了个很奇怪的问题"程序执行中在寄存器EA=1,ET ...

  6. 编写51单片机程序,输出方波,at89s52的单片机

    编写51单片机程序,输出方波. 要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = 5kHz.P1.0 ...

  7. 24c512 c语言程序,24C32~24C512的51单片机读写程序

    24C32~24C512的51单片机读写程序 来源:-- 作者:-- 浏览:3875 时间:2016-08-10 14:18 标签: 摘要: AT89S52 晶振频率为11.0592MHz 指令周期: ...

  8. 51单片机 | 中断系统

    文章目录 一.中断介绍 1.中断概念 二.中断结构及相关寄存器 1.中断结构 2.中断相关寄存器   这一节专门介绍 51单片机的中断系统,为后面学习外部中断.定时器中断.串口中断做好铺垫. 一.中断 ...

  9. 51单片机中断系统实验

    51单片机中断系统实验 一.实验内容 INT0端接单次脉冲发生器.按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转. 根据实验内容编写一个程序,并在实验系统 ...

最新文章

  1. Note:一些优化建议
  2. django model中的meta类
  3. 数据库设计原则【转】
  4. java自学手记——继承
  5. AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront(三)
  6. java 数组练习题,Java练习题 - 数组01
  7. Winform中导出Excel数据量百万级的处理办法-导出为csv文件
  8. Android 自定义控件 按钮滚动选择
  9. python数据库execute返回值_selenium+python自动化101-使用execute_script() 方法获取 JavaScript 返回值...
  10. 【JOURNAL】集花酒联
  11. java kafka分布式_JavaWeb项目架构之Kafka分布式日志队列
  12. SLAM之g2o安装
  13. python函数定义及调用-Python函数的基本定义和调用以及内置函数
  14. 计算机专业可以从事什么工作?
  15. could not establish connection to “hostname”
  16. 如何将大硬盘对拷到小硬盘
  17. bootstrap collapse切换改变图标
  18. 使用CDN加速的优点
  19. 参考文献起止页码怎么写_期刊作为参考文献要求有年卷期和起止页码,怎么查这些页码什么的...
  20. 弘辽科技:参加拼多多九块九活动有什么用?活动流程是怎样的?

热门文章

  1. Echarts自定义数据视图(DataView)-按钮名称-刷新方法
  2. 塔式、机架式、刀片式服务器
  3. HDU 1114 Piggy-Bank 猪仔储钱罐(完全背包)
  4. C语言:甲乙丙三人放鞭炮,求鞭炮响声问题
  5. Linux基础篇之权限的设定
  6. C 实现FFT与IFFT
  7. c语言笔试程序改错题,C语言笔试--程序改错题.doc
  8. Selenium学习 - TouchActions接口
  9. AutoCad 修改多段线
  10. SQL一对多,子表关联查询