前言
终于到外部中断了,其实从往届赛题来看,外部中断的使用比较少(也可能是我太菜了),不过咱得秉着宁错勿漏的精神来复习才行。
如上图所示,STC15的单片机的外部中断分别位于P32、P33(EX0、EX1),其中,外部中断0的中断号为0,外部中断1的中断号为2.
1、通过外部中断0控制LED亮灭
/*
彭某的蓝桥杯复习——外部中断
1、外部中断按键控制LED亮灭
*/
#include #define uint unsigned int #define uchar unsigned char void ALL_Init(); void EX0_Init(); void main() { ALL_Init(); EX0_Init(); while(1) { } } void EX0_run() interrupt 0 { P25 = 0;P26 = 0;P27 = 1; P00 = !P00; } void EX0_Init() { EX0 = 1; EA = 1; IT0 = 1; } void ALL_Init() { P25 = 0;P26 = 1;P27 = 1; P0 = 0x00; P25 = 1;P26 = 0;P27 = 1; P0 = 0x00; P25 = 0;P26 = 0;P27 = 1; P0 = 0xff; } 2、通过外部中断1控制流水灯流水方向 前面做流水灯测试的时候,由于延时函数的干扰,当流水速度不那么快的时,按键存在被延时函数阻塞而无法检测,这次我们通过外部中断进行控制,可以直接打断延时函数,提高按键检测是实时性。 uchar flag = 0; void main() { ALL_Init(); EX0_Init(); EX1_Init(); P25 = 0;P26 = 0;P27 = 1; P00 = 0; while(1) { liushui(); } } void delay_ms(uint ms) { int i; for(;ms>0;ms--) for(i = 864;i>0;i--); } void liushui() { if(flag) P0 = _cror_(P0,1); else P0 = _crol_(P0,1); delay_ms(1000); } void EX1_run() interrupt 2 { flag = !flag; } 结语 至此,外部中断测试结束。
设计资源 培训 开发板 精华推荐
- REF196 精密微功率、低压差堆叠电压基准的典型应用电路
- OLED显示模块-1.27寸彩色
- LTC4367HDD-1 用于限制浪涌电流的过压电源保护控制器的典型应用
- STEVAL-IKR002V4D、SPIRIT1 868-MHz 低数据速率收发器子板
- LT3477EFE 32V 至 6 个白光 LED、具有 PWM 调光的降压模式的典型应用电路
- TLV431 提高固定线性稳压器输出电压的典型应用
- LTM4643MPY 2.375V 至 5V 输入、四路 1V、1.2V、1.5V、1.8V 输出降压稳压器的典型应用
- 使用 Diodes Incorporated 的 PT8A3517 的参考设计
- DN05099/D, 32 W Type-C 接口 QC-3.0 适配器解决方案设计说明
- 用于数据采集系统的 ±15V 仪表放大器