精华内容
下载资源
问答
  • MCS—51系列单片机内部只有两个外部中断源输入端,当外部中断源多于两个时,就必须进行扩展,下面介绍两种简单的扩展方法: 一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效...
  • 51单片机两个16位定时器/计数器:定时器0P3.4 定时器1 P3.5 3.0 RXD串行口输入 3.1 TXD 3.2 外部中断0 3.3 外部中断1 3.4 T0 3.5 T1 3.6 WR外部写控制 3.7 RD外部读控制 我们通过单片机的晶振频率得知其...

    定时器对片内时钟脉冲计数,计数器对外部脉冲计数。
    51单片机有两个16位定时器/计数器:定时器0P3.4 定时器1 P3.5

    3.0 RXD串行口输入
    3.1 TXD
    3.2 外部中断0
    3.3 外部中断1
    3.4 T0
    3.5 T1
    3.6 WR外部写控制
    3.7 RD外部读控制

    我们通过单片机的晶振频率得知其时钟周期,再尤其乘以12得到机器周期。每一个机器周期在寄存器内+1,直到加满溢出产生中断

    100MHZ
    周期=1/频率 t=1/100M=10^-8(s)=10ns

    1.在定时模式,每经过一个机器周期,计数器的值就加一,寄存器装满的时候溢出
    单次最高定时时间为65535*1.085us

    2.在计数模式P3.4 P3.5每来一个脉冲计数寄存器加一

    TCON(定时控制寄存器)--------启动定时计数器(可位寻址)
    TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
    TF1:T1溢出标志位,当定时计数器溢出时由硬件置一
    TR1:定时器TI运行控制位,等于1就允许计数
    IE0/1:外部中断申请标志位。0–没有申请
    IT0/1:外部中断请求的触发方式选择位。0—低电平有效 1—负跳变有效


    TMOD(定时模式寄存器)--------设置定时计数器工作模式(不可位寻址
    GATE C/T M1 M0 GATE C/T M1 M0
    GATE:控制T1,为1时只有在3.3脚为高及TR1置1时才启动T1
    C/T:置1时T1做计数器,0为定时器
    M1、M0:
    M1 = 0、M0 = 0时,工作模式0
    M1 = 0、M0 = 1时,工作模式1,此时由TH1、TL1组成16位计数器
    M1 = 1、M0 = 0时,工作模式2,8位自动重装定时器
    M1 = 1、M0 = 1时,工作模式3,T1计数


    SCON(串行口控制寄存器)
    SM0 SM1 SM2 REN TB8 RB8 TI RI
    SM2:多机通信 0双机 1多机
    REN:接受控制 0禁止 1允许
    TB8:发送数据第九位
    TI:发送中断标志位
    SM0\SM1:工作方式选择位
    0 0 移位寄存器 fosc/12
    0 1 10位异步收发 可变
    1 0 11位异步收发 fosc/64或fosc/32
    1 1 11 可变

    展开全文
  • 而很多现实场景需要有多外部中断同时进行,这时候单片机自带的外部中断端口可能就不够用了,那么,怎么解决这问题呢,本文将会用最典型的51单片机为例,介绍种较简单的拓展外部中断的方法。

    前言

    为什么要拓展外部中断

    在很多单片机中,外部中断的个数都是有限的,而很多现实场景需要有多个外部中断同时进行,这时候单片机自带的外部中断端口可能就不够用了,那么,怎么解决这个问题呢,本文将会用最典型的51单片机为例,介绍两种较简单的拓展外部中断的方法。

    解决方案

    例题

    按下按键1执行程序a;按下按键2执行程序b,按下按键3执行程序c,按下按键4执行程序d; 注意:

    1. 每个按键具有独立性,例如按键2执行完后还能按下按键1,继续执行按键1的程序;
    2. 程序有独立性,例如:在执行按键1的程序过程中,按下其他按键,可以跳到其他按键的程序,不必等待按键1程序执行完

    第一种 外部中断的硬件拓展

    设计思路:外部中断的前提是在P3.2或者P3.3引脚收到外部中断请求。所以只要能让这里的中断源在触发的同时也能触发P3.2或者P3.3引脚,中断成立。

    实现代码: (没有特殊要求,正常写就行)

    #include <reg51.h>
    unsigned char key;
    sbit K1=P1^0;
    sbit K2=P1^1;
    sbit K3=P1^2;
    sbit K4=P1^3;
    
    void one(){}
    void two(){}
    void three(){}
    void four(){}
    
    void main()
    {
    	IT0=0;
    	EX0=1; 
    	EA=1;
    	while(1)
    	{
    		switch(key)
    		{
    			case 1:one();break;
    			case 2:two();break;
    			case 3:three();break;
    			case 4:four();break;
    		}
    	}
    }
    void Int0()	interrupt 0
    {
    	if(K1==0)
    	{
    		while(K1==0);
    		key=1;
    	}
    	if(K2==0)
    	{
    		while(K2==0);
    		key=2;
    	}
    	if(K3==0)
    	{
    		while(K3==0);
    		key=3;
    	}
    	if(K4==0)
    	{
    		while(K4==0);
    		key=4;
    	}
    }
    

    PDS仿真图:(这个是重点)

    在这里插入图片描述
    这里我是将P3.2引脚通过二极管与按键接在了一起,这样每次按下按键的同时,这条电路为通路,P3.2引脚被接地,中断信号有效,则中断成功。

    第二种 用定时器/计数器代替外部中断

    因为单片机的定时器/计数器本质上就是个加一计数器,当T0或者T1溢出的时候会请求中断。所以根据这个原理,先把定时器/计数器设置成计数模式,初始值为满值,把外部中断源输入到P3.4或者P3.5引脚,这样每输入一个下降沿,都将TF0/TF1置1,中断成立。

    实现代码:

    #include <reg51.h>
    unsigned char key;
    sbit K1=P3^2;
    sbit K2=P3^4;
    sbit K3=P3^3;
    sbit K4=P3^5;
    void one(){}
    void two(){}
    void three(){}
    void four(){}
    
    void main()
    {
    	TMOD=0xee;
    	TH0=0xff;
    	TL0=0xff;
    	TH1=0xff;
    	TL1=0xff;
    	TR0=1;
    	TR1=1;
    	ET0=1;
    	ET1=1;
    
    	IT0=0;
    	EX0=1;
    	IT1=0;
    	EX1=1;
    	 
    	EA=1;
    
    	while(1)
    	{
    		switch(key)
    		{
    			case 1:one();break;
    			case 2:two();break;
    			case 3:three();break;
    			case 4:four();break;
    		}
    	}
    }
    
    void Int0()	interrupt 0
    {
    	if(K1==0)
    	{
    		while(K1==0);
    		key=1;
    	}
    }  
    void t0() interrupt 1
    {
    	if(K2==0)
    	{
    		while(K2==0);
    		key=2;
    	}
    }
    
    void Int1()	interrupt 2
    {
    	if(K3==0)
    	{
    		while(K3==0);
    		key=3;
    	}
    }
    void t1() interrupt 3
    {
    	if(K4==0)
    	{
    		while(K4==0);
    		key=4;
    	}
    }
    
    

    PDS仿真图:(注意引脚)

    在这里插入图片描述
    这里我先将两个定时器/计数器设置为工作方式2并且储值设满(因为是八位的所以最大计数值= 2^8=256),当接在P3.4或者P3.5引脚有电平发生负跳变时(即按钮按下),对应计数器加1产生溢出,发出中断请求,同时,计数器恢复初值(满值)。这样,P3.4或者P3.5引脚每输入一个下降沿(即按钮按下),都将会让对应计数器发出中断请求。

    总结

    以上就是单片机外部中断拓展的两种思路,这两种方法比较容易理解也较容易实现,但是各有各的利弊。

    方法一的利弊

    方法一在代码上没有过多的要求,按照平时书写就能实现。
    缺点在于成品的连接,在一般的单片机学习板上并没有能实现这种方法的连接,所以只能用仿真来模拟。
    优点是程序简洁,占用内存小,而且没有中断源数量的限制,甚至可以只使用一个中断触发端口(P3.2/P3.3),其余的I/O端口都可以作为中断源。

    方法二的利弊

    缺点是程序繁琐,调用资源多,而且有中断源数量的限制,最多只能有“中断端口数+定时器/计数器端口数”个中断源。
    优点是接线简单明了,在一般的单片机学习板上就能实现,不用额外接线。

    后记
    本人是电竞专业大一在读,从高中开始自学c语言和单片机,第一次发文难免有不足之处,如果有哪里不对的地方还请各位大大不吝指教

    展开全文
  • 51单片机利用两个外部中断(和一个定时器)计算两个中断的时间间隔的C语言程序。谢谢了 。万分感谢。。。
  • 51单片机中断

    2020-12-24 22:42:39
    另一类是内部终端源,包括两个定时器/计数器(T0和T1)的溢出中断(TF0和TF1)和串行口的发送/接收中断(TI/RI)。 特殊功能寄存器 51单片机有4个专用寄存器用于中断的控制,这四个寄存器分别为定时器/计数器控制...

    51单片机的中断

    总序

    51中断源分为两种类型,一类是外部中断源,其中包括INT0和INT1;另一类是内部终端源,包括两个定时器/计数器(T0和T1)的溢出中断(TF0和TF1)和串行口的发送/接收中断(TI/RI)。

    特殊功能寄存器

    51单片机有4个专用寄存器用于中断的控制,这四个寄存器分别为定时器/计数器控制寄存器(TCON)、串行口控制寄存器(SCON)、中断允许控制寄存器(IE)、中断优先级控制寄存器(IP)。

    1. 定时器/计数器控制寄存器
      RAM	88H
      TR0TR1用于定时器/计数器启动控制
      IT0IT1为外部中断请求信号方式控制位IT=1为脉冲触发(下降沿),IT=0为低有效电平触发
    IT0=0  	//外部中断0的中断触发信号方式为脉冲方式
    IT1=1	//外部中断1的中断触发信号方式为电平方式
    

    IE0(IE1)为外部中断的请求标志位,当CPU检测到P3.2(P3.3)端有中断信号时,由硬件置位,使IE=1,请求中断中断程序响应后,根据不同中断触发方式,有不同的清除方式。
    TF0(TF1)为定时器/计数器溢出标志位,中断程序执行后,由硬件自动清0。如果使用查询方式,此位作为状态位供查询,查询后需软件清0;

    while(TF0==1)
    {
    TF0=0;
    //
    }
    

    TR0(TR1)定时器/计数器运行控制位;
    TR0(TR1)=0 时停止定时器/计数器工作
    TR0(TR1)=1 时启动定时器/计数器工作。
    该为需要用软件使其置1或清0

    1. 中断允许控制寄存器(IE)
      RAM	A8H
      EA 中断允许控制寄存器
      ES 串口中断允许位
      ET1(ET0) 定时器/计数器1(0)中断允许位
      EX1(EX0) 外部中断1(0)中断允许位
      3.中断优先控制寄存器(IP)
      RAM	B8H
      单片机由两个中断优先级:高级中断和低级中断
      PS 串口中断
      PT1(PT0) 定时器/计数器1(0)中断
      PT1(PT0) 外部中断1(0)中断
    PT1=1;		//设置定时器/计数器1中断位高级中断
    PS=0;		//设置串口中断位低级中断
    
    1. 串口控制寄存器(SCON)
      RAM 98H
      其中高6位位串口控制,将在串口部分介绍。
      TI 串口发送中断标志位,发送完一帧串行数据后,由硬件置1,其清0必须有软件完成
      RI 串口接收中断标志位,接收完一帧串行数据后,由硬件置1,其清0必须有软件完成
      RI与TI二者任一置1都可以产生串口中断请求

    中断优先级与中断函数

    1. 中断优先级
      (1).中断优先级高的能够中断优先级低的中断服务;
      (2).相同优先级的中断源之间不能相互中断对方的中断服务;
    2. 中断函数结构
      函数类型 函数名()interrupt n [using n]
      n为中断号
      0 外部中断0
      1 定时器/计数器溢出中断0
      2 外部中断1
      3 定时器/计数器1溢出中断
      4 串行口发送/接收中断

    外部中断0函数示例

    void InitialInt0(void)		//外部中断0初始化函数
    {
    	EA=1;	//使能总中断
    	IT0=1;	//触发方式为下降沿触发
    	EX0=1;	//使能外部中断0
    }
    void	Int0(void)	interrupt 0
    {
    	//此处填写中断执行程序
    }
    
    

    第一次写博客,如有什么错误或建议,还望大佬指出

    展开全文
  • 摘要:VC/C++源码,系统相关,51单片机 51单片机中断实验C源码,两个实验:1、外中断计数2位数码管显示;2、外中断计数器。用LED数码管显示计数器T0的计数值,包含51单片机寄存器定义的头文件。
  • 51单片机的外部中断种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一机器...
  • 51单片机的外部中断

    千次阅读 2010-07-13 19:30:00
    51单片机外部中断只需设置两个寄存:中断允许寄存器IE和中断控制寄存器TCON。 外部中断两个:外部中断0、外部中断1。外部中断0是管脚P3.2,外部中断1是管脚P3.3。 #include void delay(){ int x,y; for(x=0;x...
  • 80C51单片机有5个中断源2个中断优先级它的中断处理程序可实现级嵌套有较强的中断处理能力 单片机对中断系统的管理是通过相关的专用寄存器来实现的 ;一中断源及相关的专用寄存器;一中断源及相关的专用寄存器;180C...
  • MCS—51系列单片机内部只有两个外部中断源输入端,当外部中断源多于两个时,就必须进行扩展,下面介绍两种简单的扩展方法。
  • 51单片机的外部中断种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一机器...
  • 51单片机——中断

    2019-04-19 16:27:32
    中断源 称为终端类型 ,单片机能够识别的中断种类和个数 mcs51 串口中断 两个外部中断 定时器中断 中断服务子函数 : 中断信号产生后,cpu 需要执行的函数 中断函数 必须烧写到固定地址 以便于终端产生...
  • 51单片机外部中断

    2014-10-02 14:54:00
    使用这两个中断的步骤如下 1.配置中断类型 IT-X 为1代表对应IO口下降沿中断为0代表对应IO口低电平中断 注意低电平中断进入之后如果IO口不取消低电平,单片机会不停地进中断 2.打开对应的中断开关 EX-X,为1...
  • MCS-51单片机有多个中断源,以8051为例,有5个中断源,两个外中断、两个定时中断和一个串行中断,这一节我们讨论外中断软件编程。
  • #51单片机#中断

    2020-02-17 20:54:37
    标准的51单片机两个控制中断的寄存器。一个是中断使能寄存器,另一个是中断优先级寄存器。 IE——中断使能寄存器的位分配(地址0XA8,可位寻址 ) 位 7 6 5 4 3 2 1 0 符号 EA —— ET2 ES ET1 EX1 ET0 EX...
  • 51单片机2外部中断的应用

    千次阅读 2016-01-25 11:48:34
    ;51单片机的P1口上接有8只LED。;在外部中断0输入引脚P3.2接有一只按钮开关K1。;在外部中断1输入引脚P3.3接有一只按钮开关K2。;要求K1和K2都未按下时,P1口...两个中断的优先级相同。;===============================
  • 51单片机中断系统

    千次阅读 2019-03-25 18:38:39
    MCS-51单片机设置了5个中断源,其中内部有3个中断源,包括定时/计数器T0、T1和片内串口,外部有两个中断请求输入,当系统产生中断时,5个中断源的中断请求标志分别由特殊功能寄存器TCON和SCON的相应位来锁存。...
  •  外中断是由外部原因引起的中断,有两个中断源。即外中断0(INT0)和外中断1(INT1),中断请求信号由引脚P3.2(INT0)和P3.3(INT1)输入。  外中断请求信号有两种方式,一是电平方式,二是脉冲方式。可通过有关...
  • 51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的...
  •  外中断是由外部原因引起的中断,有两个中断源。即外中断0(INT0)和外中断1(INT1),中断请求信号由引脚P3.2(INT0)和P3.3(INT1)输入。  外中断请求信号有两种方式,一是电平方式,二是脉冲方式。可通过有关...
  • 51单片机中断优先级及中断嵌套

    千次阅读 2013-10-23 16:38:30
    51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的...
  • 51单片机 串口通信 中断

    千次阅读 2011-03-01 16:01:00
    从一段程序开始 实现电脑向单片机发送一些数据,单片机返回相同的数据 #include #define uchar unsigned ...//设置T1定时器工作方式为2 8位初值自动重装的8位定时器 这里设置了两个计数器的工作方式 TH1=0xfd
  • 51单片机具有5个中断源,其中有两个外部中断INT0、INT1。 1、外部中断0:INT0,其对应的引脚为P3^2。 #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit k3=P3^2; //定义按键...
  • MCS-51单片机有多个中断源,以8051为例,有5个中断源,两个外中断、两个定时中断和一个串行中断,我们讨论外中断软件编程。
  • 51单片机串口中断实验 串口向外部发送“齐鲁工业大学”六个字,一个汉字占用两个字节,六个字占用12个字节。 #include <reg51.h> unsigned char s[] = "齐鲁工业大学"; // 延时函数 void ...
  • 51单片机中断系统

    2017-04-01 21:01:33
    一、单片机中断系统 1、基本特点 有5个固定的中断源,其中3个在片内,2个在片外,它们在程序存储器ROM中都分别有各自固定的中断入口...对于8052单片机来说,增加了第三个中断源:定时器/计数器T2的中断; 外部中断源:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 449
精华内容 179
关键字:

51单片机两个中断