找回密码
 立即注册
搜索
热搜: 中医 针灸 咳嗽
查看: 147|回复: 0

STC89c52中断

[复制链接]

3711

主题

1

回帖

1万

积分

管理员

积分
11937
发表于 2023-2-1 17:19:40 | 显示全部楼层 |阅读模式
中断结构



1. 中断允许寄存器IE和XICON

STC89C52系列单片机CPU对中断源的开放或屏蔽,每一个中断源是否被允许中断,是由
内部的中断允许寄存器IE(地址为A8H)和XICON(地址为C0H)控制的。寄存器IE的格式如
下:
  • IE : 中断允许寄存器 (可位寻址)


  • EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。       
  • EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自
  • 己的中断允许控制位控制。
  • ET2: 定时/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁止T2中断。
  • ES : 串行口1中断允许位。ES=1,允许串行口1中断;ES=0,禁止串行口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中断。
  • EX0 : 外部中断0中断允许位。EX0=1,允许中断;EX0=0禁止中断。


寄存器XICON的格式如下:
XICON : 辅助中断控制寄存器 (可位寻址)


  • PX3: 置位表明外部中断3的优先级为高,优先级最终由[PX3H,PX3]=[0,0];[0,1];[1,0];[1,1]来决定。
  • EX3 : 如被设置成1,允许外部中断3中断;如被清成0,禁止外部中断3中断。
  • IE3 : 外部中断3中断请求标志位,中断条件成立后,IE3=1,可由硬件自动清零。
  • IT3 : 外部中断3中断源类型选择位。IT3=0,INT3/P4.2引脚上的低电平可触发外部中断3。
  • IT3=1,外部中断3为下降沿触发方式。
  • PX2: 置位表明外部中断2的优先级为高,优先级最终由[PX2H,PX2]=[0,0];[0,1];[1,0];
    [1,1]来决定。
  • EX2 : 如被设置成1,允许外部中断2中断;如被清成0,禁止外部中断2中断。
  • IE2 : 外部中断2中断请求标志位,中断条件成立后,IE2=1,可由硬件自动清零。
  • IT2 : 外部中断2中断源类型选择位。IT2=0,INT2/P4.3引脚上的低电平可触发外部中断2。
  • IT2=1,外部中断2为下降沿触发方式。
  • STC89C52系列单片机复位以后,IE和XICON被清0,由用户程序置“1”或清“0”IE和XICON相应的位,实现允许或禁止各中断源的中断申请,若使某一个中断源允许中断必须同时
  • 使CPU开放中断。更新IE和XICON的内容可由位操作指令来实现(SETB BIT;CLR BIT),
  • 也可用字节操作指令实现(即MOV IE,#DATA,ANL IE,#DATA;ORL IE,#DATA;MOV
  • IE,A等)。


中断优先级


STC89C52系列单片机的所有的中断都具有4个中断优先级,对于这些中断请求源可编程为
高优先级中断或低优先级中断,可实现两级中断服务程序嵌套。 �
能被高优先级中断所中断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回
指令RETI,返回主程序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两
条基本规则:
⒈ 低优先级中断可被高优先级中断所中断,反之不能。
⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断
当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询次
序。这相当于在每个优先级内,还同时存在另一个辅助优先级结构,STC89C52系列单片机各
中断优先查询次序如下:

中断源 查询次序
0. INT0 (highest)
1. Timer 0
2. INT1
3. Timer 1
4. UART
5. Timer 1
6. INT1
7. INT1 (lowest)

如果使用C语言编程,中断查询次序号就是中断号,例如:
void Int0_Routine(void) interrupt 0;
void Timer0_Rountine(void) interrupt 1;
void Int1_Routine(void) interrupt 2;
void Timer1_Rountine(void) interrupt 3;
void UART_Routine(void) interrupt 4;
void Timer2_Routine(void) interrupt 5;
void Int2_Routine(void) interrupt 6;
void Int3_Routine(void) interrupt 7;

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|私人站点 ( 冀ICP备2023028127号-2 )

GMT+8, 2025-7-4 13:46 , Processed in 0.086161 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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