找回密码
 注册
关于网站域名变更的通知
查看: 395|回复: 5
打印 上一主题 下一主题

单片机的中断详解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-18 09:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 guanshen 于 2021-9-18 10:56 编辑 ' U0 B$ Z0 N. ^! s" g0 T8 y

2 g3 |' {3 w2 D3 l8 o( C一、简述
$ ~% V5 T% A$ w- n8 A9 L
+ R; i6 V% h% ^: O9 u    中断,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。+ O7 ^2 W- \( g1 X9 H- P+ e+ m7 ?4 j

3 X, K% a' W7 Q: x
$ ?8 }# \$ d- l" v% z
二、中断请求标志控制寄存器TCON3 N2 h5 s, E  F

9 V  c! |* d( d  R
, ~, {; X+ v" y3 a) ^
三、中断请求标志控制寄存器SCON
4 l/ U0 k! ^; g; F
0 K6 A/ q( {! D
) R5 v0 I6 [' ^8 S) r
四、中断允许寄存器IE% [; l& E" K) Q! t" o1 K4 c
; C9 [& V; e( ^# b$ x
5 a- q$ b' I3 Z! U
五、中断函数2 R) j( U; {- Y2 U1 F" |

7 q% [9 s, K" s, C中断函数定义的格式为:4 i  s- h2 i. G* Y/ V
函数类型 函数名 interrupt   n  using  m* @# v( a/ w5 ?  q* Y0 c1 ~
其中:
1 ]6 N0 s: f: k4 w    interrupt 后面的n 是中断号。
* K2 s0 Q. b( \* q- P- K
6 a6 U" ?) `3 @' n3 N    关键字using 后的m 是所选择的寄存器组,取值范围是0~3。, S+ E7 `' o6 x9 g3 @! x' v

  D1 ^6 y" T* p, Musing m这部分通常可以省略,由编译器自动选择一个寄存组。! n! ^7 ^$ X9 H$ O: Z
2 k$ x7 G: G, x5 s* X$ U# ]
举例:& s- [! ^3 b  @% c, V' }

9 V- g* Z3 ]  M2 _1 u) x8 [; ovoid int0rupt() interrupt 0   
' @: ~0 y! y! Q/ ?& {; R/ z3 j! R{               
$ I! Y. s' [0 t, d        beep=0;//开蜂鸣器        $ M9 G9 B2 u! Y
        while(P3_2!=1);//当P3^2口一直是低电平时,就一直告警$ s* I# Y! z# N  X6 {# {* E, h. U6 A
        beep=1;//关蜂鸣器
* N8 ?0 H3 H$ G) z& H}
" y) f* H  D" O; `$ b0 P0 evoid 是函数类型表示空类型
: ]" T! N0 `4 @' ?9 cint0rupt是函数名
. k$ X5 ~5 m+ I2 G3 K0 Winterrupt 0中的0表示该函数是为外部中断0服务的处理函数(当外部申请中断0服务时调用此函数)
! `$ \. X' x" r) L
& T6 O: [9 M8 J4 u6 s* J- ]: n六、完整例子
) u' [( a  y" q# B; Y- y/ b0 W
" q8 M* P/ V; `' r; ], I8 h; W: h7 \8 I% V' t& h
1、效果:当按键按下时,蜂鸣器就会响,不松开就一直响,松开关闭。
: j  g; z* _2 X. v) q( D! R7 ]6 R9 k2 N) G
    (主程序死循环,通过CPU中断可以暂时中断,先执行其他任务,然后再回来继续执行被中断的任务。例子中开启外部中断0,中断方式为下降沿触发,比如控制端口原来是高电平的,按下按钮使控制端口变为低电平,高电平到低电平有个下降过程,下降沿触发中断0,调用中断服务处理函数,蜂鸣器响。中断服务处理函数有个循环检测直到按钮释放才关闭蜂鸣器,退出中断服务处理函数,控制端口恢复为高电平。)' m5 y2 u( f/ u( B. g" w
' j1 V. R6 X  M: I, w7 f0 O
2、Keil文件结构/ M- d1 G1 \9 @1 N; c
  s7 A# ]1 q* o
! T1 x% {7 @& U- W" S
3、仿真电路
6 n# ~$ Q2 e/ W. E% U2 @% N* g) ]! I5 m( m
$ I3 Z4 }5 I( _5 q, H
4、alARM.c文件
5 _/ t* o+ j2 j+ b# n  s
2 {' L. r2 O: l  T' J, u#include<reg51.h>
" U8 |- d1 a) ]7 L$ a& m$ G, g# }  J; ]#define uint unsigned int( Q/ U! T/ N2 [8 J# V" _
#define uchar unsigned char
6 V4 H+ c- w& D& U' |. v' Ysbit P3_2=P3^2;//将P3^2定义为中断0控制口4 G, Y# a5 @# k/ b  |- \+ K
sbit beep=P3^3;//将P3^3定义为蜂鸣器控制口: z2 L$ O$ Q# z0 P
void main()
6 z- U$ }  M  N( K3 m{) C& W$ F  X* Q- ]
        EA=1;//开许总中断
7 ^2 N0 V  E$ M& Q# `% K8 P0 `          EX0=1;//开外部中断0( v: a2 g( V$ f/ k- i, }$ w. [
        IT0=0;//中断触发方式为低电平触发! P* @$ l$ n% G2 q
        while(1)  //主程序一直在死循环,外部中断可以暂时执行中断处理函数
% q' W7 m: B; N0 [# y  \" [        {}! R* X6 b; }& N# n+ J  f
}
( ~; N' Z8 _- w* _3 U. P! O! C: P* v/**********************************************************/% ^& F, E0 X7 }" \
//函数名:int0rupt() interrupt 0
9 e7 g9 r% f- f# `5 A: i//功能:外部中断0中断响应程序 ) d* M. W  B# F0 @; R
//调用函数:% i* A" H- o" y# W7 n* k! b
//输入参数:' w& k! t* i2 S& p
//输出参数:
! }7 _) ]) n4 w1 `% j9 c! E. n//说明:当P3^2口为低电平时进入响应程序
" }8 r# b$ N$ T* l/**********************************************************/
3 y* L7 I, O7 `- Cvoid int0rupt() interrupt 0//当P3^2键口为低电平时
3 n3 s9 g: _" ~" R1 C{
% \- g* v+ J3 |, L% }        beep=0;//开蜂鸣器5 _4 o+ W2 G/ l" a3 i; c
        while(P3_2!=1);//当P3^2口置高检测,就是按钮不释放蜂鸣器就一直响
3 y# J0 U' i7 G* c! [9 V        beep=1;//关蜂鸣器- p3 {3 Q0 h: c  u
}6 d0 r# q2 r4 z
/ ]/ b, }9 K3 W' _# ~. J% t) J. _

2 {3 R4 y3 o/ C1 q
" E: l9 z3 c8 t( V. k% V

该用户从未签到

2#
发表于 2021-9-18 10:58 | 只看该作者
51单片机有5个中断

该用户从未签到

3#
发表于 2021-9-18 11:00 | 只看该作者
强烈支持,谢谢楼主分享

该用户从未签到

4#
发表于 2021-9-18 13:37 | 只看该作者
T1  是串行口发送中断标志位  成功发送一个数据后 T1会被置1

该用户从未签到

5#
发表于 2021-9-18 17:33 | 只看该作者
感谢楼主分享  学习了
8 h8 Z; K$ C% b* k8 M' o' |2 I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 09:06 , Processed in 0.109375 second(s), 29 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表