C51单片机教程——中断的应用
单片机原理与应用课件第5章80c51单片机的中断系统

(3) 相同优先级中断请求同时发生时 CPU 响应 的优先顺序
中断源 外部中断0 定时器T0中断 外部中断1 定时器T1中断 串行口中断
同优先级时的优先级顺序 最高级
↓
最低级
5.3 中断响应与中断返回
• 5.3.1 中断响应
• MCS-51 单片机响应中断有 4 个条件:
• 一是中断源有请求;
• 二是寄存器 IE 的总允许位EA=1,且 IE 相应的中断允许位为 1;
• INT0: • INT1:
• SJMP $ CLR P1.0
• RETI CLR P1.1
• RETI • END
•{ • 中断处理程序内容 •}
• 【例5-1】编写中断初始化程序,设置外部中断0和串行口中断为 高级中断,其它中断源为低级中断,外部中断采用边沿触发方式, 禁止外部中断1中断,允许其它中断源中断,开总中断。
• 汇编语言的中断初始化程序如下:
• SETB PX0 • SETB PS • SETB IT0 • MOV IE,#9BH • C51语言的中断初始化程序如下: • .PX0=1; • PS=1; • IT0=1;
• ET1: T1 溢出中断允许位。 ET1=1,允许 T1 中断; ET1=0,禁止 T1 中断。
• EX1:外部中断 1 允许位。 EX1=1,允许外部中断 1 中断; EX1=0,禁止 外部中断 1 中断。
• ET0: T0 溢出中断允许位。 ET0=1,允许 T0 中断; ET0=0,禁止 T0 中断。
• IE=0x9b;
【例5-2】设外部中断0采用边沿触发方式,写出外部中断0的C51初始化程 序段及中断服务函数。 主函数外部中断0初始化程序段: EA=1; //打开总中断开关 EX0=1; //开外部中断0 IT0=1; //设置外部中断的触发方式 中断服务函数
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单片机培训—C语言版外部中断

完 处理 引 P3.2 中 脚的 , 断了 主 我回 了 程序
P3.2脚信号引 发的中断程序
取反P0.7
取反P0.7,改变P0.7引脚上接的LED小灯亮灭状 态,实现LED小灯闪烁
中断程序返回
执行RETI从P3.2引脚中断服务子程序中返回主程序
程序清单
• 汇编语言程序
•
ORG 0000H • SJMP START • ORG 0003H • AJMP INTERRUPT0 • ORG 0030H ;---------------------------初始化---------------------START:MOV SP, #60H • MOV P0, #0FFH • CLR IT0 • SETB EX0 • SETB EA ;---------------------------主程序---------------------MAIN:SJMP MAIN ;-------------------中断子程序-----------------------INTERRUPT0:CPL P0.7 • RETI • END
EA 空 ET2 ES ET1 EX1 ET0 EX0
使能外部中断0(P3.2)
使能外部中断1(P3.3)
中断总使能
• • •
例如:想使用中断0(P3.2引脚输入的中断信号) MOV IE , #10000001B 或SETB EX0 IE=0X81; EX0=1;
•
SETB EA
EA=1;
TMOD的设置
查询法程序清单
• • • • • • • • • • • • • • • •
•
#include<reg51.h> void main() { TMOD=0X1; TH0=0X4C; TL0=0X0; TR0=1; while(1) { if(TF0==1) { P0=~P0; TF0=0; } } }
c51单片机的定时器和中断

图6-5 T0 (或T1) 方式1结构
单片微机原理及应用》教学课件
三、方式2
申请 TCON 中断 D7
TF1 TR1 TF0 TR0
溢出 TL1
重装初值控制 TH1 8位
D0
1 1
0 &
≥1
T1引脚 机器周期
TMOD 0 M0 D4 1 M1
C/T GATE D7
1 INT1引脚
图6-6 T0 (或T1) 方式2结构
本实验可以通过SP-28 USB下载验证,可以观察到VD2不停的亮灭。
单片微机原理及应用》教学课件
第二节 定时/计数器4种工作方式
一、方式0
申请 TCON 中断 D7
TF1 TR1 TF0 TR0
溢出 TH1 0 0 0 TL1
8位
5位
D0
1 1
0 &
≥1
T1引脚 机器周期
TMOD 0 M0 D4 0 M1
单片微机原理及应用》教学课件
(3)M1、M0-工作方式选择位,其功能见表6-1。 表6-1 M1和M0 工作方式选择位
M1 M0 模式
说明
0
0
0 13位定时/计数器,高八位TH(7~0)+ 低五位TL
(4 ~0)
011
16位定时/计数器 TH(7 ~ 0)+ TL(7 ~ 0)
102
8位计数初值自动重装 TL(7 ~ 0) TH(7~0)
单片微机原理及应用》教学课件
⑵ 定时初值计算,设初值为X,最大计数值为M。 初值X与机器周期I机及定时时间T的关系为: (M-X)T机 = T (6-1) 其中:T机 =12个时钟周期 =12 /fOSC X = M - T/ T机 (6-2)
【心得】C51单片机_中断

【⼼得】C51单⽚机_中断@⽬录①学习单⽚机中断总思想标题客观的说,学习单⽚机只需要掌握 I/O 和中断。
掌握了这两点,也就掌握了单⽚机。
再进⼀步,外设连接元器件,也就是说学会控制元器件的激活,外设就没有问题了,有趣的事,中断也需要“激活”,即配置。
所以,可以将单⽚机的学习变得更精简——激活。
(当然,不是说知道怎么激活,就学通了,只能算⼊门)就激活⽽⾔,单⽚机这个接地⽓的玩意⼉,也就两种⽅式:电平、电位。
由于元器件较为杂乱,故,在这⾥先讨论中断。
中断的配置⾃然是电位激活,所以这⾥讨论激活⽅式毫⽆意义。
②学习单⽚机中断总思想相较⽽⾔,配置顺序就有趣多了,这就像你的⽣活习惯,好的习惯可以提升效率。
为了增强认同,我先抛出⼏个问题。
1、我写中断⽼是有⼀两句忘了配置怎么办?2、中断配置记不住怎么办?3、中断配置怎么看都不会,死都记不住怎么办?这三个问题基本是同⼀个原因——记不住。
这时候⼤家反思⼀下,我们程序员敲代码是为了什么(说为了钱的门⼝罚站去),当然是为了解决问题。
所以我们没必要记这些东西,我们脑⼦⾥装的应该是编程思想。
那不记配置不会写怎么办,看原理图。
看了⼜忘了怎么办,写的时候再看,如果你写的次数多,那你慢慢就会记住,如果你写的次数少,那就说明你不常⽤它,不常⽤你把它记脑⼦⾥⼲什么(⽽且图像记忆⽐⽂字记忆效率更⾼,记原理图更能拓展⾃⾝发展空间)。
③学习单⽚机中断总⽅法外部中断⽐如外部中断0,结合下图,很明显IT0 = 1时为下降沿触发中断,为0时为⾼电平触发中断。
这时IE0左边已经配置好了,再看右边,显然EX0 = 1,EA = 1时,电路导通。
外部中断1同理。
参考代码:IT0 = 1;EX0 = 1;EA = 1;定时计数器中断如果是定时计数器中断,还需要有定时计数器原理图。
这个就根据个⼈习惯了,我本⼈是喜欢先从外向内配置。
以TF0为例,右边ET0和EA同理,这时要注意左边的TR0,你可以把它想象成外部中断的ITx(这⾥的x可以是0或1)是控制计数的。
Ch03 C51中断

• 设立指针变量,统一管理!
动态显示 技术分析
数字
字形表 7段 译码
• 善于分解任务 • 适合计算机运行的特点 • 确定关键算法
显示缓冲器 段码 字型码
位选码
指针pHandle=0~5同步循环变化
数码管控制
字形表
P0.7
a b c d
…
e f g
P0.0
Dp
字形表是根据硬件连接而定的。
硬件设定的 位选择方法
C51的中断函数
• • • • void 函数名 interrupt 中断号 using 寄存器组号 函数名由编译器使用,是形式上的,但要求唯一 中断号0,1,2,3,4,…对应于中断源; 寄存器组号可以是0~3,但实际为1,2,因为
– 0保留给正常程序; –1为低优先级中断; –2高低优先级中断; – 3为用户保留
带7段译码的2位动态显示
• 类似地, 一个口可 以控制最 多4位! • 大大节约 端口
6位软件译码的动态数码管显示电路
中断实现的循环
• 时间间隔固定; • 针对“操作用时短,等待用时长”的特 点,提高CPU效率; • 各次中断如何关联?使每次的事件处理 类似而又不同?
——如每次显示一位 ——每次是不同的位?
# include <reg51.h> sbit P1_0=P1^0 ; void time (void) interrupt 1 using 1 /* T/C0中断服务程序入口 */ { P1_0 = !P1_0 ; /* P1.0取反 */ TH0= (-1000) / 256; / * 重新装载计数初值 */ TL0 = (-1000) % 256; } void main( void ) { TMOD=0x01 ; /* T/C0工作在定时器非门控制方式1 */ TH0= -(1000/256 ); /* 预置计数初值 */ TL0= -(1000%256) ; EA=1 ; /* CPU中断开放 */ ET0= 1 ; /* T/C0中断开放 */ TR0=1 ; /* 启动T/C0开始定时 */ while(1) {} ; /* CPU可运行其它任务 */ }
51单片机每个外部中断和定时器中断 应用模版

第一步,中断配置/************************************************************函数名:INT0_Config功能:配置单片机与中断相关的硬件,让单片机能够正常检测中断和执行中断代码。
输入参数:输出参数:************************************************************/void INT0_Config(void){IT0=1; //中断触发方式,IT0=0,低电平触发,INT0=1下降沿触发(下降沿就是由高电平向低电平的跳变);EX0=1; //外部中断0的中断开关,每个中断源都有自己的中断开关。
EA=1; //打开总中断,如果总中断不打开,就是其他中断开关被打开,单片机也不能执行中断。
}第二步,中断服务,也就是cpu被中断后所要做的事。
/************************************************************函数名:Isr_INT0功能:中断服务输入参数:输出参数:************************************************************/void Isr_INT0() interrupt 0 //interrupt表明该函数是中断函数,后面的标号表示是哪个中断源产生的中断。
{ //(INT0)为0, Timer0为1,INT1为2,Timer3,串口中断为4。
// Add your code here //自己想要中断后发生的程序}第三部主函数/************************************************************函数名:main功能:主函数输入参数:输出参数:************************************************************/void main(){INT0_Config();//调用这个函数来配置外部中断while(1){//Add your code here//CPU一直在这里循环的执行代码,一旦发生中断,就停下来去执行中断函数Isr_INT0() interrupt 0,//执行完成后,返回从断点处继续往下执行原来的代码。
c51单片机中断详解

包含: (1)T0和T1的溢出中断请求标志位TF1和TF0。 (2)外部中断请求标志位IE1与IE0。 各标志位的功能:
IE1——外部中断请求1的中断请求标志位。 IE1=0,无中断请求。 IE1=1,外部中断1有中断请求。当CPU响应该中 断,转向中断服务程序,由硬件清“0”IE0。
● IT1外部中断1的中断触发方式控制位
IT1——选择外部中断请求1为负跳变触发方式 还是电平触发方式:
IT1 =0,为电平触发方式,IE1状态完全 由IT1决定。
IT1=1,为负跳变触发方式。 IT1可由软件置“1”或清“0”。
● IT0—外部中断请求0为负跳变触 发方式还是电平触发方式,意义与 IT1类似。 ● IE0—外部中断请求0的中断请求 标志位,意义与IE1类似。
二、中断允许控制
中断允许控制寄存器IE
CPU对中断源的开放或屏蔽,由片内 的中断允许寄存器IE控制(两级控制)。 字节地址为A8H,可位寻址。格式如下:
IE中各位的功能如下:
(1)中断允许总控制位EA(IE.7位):
EA=0,所有中断请求被屏蔽。
EA=1,CPU开放中断,但五个中断源 的中断请求是否允许,还要由IE中 的5个中断请求允许控制位决定。
CPU暂时中止当前的工作,转到中断 服务处理程序处理所发生的事件。
处理完该事件后,再回到原来被中止的 地方,继续原来的工作,这称为中断。
中断方式优点:大大地提高了CPU的 工作效率。
●能够实现中断处理功能的部件称为 中断系统。 ●产生中断的请求源称为中断请求源。 ●中断源向CPU提出的处理请求,称为 中断请求(或中断申请)。 ● CPU暂时终止自身的事务,转去处 理中断事件的过程,称为CPU的中断响 应过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C51单片机教程——中断的应用
一、中断的概念
中断是一种与主程序中断的机制,是CPU在遇到一个特定的事件触发后,立即从主程序中断,跳转到特定的中断服务程序(ISR)中执行。
一
旦中断程序执行完毕,CPU就会回到主程序的执行位置,继续执行主程序。
由于中断会立即响应,它可以用来处理急躁的外部设备事件,把实时性要
求比较高的任务处理正确,这些即使cpu在时间短暂中断,也不会对后续
程序运行产生太大的影响。
二、单片机中断的实现
1、中断类型:单片机的中断有外部中断与定时器中断两种,一般外
部中断处理外设的发出中断请求(如串口发出的数据中断、按键的按下中断),定时器中断用于定时计数(用于产生节拍用,如定时器中断每
10ms产生一个节拍)。
2、中断使能:单片机的中断有相应的中断使能位,当开启相应的中
断使能位时,单片机才会接受这种中断信号。
3、中断服务程序:单片机的中断服务一般由中断服务程序(ISR)实现,当CPU遇到中断时,会跳转到中断服务程序中,具体的由定义的中断
服务程序完成中断处理。
4、中断响应速度:中断响应速度是指单片机接收到中断信号到跳转
到中断服务程序的延时时间,这个速度受单片机芯片结构及设计的影响,
一般1-2微秒可以完成中断响应。