第十三次课(共2学时)一、授课题目:STC15F2K60S2的中断系统(下)二、教学目标和任务:1.掌握STC15F2K60S2的中断系统中断标志位管理、中断充许管理、中断优先级的管理:2.掌握中断函数编写方法;3.充分掌握外部中断0、外部中断1的触发条件,能利用外部中断0、外部中断1编写程序实现简单的现象。三、教学重难点:重点:掌握STC15F2K60S2的中断系统中断标志位管理、中断允许管理、中断优先级的管理;利用外部中断0、外部中断1编写程序实现简单的现象。难点:利用外部中断0、外部中断1编写程序实现简单的现象。四、授课过程:回顾:中断相关定义:中断系统技术要求;STC15F2K60S2的中断系统结构:外部中断0、定时/计数器中断0、外部中断1、定时/计数器中断1、串口中断、AD转换中断的中断触发条件、中断标志;中断的优先级、自然优先级:中断响应过程。0. 引入本节课我们将学习中断的管理以及外部中断0、外部中断1的编程方法。1.中断标志的记录1
1 第十三次课(共 2 学时) 一、授课题目:STC15F2K60S2 的中断系统(下) 二、教学目标和任务: 1. 掌握 STC15F2K60S2 的中断系统中断标志位管理、中断 允许管理、中断优先级的管理; 2. 掌握中断函数编写方法; 3. 充分掌握外部中断 0、外部中断 1 的触发条件,能利 用外部中断 0、外部中断 1 编写程序实现简单的现象。 三、教学重难点: 重点:掌握 STC15F2K60S2 的中断系统中断标志位管理、 中断允许管理、中断优先级的管理;利用外部中断 0、外部中 断 1 编写程序实现简单的现象。 难点:利用外部中断 0、外部中断 1 编写程序实现简单的 现象。 四、授课过程: 回顾:中断相关定义;中断系统技术要求;STC15F2K60S2 的中断系统结构;外部中断 0、定时/计数器中断 0、外部中断 1、定时/计数器中断 1、串口中断、AD 转换中断的中断触发条 件、中断标志;中断的优先级、自然优先级;中断响应过程。 0.引入 本节课我们将学习中断的管理以及外部中断 0、外部中断 1 的编程方法。 1.中断标志的记录
外部中断和定时计数器中断的中断标志存在特殊功能寄存器TCON(88H)中,如表所示。TF1TFOTR1TROIE1IT1IEOITOTI溢TI启/TO溢TO启/INT1INT1INT1INT1停停触发出标志出标志请求请求触发从低到高两位一组,分别控制INTO、INT1、TO、T1,可位寻址1)ITO和IT1为外中断INTO和INT1中断触发方式选择,若选下降沿触发则相应位置1:若选双边沿触发,IT相应位置0。2)IEi为外部中断标志,复位后IEi=0,若双边沿(ITi=0)或下降沿(ITi)来时,IEi自动置位为1。3)TRO和TR1为定时器TO和T1工作启动和停止控制。4)5当定时/计数器溢出时置位TFO、TF1。串口1中断控制寄存SCON(98H)TIIR发送完一顿接收完一顿A/D转换中断中断控制寄存器ADCCONTR(BCH)ADC_POWERSPEED1SPEEDOADC_FLAGCHS1CHS1CHSOADC_STRATAD转换完2.中断允许控制位当中断触发后,中断允许位自动置位,STC15F2K60S2的十四个中断源的中断允许标志位分别位于三个SFR,如下表所示:2
2 外部中断和定时计数器中断的中断标志存在特殊功能寄 存器 TCON(88H)中,如表所示。 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 T1 溢 出标志 T1 启/ 停 T0 溢 出标志 T0 启/ 停 INT1 请求 INT1 触发 INT1 请求 INT1 触发 从低到高两位一组,分别控制 INT0、INT1、T0、T1,可位 寻址 1) IT0 和 IT1 为外中断 INT0 和 INT1 中断触发方式选 择,若选下降沿触发则相应位置 1;若选双边沿触发 ,IT 相 应位置 0。 2)IEi 为外部中断标志,复位后 IEi=0,若双边沿(ITi=0) 或下降沿(ITi)来时,IEi 自动置位为 1。 3) TR0 和 TR1 为定时器 T0 和 T1 工作启动和停止控 制。 4) 当定时/计数器溢出时置位 TF0、TF1。 串口 1 中断控制寄存 SCON(98H) - - - - - - TI IR - - - - - - 发送完一帧 接收完一帧 A/D 转换中断中断控制寄存器 ADC_CONTR(BCH) ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_STRAT CHS1 CHS1 CHS0 AD 转换完 2. 中断允许控制位 当中断触发后,中断允许位自动置位,STC15F2K60S2 的十 四个中断源的中断允许标志位分别位于三个 SFR,如下表所示:
BAB7B6B5B3B2B1BOIEEAESELVDEADCETIEX1ETOETOA8HIE2ET2ESPIES2AFHINT_CLKOEX4EX3EX28FH1)值为1表示允许响应相应中断,为0表示不允许响应相应中断;2)复位后所有中断允许位均为0:3)EA为总中断,只有EA=1,才可以响应中断;4)一个中断要处于允许状态,需要总中断为1,且响应中断允许位为1。注意:需要掌握的中断允许位有EA、EADC、ES、ET1、EX1、ETO、EXO。例题1:打开外部中断0,并将其设置为下降沿触发。EA=1:EXO=l:IT1=l:3.中断优先级管理B7B6B5B4B3B2B1BOIPPCCAPLVDPSPT1PADCPX1PTOPXOB8HIP2PSPIPS2B5H1)2个中断优先级0和1,0为低优先级,1为高优先级3
3 B7 B6 B5 B4 B3 B2 B1 B0 IE A8H EA ELVD EADC ES ET1 EX1 ET0 ET0 IE2 AFH - - - - - ET2 ESPI ES2 INT_CLKO 8FH - EX4 EX3 EX2 - - - - 1) 值为 1 表示允许响应相应中断,为 0 表示不允许响应 相应中断; 2) 复位后所有中断允许位均为 0; 3) EA 为总中断,只有 EA=1,才可以响应中断; 4) 一个中断要处于允许状态,需要总中断为 1,且响应 中断允许位为 1。 注意:需要掌握的中断允许位有 EA、EADC、ES、ET1、EX1、 ET0、EX0。 例题 1:打开外部中断 0,并将其设置为下降沿触发。 EA=1;EX0=1;IT1=1; 3.中断优先级管理 B7 B6 B5 B4 B3 B2 B1 B0 IP B8H PCCA PLVD PADC PS PT1 PX1 PT0 PX0 IP2 B5H - - - - - - PSPI PS2 1)2 个中断优先级 0 和 1,0 为低优先级,1 为高优先级
2)可实现二级嵌套3)优先级为1的中断源高于优先级为0的中断源,当中断源级别相同时,按照自然优先级判别,从高到低依次为INTO、TO、INT1、T1、串口1中断、A/D转换中断4)自然优先级是硬件决定的。注意:需要掌握的中断优先级位有PADC、PS、PT1、PX1、PTO、PXO。例题2:打开串口1中断,优先级设置为1,打开TO中断,优先级设置为0。EA=1: ES=1: ETO=1: PS=1:PTO=0:3.中断函数的编写中断服务函数的一般形式为:函数类型函数名(形式参数表)interruptn(usingm)函数类型需要时void,不返回值。参数列表void,不传递参数。关键字interrupt后面的n是中断号,单片机,n的取值为0~16,编译器将程序放在8×n+3处,以便中断触发后从该处调用相应函数。关键字using后面的m用来选择4个工作寄存器区。using是一可选项。4.外部中断的应用例题3:如图所示,在单片机P1口上接有8只LED。在外部中断0输入引脚(P3.2)接一只按钮开关K1。要求将外部中断0设置为下降沿触发。程序启动时,P1口上的8只LEL4
4 2)可实现二级嵌套 3)优先级为 1 的中断源高于优先级为 0 的中断源,当中 断源级别相同时,按照自然优先级判别,从高到低依次为 INT0、 T0、INT1、T1、串口 1 中断、A/D 转换中断 4)自然优先级是硬件决定的。 注意:需要掌握的中断优先级位有 PADC、PS、PT1、PX1、 PT0、PX0。 例题 2:打开串口 1 中断,优先级设置为 1,打开 T0 中 断,优先级设置为 0。 EA=1;ES=1;ET0=1;PS=1;PT0=0; 3. 中断函数的编写 中断服务函数的一般形式为: 函数类型 函数名(形式参数表)interrupt n (using m ) 函数类型需要时 void,不返回值。 参数列表 void,不传递参数。 关键字 interrupt 后面的 n 是中断号,单片机,n 的取值 为 0~16,编译器将程序放在 8×n+3 处,以便中断触发后从 该处调用相应函数。 关键字 using 后面的 m 用来选择 4 个工作寄存器区。using 是一可选项。 4. 外部中断的应用 例题 3:如图所示,在单片机 P1 口上接有 8 只 LED。在外 部中断 0 输入引脚(P3.2)接一只按钮开关 K1。要求将外部 中断 0 设置为下降沿触发。程序启动时,P1 口上的 8 只 LED
全亮。每按一次按钮开关K1,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8只LED再次全亮。DEDVELLON中KTAL#建####票TAL044###美#热#1.8e8?1.012PsDT3609R14.470图1分析:P3.2引脚上按键按下,会有一个下降沿,将触发外部中断0,因此我们在主函数中打开外部中断0,将其设置为下降沿触发,再点亮8只LED灯,中断函数中高低四位交替闪烁五次。程序如下:#include<reg51.h>#defineucharunsigned char#defineuintunsignedintvoidDelay(uinti)//延时函数Delay(),i形式参数1uint j:for(;i> 0;i--)for(j=0;j<333;j++)(:)//空函数5
5 全亮。每按一次按钮开关 K1,让低 4 位的 LED 与高 4 位的 LED 交替闪烁 5 次。然后从中断返回,控制 8 只 LED 再次全亮。 图 1 分析:P3.2 引脚上按键按下,会有一个下降沿,将触发外 部中断 0,因此我们在主函数中打开外部中断 0,将其设置为 下降沿触发,再点亮 8 只 LED 灯,中断函数中高低四位交替闪 烁五次。程序如下: #include <reg51.h> #define uchar unsigned char #define uint unsigned int void Delay(uint i) //延时函数 Delay( ),i 形式参数 { uint j; for(;i > 0;i-) for(j=0;j<333;j++) {;} //空函数