没志青年
发布于 2025-07-02 / 16 阅读
0

STC 中断控制与外部中断

手册P538

中断

中断源

STC15W4K32S4 系列提供了21个中断请求源:

  • 外部中断(5):外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、外部中断4(INT4)

  • 定时器中断(5):定时器0中断、定时器1中断、定时器2中断、定时器3中断、定时器4中断

  • 串口中断(4):串口1中断、串口2中断、串口3中断、串口4中断

  • SPI中断(1):SPI中断

  • A/D转换中断

  • 低压检测(LVD)中断

  • CCP/PWM/PCA中断

  • 比较器中断

  • PWM中断

  • PWM异常检测中断

中断优先级最低为0,数字越大优先级越高。

加黑加下划线的中断,中断优先级固定为0级,其它的中断都具有2个中断优先级。

中断查询次序:

当收到多个相同优先级的中断时,按照内部的顺序响应,这个顺序也就是中断号。

中断服务函数:

interrupt 后面的数字为中断号,函数名可自定义。

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 UART1_Routine(void) interrupt 4;
void ADC_Routine(void) interrupt 5;
void LVD_Routine(void) interrupt 6;
void PCA_Routine(void) interrupt 7;
void UART2_Routine(void) interrupt 8;
void SPI_Routine(void) interrupt 9;
void Int2_Routine(void) interrupt 10;
void Int3_Routine(void) interrupt 11;
void Timer2_Routine(void) interrupt 12;
void Int4_Routine(void) interrupt 16;
void S3_Routine(void) interrupt 17;
void S4_Routine(void) interrupt 18;
void Timer3_Routine(void) interrupt 19;
void Timer4_Routine(void) interrupt 20;
void Comparator_Routine(void) interrupt 21;
void PWM_Routine(void) interrupt 22;
void PWMFD_Routine(void) interrupt 23;

中断规则

  1. 低优先级中断可被高优先级中断打断,反之不能。

  2. 中断响应时,不能被它的同级中断打断。

中断触发时机

中断优先级

外部中断

外部中断触发方式:

  • 外部中断0、1:上升沿或下降沿触发、仅下降沿触发

  • 外部中断2、3、4:仅下降沿触发

外部中断2、3、4的中断标志位被隐藏起来了,对用户不可见。

所有的外部中断在响应后,中断标志位被自动清零。

另外,关闭外部中断 EXn=0(2、3、4)时,也会自动清零。

外部中断程序:

(1)INT0、1

IE0  = 0;    // INT0中断请求标志位清"0"
EX0 = 1;    // 打开INT0中断
IT0 = 1;    // 1 仅下降沿触发 0 上升沿或下降沿触发

EA = 1;    // 打开总中断

INT1就把IE0、EX0、IT0全改为1就行。

void INT0_Isr (void) interrupt 0
{
	...
}

(2)INT2、3、4

对于这三个外部中断,只有开、关控制。

AUXR2 |= 0x10;   //使能INT2中断
AUXR2 |= 0x20;   //使能INT3中断
AUXR2 |= 0x40;   //使能INT4中断

EA = 1;