【C51自学笔记】中断系统

发布者:玉立风华最新更新时间:2022-03-09 来源: eefocus关键字:C51  自学笔记  中断系统 手机看文章 扫描二维码
随时随地手机看文章

中断

中断概念与中断触发:

中断的概念:


CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);


CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);


待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。


引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统


结构:

中断嵌套:在中断中再次响应一个中断。


引起CPU中断的根源,称为中断源。


TNT0、TNT1:外部中断0,外部中断1。各含两种触发方式。


T0,T1:定时器0,定时器1


RX、TX:串口中断


IE:中断开关


EX0,EX1 ET0 ET1 ES :每个中断源自己的开关

EA:总中断开关

TCON中的IT0 IT1:两种触发方式:低电平有效或延下降沿有效

中断源:

(这里仅讲外部中断的触发,定时器与串口的触发放在定时器和串口通信中)


1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。


2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。


中断号:优先级越高,中断号越小 (0 1 2 3 4)


中断允许控制:

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

EX0(IE.0),外部中断0允许位;


ET0(IE.1),定时/计数器T0中断允许位;


EX1(IE.2),外部中断0允许位;


ET1(IE.3),定时/计数器T1中断允许位;


ES(IE.4),串行口中断允许位;


EA (IE.7), CPU中断允许(总允许)位。


上述位:1:允许  0:禁止


中断请求标志:


(可手动控制中断请求的标志,例如: IT0= 0 下降沿方式无效 低电平触发才有用)


IT0(TCON.0),外部中断0触发方式控制位。


        当IT0=0时,为电平触发方式。


        当IT0=1时,为边沿触发方式(下降沿有效)。


IE0(TCON.1),外部中断0中断请求标志位。


IT1(TCON.2),外部中断1触发方式控制位。


IE1(TCON.3),外部中断1中断请求标志位。


TF0(TCON.5),定时/计数器T0溢出中断请求标志位。


TF1(TCON.7),定时/计数器T1溢出中断请求标志位。      


中断优先级:

原则:


CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。


正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。


正在进行的低优先级中断服务,能被高优先级中断请求所中断。


为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。


中断处理过程:

中断源有中断请求;


此中断源的中断允许位为1;


CPU开中断(即EA=1)。


如何使用中断:


你想使用的中断是哪个?选择相应的中断号;(中断号对应中断的方式)


你所希望的触发条件是什么?(下降沿 低电平)


你希望在中断之后干什么?(写入函数中)


注意:


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


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


IT0=0/1;//设置外部中断的触发方式


中断服务函数:


void   fun_name   ()  interrupt   0  {


}


应用:


 #include

#define uchar unsigned char 

#define uint unsigned int 

 

sbit led0=P0^0;

 

unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

 

void delay_50ms(uint t)

{

uint j;

for(;t>0;t--)

for(j=6245;j>0;j--);

}

 

void main()

{

uchar i;

 

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

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

IT0=1; //触发方式设置

 

while(1)

{

for(i=0;i<10;i++)//数码管在自己跳动

{

P1=smg_du[i];

delay_50ms(10);

}

}

//中断怎么触发的:P3^2引脚低电平

//查电路图得:KEY1 按键被按下实现P32低电平

void int0 () interrupt 0//中断触发结果:led0被点亮

{

led0=0;

delay_50ms(20);

led0=1;

}

关键字:C51  自学笔记  中断系统 引用地址:【C51自学笔记】中断系统

上一篇:【C51自学笔记】定时器
下一篇:【C51自学笔记】数码管(静态与动态显示)+74HC138+点阵的动态显示

推荐阅读最新更新时间:2024-11-12 19:16

C51编程5-输入电平(矩阵键盘)
独立按键,一个按键需要占用一个I/O口,如果需要16个按键,那么就会 占用16个I/O口,占据MCS-51系列单片机一半的I/O口。 理论基础 为了解决I/O这个问题,设计出了矩阵键盘,下图是一个4*4的矩阵键盘原理图。 按键按照4*4的格局进行摆放,组成4行4列,将按键的同行或同列连接在一起,分别连接到P1口。 怎么才能识别是哪个按键被按下呢? 以上图的S1为例,当按键被按下S1导通,P17与P13导通,可以通过判断P17与P13端口的电平是否一致,判断按键是否被按下。 可以先设置P13(检测端口)电平为高电平,假设P17(驱动端口)为低电平,当按键按下,按键导通,读取P13的电平可以读到低电平。
[单片机]
<font color='red'>C51</font>编程5-输入电平(矩阵键盘)
C51编程总结-单片机的奇怪知识1(IC输入输出电压)
在使用单片机中过程,我们肯定对数字信号的“0”与“1”,有了深刻的影响,一般来说高电平位“1”为5V(对于5V VCC的单片机来来说),低电平“0”是0V。 实际上我们可能使用供电电压3.3V的芯片,高电平“1”的电压是3.3V。使其与单片机进行交换数据,,这个时候5V单片机能够正常识别到3.3V芯片的 “1”吗? 3.3V芯片与5V单片能不能正常交换数据 IC输入输出电压(也常被成为I/O识别电压),不是看VCC。而是看输入输出电压 我们可以在IC的规格书上查看到相关的参数。以下是CH340部分电气参数。 从表格可以知道,相关输入输出电压有四个参数,分别是 注:看输入输出电压,需要看两个芯片的输入输出电压,
[单片机]
<font color='red'>C51</font>编程总结-单片机的奇怪知识1(IC输入输出电压)
单片机60s倒计时c51程序
#include reg51.h #define uchar unsigned char sbit P13=P1^3; sbit P14=P1^4; uchar c,i,a=60,z; uchar code Numcode ={0XC0,//;0 0XF9,//;1 0XA4,//;2 0XB0,//;3 0X99,//;4 0X92,//;5 0X82,//;6 0XF8,//;7 0X80,//;8 0X90,//;9 }; void delay(z) { while(z--); }
[单片机]
C51单片机IO口操作
对于C51单片机来说,对IO口的操作既可以8位整体操作,也可以进行位操作。 实例如下: 对P0口赋值: 1. 整体操作:P0=0xFF; 2. 位操作: P0^0=1; P0^1=1; P0^2=1; P0^3=1; P0^4=1; P0^5=1; P0^6=1; P0^7=1;
[单片机]
C51—小知识点
1-write总线:和IIC总线类似,是一种通信方式,主机对1-Wire总线的基本操作分为复位、读和写三种。总线上接上拉电阻。对时序的要求比较严格 ROM指令、操作协议: 晶振: CCH:控制信道(CCH)是用于传送信令信息和短的分组数据的信道。 占空比:占空比是指一个脉冲循环内,通电(高电平)时间相对于总时间所占的比例。 PWM:脉冲宽度调试技术,通过对一系列脉冲宽度进行调节来改变来等效获得所需波形 上、下拉电阻:如果一个线路中的电压处于不确定的状态(例如一个引脚不和任何其它回路连通时),那我们就说它的电压是浮动的,他会随着时间不断变化,跳动,而且很容易受到外界环境的影响。处于这种不确定状态的电路会被随机解释为高
[单片机]
ds1302的C51驱动
#include D:\reg51.h //头文件 #define uchar unsigned char uchar settime ={1,2,3,4,5,6,7}; uchar readtime ; //********************************************************************* sbit T_CLK = P1^1; //实时时钟时钟线引脚 sbit T_IO = P1^0; //实时时钟数据线引脚 sbit T_RST = P1^2; //实时时钟复位线引脚 //************************************************
[单片机]
C51(DHT11)温湿度+LCD1602
前言:软件延时真的很坑,校园网真的很烂 直接上码 LCD1602部分 (1).LCD1602.C #include reg52.h #include LCD1602.h #include INTRINS.h sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_E=P2^7; #define LCD_DatrPort P0 //指令函数 void LCD_WeitrCommand(unsigned char Command) { LCD_RS=0;//0写指令,1写数据 LCD_RW=0;//write mode LCD_DatrPort=Command; LCD_E
[单片机]
<font color='red'>C51</font>(DHT11)温湿度+LCD1602
C51单片机中断函数的修饰方法
interruptm修饰符 C51中断函数必须通过该修饰符进行修饰。在C51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按51系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。 【例】编写一个用于统计外中
[单片机]
<font color='red'>C51</font>单片机中断函数的修饰方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved