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

单片机的中断详解

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 guanshen 于 2021-9-18 10:56 编辑
) L$ C' n3 H( b/ m! b4 x- o+ G( Y2 n. Z3 p
一、简述
& k1 E6 D6 D6 ?% f7 k1 N' C* W, Z3 [1 x% u+ M
    中断,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。
* \* K. \: P& H+ M. P: l0 D  t' K; W4 y( p- c" Z7 m
# o3 K% `$ M. v; h+ Z' m
二、中断请求标志控制寄存器TCON
$ ]+ {( y$ w- h# I, G3 e/ V
- i' j6 D, w0 |) p2 F% _8 q, x# y  D5 R

6 ^4 s. q2 y9 w, l& g( u+ r三、中断请求标志控制寄存器SCON7 N7 H$ j  A9 |1 B' s: x  C
& F; k6 x# G4 g8 o& X0 u& E$ C2 u
/ e$ t+ w9 [$ _9 M* K( f
四、中断允许寄存器IE6 }4 d% X$ q- ]+ p* z4 g2 q+ P

4 s5 ^2 G9 E* R! i2 \$ I
* o4 j% @# ]; w# Q  k) B
五、中断函数
3 g) ?" \6 l7 H+ d: P, S1 {1 W
: t2 _* z  h* _) f. i2 |3 _中断函数定义的格式为:
$ y, t6 ^! _) v8 w& O" g) D" W函数类型 函数名 interrupt   n  using  m0 W7 ?2 Q) v8 W5 c
其中:7 A6 z: u6 c5 M) i. @' t# _( Y# @8 B$ |
    interrupt 后面的n 是中断号。
$ p) P8 h1 F, {* S0 |- W, k$ c3 y% }0 T! z
    关键字using 后的m 是所选择的寄存器组,取值范围是0~3。
6 s* c- T+ P+ c/ r. a0 R2 l
4 o1 p0 }) V/ N/ q! ?using m这部分通常可以省略,由编译器自动选择一个寄存组。
0 b) n2 y$ U+ j/ e$ c' k4 I4 d; O( v! u6 y
举例:: z+ L4 W1 b' k: _" u3 l% g
3 F+ A* T7 p' }* ~1 \& p2 v
void int0rupt() interrupt 0    : y1 r( E8 T) B0 R2 C' g
{                - B) ^3 \: f$ X  @" r
        beep=0;//开蜂鸣器        1 p2 H: ]0 i$ ~+ P$ c
        while(P3_2!=1);//当P3^2口一直是低电平时,就一直告警
5 z' k9 G% F. Q( a0 ~  m        beep=1;//关蜂鸣器
, Q/ a; f/ m2 p8 ~  L7 T}
# J3 T. r" t- S" `2 J* x8 ^. Y5 Bvoid 是函数类型表示空类型
- ]  R( w' N- J2 U6 Sint0rupt是函数名. F" D  ~8 G: Z% [
interrupt 0中的0表示该函数是为外部中断0服务的处理函数(当外部申请中断0服务时调用此函数): @7 a2 g7 T' a- e* d

+ ~2 A8 q4 H5 _# [& X+ V# `- C六、完整例子
: z: L: B$ S4 ^: M0 d) h
7 d. l2 u( u; N( s* L3 a5 O# e1 a! i* t+ h
1、效果:当按键按下时,蜂鸣器就会响,不松开就一直响,松开关闭。
" d! J2 l' g3 ^" C1 E/ B+ ]/ I
$ D% S$ k3 l8 v& H; T2 b) e    (主程序死循环,通过CPU中断可以暂时中断,先执行其他任务,然后再回来继续执行被中断的任务。例子中开启外部中断0,中断方式为下降沿触发,比如控制端口原来是高电平的,按下按钮使控制端口变为低电平,高电平到低电平有个下降过程,下降沿触发中断0,调用中断服务处理函数,蜂鸣器响。中断服务处理函数有个循环检测直到按钮释放才关闭蜂鸣器,退出中断服务处理函数,控制端口恢复为高电平。)
; h" u2 Z% H  i- F
( \6 ?3 f3 C5 K2、Keil文件结构
: x* ?& X5 R+ _; f# ^8 l+ \) P, ]# W

& Z# M- l; A8 s% r; C6 C3、仿真电路
2 G' ]% B7 |5 S- g/ E9 p/ r" O9 K5 R  Y" f# g

9 C! I3 v2 n" e8 @& I2 w4、alARM.c文件
9 Y* R+ W0 M. V5 [0 J
, R, D8 ^" V, V9 I5 P#include<reg51.h>
5 M3 u0 Z( u+ m. v" X" u4 ?4 [* f#define uint unsigned int
8 z3 t$ a- r3 V; y6 A* o, E#define uchar unsigned char) A; J4 Q  @% `& s  s1 _+ J
sbit P3_2=P3^2;//将P3^2定义为中断0控制口
: R$ d6 @; N3 ?: N6 L! M( esbit beep=P3^3;//将P3^3定义为蜂鸣器控制口. R1 V$ D! v- R6 A
void main()- o7 x  y6 [3 h5 p/ @! V
{
5 {! v2 W$ T* D( l, s        EA=1;//开许总中断0 P  F. p5 C, H8 |
          EX0=1;//开外部中断0& F/ h( K1 r# ], E, |" _+ J
        IT0=0;//中断触发方式为低电平触发  a8 l$ K; P3 F& o; R' Q2 L2 ?
        while(1)  //主程序一直在死循环,外部中断可以暂时执行中断处理函数
, P; X  U5 i% F& t& T  |9 I1 Z" t        {}$ T$ S# q( b2 h! `
}
( c7 A: U% Q; E$ x$ d( ?  J7 P* m/**********************************************************/
. P7 G3 E) `' H( b, y//函数名:int0rupt() interrupt 0
. f( p  N" a: P: U8 \1 a1 M$ q! ^//功能:外部中断0中断响应程序
' ]1 V1 z3 \: c2 G3 J. j//调用函数:
$ c+ i  x  v+ ~- n0 b//输入参数:
/ }1 a4 U+ Y' f  N, Z: b3 V+ w# b//输出参数:/ c6 ~4 X4 e" J7 i1 h$ J) `
//说明:当P3^2口为低电平时进入响应程序
7 x% i1 S" [- @* b1 T/**********************************************************/7 Q4 |  |0 p$ ?! m* V: ]1 K6 x
void int0rupt() interrupt 0//当P3^2键口为低电平时. N* I  R3 \# q/ k# V
{
. E' X( T# t4 Q1 n        beep=0;//开蜂鸣器
8 a) T0 v9 z6 P( }' `7 g: I        while(P3_2!=1);//当P3^2口置高检测,就是按钮不释放蜂鸣器就一直响0 y5 i- c* W+ A# I
        beep=1;//关蜂鸣器! t: ]" `. v# k% x! U5 }: }
}
0 i) ]/ K' H% [8 ~" u( ^9 b6 p1 l( J1 b4 m1 ^
! O5 c4 o6 j1 L* O' K
% [% O  ?6 f4 f0 m

该用户从未签到

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 | 只看该作者
感谢楼主分享  学习了2 G7 L2 Y6 g! Z" {2 e7 x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 20:36 , Processed in 0.171875 second(s), 29 queries , Gzip On.

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

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

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