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

单片机的中断详解

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 guanshen 于 2021-9-18 10:56 编辑 , I! ]( N% R( ]* p/ E
2 k- r* I+ u- g' _0 z
一、简述) R) p. u" [  a7 S( X
% ~# \3 Q; ^: r- h0 C# z
    中断,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。3 F* [  D7 Q. `, F1 z

( Y4 t" N  l# L" E+ I7 Y
/ Y: O  U$ j) P
二、中断请求标志控制寄存器TCON
7 N: L. T/ B3 c  i" g0 N, u8 p7 w* E- I' f$ |3 g# b+ s

* J) H) v1 r; N/ L0 x5 H三、中断请求标志控制寄存器SCON" F4 G8 g  s4 A# _# y6 W9 {
5 w, @: `) s" v+ [
7 Y! P# `: ?- d: `9 @5 ]- O
四、中断允许寄存器IE
& u' H" u. H2 c
, l" D! O" Z% k! u, D3 X" J

' W& z  c! q( K- I2 Z五、中断函数
, _; U9 y# I" S3 p7 |2 K/ X, t( I. R: o3 y
中断函数定义的格式为:
: ^$ u- |! y/ o/ m, W$ U函数类型 函数名 interrupt   n  using  m
* d) e& }$ x3 s( X9 L其中:
4 y) u/ d& d% f7 o" v( X- R) M( j3 m    interrupt 后面的n 是中断号。* Q  b; {/ r2 o+ ?* _! l9 O6 c% n; M
& V$ Z7 ~& ^% Q3 s
    关键字using 后的m 是所选择的寄存器组,取值范围是0~3。
0 ~" s8 ?1 h8 j  d3 _  J* I2 N& @8 k, Q+ k) I8 G
using m这部分通常可以省略,由编译器自动选择一个寄存组。. K8 s3 N/ \. b9 y
/ X6 @; e' j. a  l" v2 s/ W
举例:# [0 [- m( g2 t3 A. ?
/ U/ C: k1 d7 R2 v
void int0rupt() interrupt 0   
, K% {) \* g& V* j, X& D9 i{                1 h/ @9 C2 Z* ~# d% b( ^$ r6 K
        beep=0;//开蜂鸣器        " X( P& O  U; F) C  p
        while(P3_2!=1);//当P3^2口一直是低电平时,就一直告警
( G$ a" N9 k" v4 W# C        beep=1;//关蜂鸣器, r7 V: a$ }. b! B3 c! m) s1 N
}
* W4 q1 j+ O6 O" N, G% x* Dvoid 是函数类型表示空类型
) f; g7 k9 e6 X  zint0rupt是函数名4 `& p2 F& V' l1 \9 g7 L+ r7 q
interrupt 0中的0表示该函数是为外部中断0服务的处理函数(当外部申请中断0服务时调用此函数)2 e1 G( w3 X0 G4 ~
$ ]3 b8 Z, r9 b6 S' v
六、完整例子
, j! c" q1 B! I) L, Q) ]! Z7 _% l( c% W; x8 R* N

1 C' \: u2 f  S. I2 Y3 P1、效果:当按键按下时,蜂鸣器就会响,不松开就一直响,松开关闭。* l; i, w# d- [2 k3 A. [( }0 U
& n& [) k: O. ^* {8 I& y
    (主程序死循环,通过CPU中断可以暂时中断,先执行其他任务,然后再回来继续执行被中断的任务。例子中开启外部中断0,中断方式为下降沿触发,比如控制端口原来是高电平的,按下按钮使控制端口变为低电平,高电平到低电平有个下降过程,下降沿触发中断0,调用中断服务处理函数,蜂鸣器响。中断服务处理函数有个循环检测直到按钮释放才关闭蜂鸣器,退出中断服务处理函数,控制端口恢复为高电平。)* I* M* V# N( _2 v
1 c! y4 ]8 I9 ^6 [0 a; d/ [
2、Keil文件结构6 Y2 L! z/ \. Q! ]. q$ Z. D

# \, C( `4 t) ]7 q4 }2 a0 V

( f3 t6 x  @( B. K) X6 H3、仿真电路" I& m2 o# A5 @! l' J

( X$ x: V- m$ V9 o1 `; S& i! `
% q# H6 K: P! E$ R& ?& }
4、alARM.c文件* d5 \- o2 _2 G3 I# l

% N& b* h" H5 x$ h2 ]; Q#include<reg51.h>
) u- A3 F. p1 ^  o4 ~3 ^#define uint unsigned int
$ }) {$ w' I1 f) }0 v4 s  U) }% F/ g#define uchar unsigned char5 L" W3 O2 q3 d) ~" M
sbit P3_2=P3^2;//将P3^2定义为中断0控制口' P* \  n+ q' A' x
sbit beep=P3^3;//将P3^3定义为蜂鸣器控制口9 m/ D% u4 Q$ K& F3 o
void main()5 ~. m7 H/ O! U* r- [
{3 }4 v" ~- R8 A9 {' u- K
        EA=1;//开许总中断) n" p5 T# Q( T' G
          EX0=1;//开外部中断0
; p1 g% |2 n( w4 L9 h0 p3 [         IT0=0;//中断触发方式为低电平触发0 C# g% M% F$ q" G
        while(1)  //主程序一直在死循环,外部中断可以暂时执行中断处理函数
3 w2 B% I# C% W        {}7 S1 c' }- k  X, n
}
" I! A( b5 f1 k* M/**********************************************************/
- m  q$ w! F- l% P2 Z2 k# k0 a# f! z//函数名:int0rupt() interrupt 0; U" a( G+ A& F6 _- r, j. X
//功能:外部中断0中断响应程序
# s$ r% e" [% w1 l6 a//调用函数:
+ @' c2 A2 d' d1 b; B" Z7 i//输入参数:
7 M) `: u2 Y1 J# [! R//输出参数:
: @! M/ `* s2 {( n9 @  }//说明:当P3^2口为低电平时进入响应程序 , l% k- V* X) d( Z
/**********************************************************/, `1 [2 K; Y' V' X. x3 X
void int0rupt() interrupt 0//当P3^2键口为低电平时# e9 @) w% u' z8 D0 @+ c) l
{
7 v9 T5 i' y/ {) X        beep=0;//开蜂鸣器. k  [+ R; D6 T
        while(P3_2!=1);//当P3^2口置高检测,就是按钮不释放蜂鸣器就一直响
: ^( P9 f2 T9 N        beep=1;//关蜂鸣器3 E7 t9 ~4 {$ c% f, I# q+ u1 ?7 [
}2 V8 R' U) v5 ~* [
0 z# M) E, a- a( E" J+ E) v- c& S
5 n; Z: `) c- d. [3 b5 j9 v
: A, x) X) b, e; ~- r: Q' |

该用户从未签到

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 | 只看该作者
感谢楼主分享  学习了
% w' X! x% s3 A9 F4 K8 S2 C* T: U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-17 11:28 , Processed in 0.140625 second(s), 29 queries , Gzip On.

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

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

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