一、实验目的1.理解MCS-51单片机中断系统结构及工作原理; 2.掌握MCS-51单片机中断系统相关寄存器的设置; 3.掌握利用MCS-51单片机中断系统实现中断的软件设计; 4.掌握KeilC51集成开发环境和Proteus电子仿真软件的使用。 二、实验仪器设备 软件环境:KeilC51、Proteus 三、实验原理/算法分析
四、实验内容和步骤 依照课本5.7节设计一个4路抢答器,4个按键通过与门接外部中断引脚,4个LED指示灯指示抢答结果。然后按要求编写程序,并加载到proteus的AT89C51单片机中,观察显示结果。 1. 硬件原理4路抢答器的硬件设计主要包括按键输入、与门逻辑电路、外部中断引脚和LED指示灯。具体设计如下: 按键输入:4个按键分别连接到单片机的P1口的低4位(P1^0、P1^1、P1^2、P1^3)。每个按键在按下时会将对应的引脚拉低。 与门逻辑电路:4个按键的信号通过与门电路连接到单片机的外部中断引脚(INT0)。当任意一个按键按下时,与门输出低电平,触发外部中断。 外部中断引脚:单片机的INT0引脚(P3^2)用于接收与门的输出信号。当检测到低电平信号时,触发中断服务程序。 LED指示灯:4个LED分别连接到单片机的P2口的低4位(P2^0、P2^1、P2^2、P2^3)。当某个按键被按下时,对应的LED点亮,表示抢答成功。 2. 算法分析程序的主要功能是实现4路抢答器的逻辑控制,包括按键检测、去抖动处理、抢答结果判断和LED指示。具体算法如下: 初始化 配置单片机的外部中断INT0和INT1,允许中断并设置为下降沿触发。 初始化P1口为上拉输入,P2口为输出,所有LED初始状态为熄灭。 设置一个标志位flag,用于判断是否已经有选手抢答成功。 外部中断0服务程序(INT0): 当检测到按键按下时,进入中断服务程序。 延时10ms进行去抖动处理,确保按键信号稳定。 检测P1口的低4位,判断哪个按键被按下。 如果没有选手已经抢答成功(flag == 0),点亮对应的LED,并将flag置为1,表示抢答成功。 如果已经有选手抢答成功,则忽略后续按键信号。 外部中断1服务程序(INT1): 当按下复位按钮时,进入中断服务程序。 清除flag标志位,熄灭所有LED,恢复初始状态,等待下一轮抢答。 五、实验结果
Keil编译结果: Proteus仿真结果:
六、实验总结 1.实验收获: 深入理解中断机制: 通过本次实验,我深入理解了单片机外部中断的工作原理,包括中断的触发条件、中断服务程序的编写以及中断优先级的设置。中断机制是嵌入式系统中实现快速响应的关键技术,掌握它对于设计实时系统非常重要。 掌握硬件电路设计: 实验中涉及了按键输入、与门逻辑电路以及LED指示灯的设计。通过实际搭建电路,我学会了如何根据需求选择合适的硬件元件,并理解了硬件电路与单片机之间的接口关系。这为我今后设计更复杂的嵌入式系统打下了坚实的基础。 编程能力提升: 在编写抢答器程序的过程中,我练习了C语言的逻辑控制和模块化编程。通过合理划分功能模块(如初始化模块、中断服务模块等),使代码更加清晰易读,也提高了程序的可维护性。同时,我也学会了如何调试程序,解决程序运行中出现的问题。 2. 问题与改进: 问题:程序中存在一些冗余代码,导致代码效率较低。 改进:通过优化代码结构,减少重复代码,提高程序的运行效率。例如,将按键检测和LED控制封装成函数,通过函数调用实现功能,使代码更加简洁高效。 3.拓展思考: 1.可以在抢答器的基础上增加计时功能,记录每个选手的抢答时间。通过单片机的定时器模块实现计时,并将计时结果显示在数码管或LCD显示屏上。这样可以增加抢答器的趣味性和实用性。 2.当前的抢答器只能进行一轮抢答,可以通过增加复位按钮和计数器功能,实现多轮抢答。每轮抢答结束后,按下复位按钮,系统自动清零并进入下一轮抢答。同时,可以记录每轮的抢答结果,统计每个选手的得分。
|