51单片机中断代码解释
51单片机的中断服务

80C51单片机中断系统结构图’中断的类型和应用(个人理解):1、外部中断(INT0、INT1):直接可以由单片机外围设备的变化导致外部中断接口(P3^2、P3^3)电平变化(低电平和下降沿)触发,可由外部控制。
2、定时器中断(T0、T1、T2):直接由软件设置的定时的内部中断,按照指定的时间计满数触发。
3、串口中断(TI、RI):应用在串口通信,把数据发送标志位TI和接收位RI置0。
一、外部中断1、外部中断(INT0、INT1)的初始化设置的步骤:**************************************(1)首先设置这些外部中断优先级PX0=1/0;PX1=1/0(1为高级,0为低级);【默认为0】(2)其次要开总中断EA=1;【默认为0】(3)设置外部中断触发方式:IT0 = 1(下降沿触发)/0(低电平触发)、IT1=1(下降沿触发)/0(低电平触发);【默认为0】(4)再开启外部中断使能:EX0=1(外部中断0)或EX1=1(外部中断1)【默认为0】(5)中断请求标志(不需人为设定,机器自动设置):EI0=1/0;(外部中断0中断请求标志)EI1=1/0;(外部中断1请求标志)【1表示处于中断请求状态,0表示无该中断请求,在电平触发方式时,在相应的中断端口检测到低电平时置1】(6)只要对应中断的接口(INT0或INT1)接受到有效电平(至少持续两个机器周期的低电平(电平触发方式)或下降沿(下降沿触发方式))它就启动。
2、外部中断涉及的寄存器(1)IP(中断优先级寄存器)(2)IE(中断允许寄存器)(3)TCON(中断控制和标志寄存器)3、外部中断的应用#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbitdula=P2^6;sbitwela=P2^7;sbit d1=P1^0;ucharnum;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);void main(){EA=1;//开总中断EX0=1;//开外部中断0//IT0=1;TCON=0x01;wela=1;//11101010P0=0xea;wela=0;while(1){for(num=0;num<16;num++){d1=1;dula=1;P0=table[num];dula=0;delay(1000);}}}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void exter0() interrupt 0{d1=0;}4、外部中断的电平触发和下降沿触发的区别:选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。
51单片机中断函数基础

51单片机-中断函数基础
单片机中断按照中断源类型的不同主要分为:外部中断、定时器中断、串口中断
而因为电路板上可能存在多个定时器或多个引起外部中
断的位置,所以产生多个中断源,也因此单片机有多个
中断函数
以51单片机为例:
====================================
中断编号
中断源
外部中断0
1
T0定时器溢出中断
2
外部中断1
3
T1定时器溢出中断
4
串口中断
====================================
C程序中使用中断的方法
EA=1;
//打开中断总开关
ET0=1;
//打开T0定时器中断
while(1)
{
//your code
}
//定义中断处理函数(程序会自动调用)
void InterruptTimer0() interrupt 1
{
//关键词interrupt后面的1表示中断函数编号 //your code
//当T0定时器溢出(即截获中断)时,执行InterruptTimer0中断处理函数,执行完毕后程序将从
while中发生中断的位置继续往下执行}。
51单片机的中断系统

(4)DATA(数据地址赋值)伪指令 格式为: 字符名称 DATA 表达式 ORG 0200H AA DATA 35H DELAY XDATA 0A7E6H MOV A,AA ;A←(35H) ┇ LCALL DELAY ;调用07E6H子程序 ┇ END
(5)DB(定义字节)伪指令 格式为: [标号:]DB 项或项表 (6)DW(Define Word) 伪指令 格式为: [标号:]DW 项或项表 (7)DS(定义存储空间)伪指令 DS(Define Storage) 伪指令 格式为: [标号:] DS 表达式 (8)BIT(位地址赋值)伪指令 格式为: 字符名称 BIT 位地址
§4.5 MCS-51单片机对中断系统的初始化 中断系统的初始化一般有以下3步: 开放相应中断源; 设定该中断源的中断优先级; 对于外部中断源,还要设定中断触发方式 (是低电平触发还是负边沿触发)。
1、外部中断的初始化 采用位操作指令 SETB EA SETB EX0 SETB PX0 CLR IT0 字节型指令 MOV IE, #81H ORL IP, #01H ANL TCON, #0FDH 外部中断的撤除 CLR EX0
2. 定时器/计数器溢出中断的初始化 SETB EA SETB ET0 SETB PT0 定时器/计数器溢出中断的撤除 CLR ET0 3. 串行口中断的初始化 SETB EA SETB ES 串行口中断的撤除 CLR ES
§4.8 外部中断实验
实验要求在CPU响应外部中断1的中断请 求后,顺序点亮8支LED;在响应外部中断0 的中断请求后,停止顺序点亮8支LED。
4.1.2 中断源 中断源:引起中断的事件或发出中断请示 的来源。 中断源一般有以下几种: 1. 外部设备中断源 2. 故障中断源 3. 定时器中断源
51系列单片机串口中断

51系列单片机串口中断最近在项目上又做了一次51的串口中断,认为又学习一点新知识,跟大家分享一下。
以前都是用了很简单串口应用,这次主要是要在串口应用的基础上,再做一个自定义的通信协议在里面,所以串口部分在编程的时候遇到一些我以前没有遇到过的情况。
比如:我要连续的输出两个8bit,就出现了只能输出一个,或者是前面的那个或者是后面那个,并且在我连续发送我定义在串口的里面的通信协议的命令的时候出现了串口部分的死机。
在调试的过程中我在每次的传输后面加上了延时是程序,但是并不能根本解决这个问题,但是这个延时程序加上后让我意识到问题是在等待上一个字节的发送上出了问题。
于是我在发送字节后面加上这样的代码:while(!TI)TI=0;这个代码加上后,是暂时解决了问题,但是如果我连续不停的通过串口下我定义的通信协议命令还是会串口死掉,因为我定义的通信协议每次发送不同的命令都要有对应的命令和值返回,那这样在整个过程中,T I一直在被操作。
我个人想法,可能是那个语句在等待TI置位的时候一直不停地在忘里面重写TI的值,所以我又讲上面的代码换成:while(!TI);这回我的想法得到了应证,换成该代码后,所有的一切都达到了我想要的状态。
这里就稍微介绍一下while();循环语句在等待的应用。
在小段的代码里面完全可以加延时程序,但是在大的代码里面,执行时间和效率显的很重要,因为要考虑到整个代码一个大循环的执行时间。
考虑这个时间原因很简单,现在好多项目在开发的时候,看门狗都是用的外部硬件来实现的,如果整个程序的执行时间超过了外部看门狗的复位时间,那情况是可以想象的,而且一旦出现了这样的问题,尤其是新手,一般是不会想到这个问题的。
所以在一些要等待的地方加上一个很有效率的死循环,有时会很有效果。
while 语句解释为,当条件不满足的时候就跳出来,条件满足的时间就一直执行while语句体里面的语句。
而我用的while(!TI);就是让死循环做一个事件就是等TI=1,一旦TI=1也就是条件变成了假,这个时候就跳出了死循环,继续下面的工作。
常见51单片机指令及详解

常见51单片机指令及详解1. 简介单片机是一种集成电路,具备处理和控制功能。
51单片机是指Intel公司推出的一系列8位单片机,常用于嵌入式系统和物联网设备。
本文将介绍一些常见的51单片机指令,并对其进行详解。
2. 数据传送指令2.1 MOV指令MOV指令用于将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。
例如:MOV A, #10 ;将立即数10传送给累加器AMOV R0, R1 ;将寄存器R1的值传送给R02.2 XCH指令XCH指令用于交换两个寄存器或内存位置中的数据。
例如:XCH A, B ;交换累加器A和B的值3. 算术运算指令3.1 ADD指令ADD指令用于将两个操作数相加,并将结果保存在累加器中。
例如:ADD A, B ;将累加器A和寄存器B的值相加,结果存储在A中3.2 SUBB指令SUBB指令用于将第二个操作数的补码与累加器的值相减,并将结果存储在累加器中。
例如:SUBB A, B ;将B的补码与累加器A的值相减,结果存储在A中4. 逻辑运算指令4.1 ANL指令ANL指令用于对两个操作数进行按位与运算,并将结果存储在目的操作数中。
例如:ANL A, B ;将累加器A和寄存器B的值按位与,结果存储在A 中4.2 ORL指令ORL指令用于对两个操作数进行按位或运算,并将结果存储在目的操作数中。
例如:ORL A, B ;将累加器A和寄存器B的值按位或,结果存储在A 中5. 跳转指令5.1 JMP指令JMP指令用于无条件跳转至指定的目标地址。
例如:JMP 2000H ;跳转至内存地址2000H处执行指令5.2 JZ指令JZ指令用于在累加器为零时跳转至指定的目标地址。
例如:JZ 3000H ;当累加器为零时,跳转至内存地址3000H处执行指令6. 输入输出指令6.1 IN指令IN指令用于将外部设备的数据输入到累加器或指定的寄存器中。
例如:IN A, P1 ;将P1端口的数据输入到累加器A中6.2 OUT指令OUT指令用于将累加器或指定的寄存器中的数据输出到外部设备。
第3章MCS-51单片机的中断系统

3.3 MCS-51的中断系统 的中断系统
4、中断响应过程 、 关中断:屏蔽其它中断请求信号。 关中断:屏蔽其它中断请求信号。 保护断点:将断点地址压入堆栈保存,即当前 值入栈 值入栈。 保护断点:将断点地址压入堆栈保存,即当前PC值入栈。 寻找中断源:中断服务程序入口地址送 ,转入中断服务。 寻找中断源:中断服务程序入口地址送PC,转入中断服务。 保护现场:将中断服务程序使用的所有寄存器内容入栈。 保护现场:将中断服务程序使用的所有寄存器内容入栈。 中断处理:执行中断源所要求的程序段。 中断处理:执行中断源所要求的程序段。 恢复现场:恢复被使用寄存器的原有内容。 恢复现场:恢复被使用寄存器的原有内容。 开中断:允许接受其它中断请求信号。 开中断:允许接受其它中断请求信号。 中断返回:执行 指令, 中断返回:执行RETI指令,栈顶内容 指令 栈顶内容→PC,程序跳转回断点。 ,程序跳转回断点。
当前PC入栈 书中作记号 当前 入栈
主程序 执行主程序 中断请求 断点 继续执行主程序 中断返回 执行中断 处理程序 中断响应
中断与转子的区别 中断是随机的, 中断是随机的,转子事先编程决定
3.3.1 中断的定义 2、几个术语 、 主程序:原来正常运行的程序称为主程序。 主程序:原来正常运行的程序称为主程序。 断点: 主程序被断开的位置(或地址)称为“断点” 断点 主程序被断开的位置(或地址)称为“断点”。 中断源:引起中断的原因,或发出中断申请的来源。 中断源 引起中断的原因,或发出中断申请的来源。 引起中断的原因 中断请求:中断源要求服务的请求称为“中断请求” 中断请求 中断源要求服务的请求称为“中断请求” 。 中断源要求服务的请求称为 中断响应: 终止当前执行的程序, 中断响应:CPU终止当前执行的程序,去执行相应中断源 终止当前执行的程序 的中断请求。 的中断请求。 中断服务或中断处理程序: 中断服务或中断处理程序: “中断”之后所执行的相应的处理程序。 中断”之后所执行的相应的处理程序。 中断系统:能够实现中断处理功能的部件。 中断系统:能够实现中断处理功能的部件。
51单片机中断说明及初始化程序

//与定时计数功能和终端功能相关的寄存器共四个,分别为TMOD,TCON,IE,IP,其中TMOD是定时计数功能专用的寄存器,高四位//控制定时器1,低四位控制定时器0;TCON高四位控制定时计数功能,为运行控制位和中断标志位;低四位控制外中断功能,为//中断触发方式控制位和中断标志控制位;IE是各个中断(两个外中断,两个定时器中断和一个串行口中断)允许和总中断允许控//制寄存器;IP为中断优先级控制寄存器,从IP.0--IP.4共五个,从高到低分别控制串行口、定时器1、外中断1、定时器0、外中//断0,谁为1,谁就为高优先级,若都为0或都为1,则按自然优先级来,自然优先级为:外0,定0,外1,定1,串行口;ORG 00HAJMP MAINORG 000BH //定时器0入口地址AJMP TIMER0ORG 001BH //定时器1入口地址AJMP TIMER1ORG 03H //外中断0入口地址AJMP WAI0ORG 13H //外中断1入口地址AJMP WAI1ORG 60HMAIN:MOV SP,#5FHMOV P0,#00HSETB EA //开总中断MOV IP,#06 //设置优先级CALL DINGSHI0CALL JISHU1CALL WAIQ0CALL WAIQ1AJMP $TIMER0:CPL P0.0MOV TH0,#3CHMOV TL0,#0B0HRETITIMER1:CPL P0.1MOV TH0,#3CHMOV TL0,#0B0HRETIWAI0:CPL P0.2RETIWAI1:CPL P0.3RETIDINGSHI0:MOV TMOD,#01H //工作于方式1,16位定时 MOV TH0,#3CHMOV TL0,#0B0HSETB ET0 //开定时器0中断SETB TR0 //定时器0运行控制位RET//计数器0驱动JISHU0:MOV TMOD,#04H //工作于计数方式MOV TH0,#255MOV TL0,#250 //计到10个脉冲产生一次中断 SETB ET0 //开定时器0中断SETB TR0RET//定时器1驱动DINGSHI1:MOV TMOD,#16 //工作于方式1,16位定时MOV TH1,#3CHMOV TL1,#0B0HSETB ET1SETB TR1RETJISHU1:MOV TMOD,#64 //工作于计数方式MOV TH0,#255MOV TL0,#250SETB ET0SETB TR0RET//外中断0驱动WAIQ0:SETB IT0 //下降沿触发,若为0则为低电平触发 SETB EX0 //开启中断RET//外中断1驱动WAIQ1:SETB IT1SETB EX1RETEND。
51单片机中断系统

51单片机中断系统本讲任务:了解中断概念,以外部中断为例讲解中断程序的编写方法。
中断的概念:单片机处理某一事件A时,发生了另一事件B请求(中断求);单片机暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待单片机将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
引起单片机中断的根源或原因:中断源向单片机提出中断请求,中断发生的时刻不能事先确定。
中断优先级:单片机的中断系统一般允许多个中断源,当几个中断源同时向单片机请求中断,要求为它服务的时候,这就存在单片机优先响应哪一个中断源请求的问题。
通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。
单片机总是先响应优先级别最高的中断请求。
中断嵌套:当单片机正在处理一个中断请求源的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。
单片机暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。
中断优先级的三条原则:1:单片机同时接收到几个中断时,首先响应优先级别最高的中断请求。
2:正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
3:正在进行的低优先级中断服务,能被高优先级中断请求所中断。
中断系统相关寄存器:中断源:8051的中断系统有5个中断源,2个优先级。
中断响应条件:中断源有中断请求;此中断源的中断允许位为1;开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
一次中断过程的完整步骤:1、中断请求:中断事件一旦发生,中断源就提交中断请求(将中断标志位置1),欲请求单片机暂时放下目前的工作转向为该中断作专项服务。
2、中断使能:虽然中断源提交了中断请求,但是,能否得到单片机的响应,还要取决于该中断请求能否通过若干关卡送达单片机(中断使能位等于1,关卡放行),这些关卡有以下两类:此中断源的中断允许位;全局中断允许位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机中断代码解释
一、引言
51单片机是一种广泛使用的微控制器,具有丰富的中断功能。
中断是单片机在执行程序过程中,由于某种原因需要暂停当前的任务,转而处理更为紧急的事件。
处理完该事件后,再返回到之前被中断的程序继续执行。
本文将对51单片机的中断代码进行详细解释,包括中断概念、中断源、中断寄存器和寄存器功能与赋值说明等方面。
二、中断概念
中断是一种计算机系统中处理优先级更高任务的方式。
当某个事件发生时,CPU会暂时停止当前任务的执行,转而处理该事件。
处理完该事件后,CPU会返回到之前被中断的程序继续执行。
三、中断源
51单片机有多种中断源,包括外部中断0、外部中断1、定时器0、定时器1等。
每个中断源都可以独立地开启或关闭,并且可以设置优先级。
四、中断寄存器
51单片机与中断相关的寄存器主要有:
1.ICON(中断允许控制寄存器):用于控制中断的开启和关闭。
可以通过设
置ICON寄存器的相关位来启用或禁用某个中断。
2.INT0/INT1(外部中断0/1控制寄存器):用于控制外部中断0和外部中
断1的触发方式、触发边沿和触发方式等。
3.TMOD(定时器模式控制寄存器):用于设置定时器的模式和工作方式。
4.TH0/TH1(定时器0/1计数器高8位寄存器):用于存储定时器的计数值。
5.TL0/TL1(定时器0/1计数器低8位寄存器):用于存储定时器的计数值。
五、寄存器功能与赋值说明
1.ICON寄存器:
o EA:全局中断允许位,设置为1时允许所有中断,设置为0时禁止所有中断。
o ET0:定时器0中断允许位,设置为1时允许定时器0中断,设置为0时禁止定时器0中断。
o ET1:定时器1中断允许位,设置为1时允许定时器1中断,设置为0时禁止定时器1中断。
o EX0:外部中断0允许位,设置为1时允许外部中断0,设置为0时禁止外部中断0。
o EX1:外部中断1允许位,设置为1时允许外部中断1,设置为0时禁止外部中断1。
2.INT0/INT1寄存器:
o IT0/IT1:外部中断0/1触发方式选择位,设置为0时选择下降沿触发,设置为1时选择低电平触发。
o TRIG:外部中断触发标志位,当外部中断被触发时,该位被置为1。
可以通过软件清零该位来清除外部中断标志。
3.TMOD寄存器:
o TMOD:定时器模式选择位,用于设置定时器的模式和工作方式。
例如,设置为0x01时选择模式1(16位定时器),设置为0x02时选择
模式2(8位自动重装载定时器),设置为0x03时选择模式3(2个8
位定时器)。
4.TH0/TH1寄存器:
THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位THx=初始值或重装载值的高8位。