以下是使用 8051 单片机实现外部中断 0 由边沿触发,控制 P2 口的 8 个发光二极管依次点亮的代码: ```c #include <reg51.h> // 定义一个全局变量用于记录当前点亮的 LED 位置 unsigned char led_pos = 0; // 外部中断 0 服务函数 void ex0_isr() interrupt 0 { // 熄灭所有 LED P2 = 0xFF; // 点亮当前位置的 LED P2 &= ~(0x01 << led_pos); // 更新 LED 位置 led_pos = (led_pos + 1) % 8; } void main() { // 设置外部中断 0 为边沿触发方式 IT0 = 1; // 使能外部中断 0 EX0 = 1; // 使能全局中断 EA = 1; // 初始化 P2 口,熄灭所有 LED P2 = 0xFF; while(1) { // 主循环可以执行其他任务 } } ``` 代码解释: 1. 全局变量 `led_pos`:用于记录当前点亮的 LED 位置,初始值为 0。 2. 外部中断 0 服务函数 `ex0_isr`:当外部中断 0 触发时,该函数会被执行。首先熄灭所有 LED,然后点亮当前位置的 LED,最后更新 `led_pos` 的值。 3. 主函数 `main`: - `IT0 = 1`:设置外部中断 0 为边沿触发方式。 - `EX0 = 1`:使能外部中断 0。 - `EA = 1`:使能全局中断。 - `P2 = 0xFF`:初始化 P2 口,熄灭所有 LED。 - `while(1)`:主循环可以执行其他任务。 额外需要注意的逻辑点: 1. 确保外部中断 0 的触发信号是边沿触发,否则可能无法正常触发中断。 2. 在中断服务函数中,尽量避免执行耗时的操作,以免影响其他任务的执行。 3. 要注意 `led_pos` 的更新逻辑,确保它不会超出 0 到 7 的范围。 [2025-06-22 11:26:15 | AI写代码神器 | 538点数解答]