8086+8253+8255 Proteus 8.6 秒表仿真:3按键控制与0.1秒精度实现

发布时间:2026/7/11 4:39:17
8086+8253+8255 Proteus 8.6 秒表仿真:3按键控制与0.1秒精度实现 808682538255 Proteus 8.6 秒表仿真3按键控制与0.1秒精度实现在微机原理与接口技术的学习中通过Proteus仿真环境搭建一个完整的电子秒表系统是极具实践价值的项目。本文将详细介绍如何基于8086微处理器、8253定时器和8255并行接口芯片在Proteus 8.6平台上实现一个具有0.1秒精度的多功能秒表系统。1. 系统架构设计1.1 核心硬件组成本系统采用模块化设计思想主要硬件构成如下8086微处理器作为系统核心负责协调各外设工作8253定时器提供精确的0.1秒时基信号8255并行接口实现按键输入和数码管显示控制7段数码管动态扫描显示时、分、秒和0.1秒硬件连接示意图8086 CPU ├─ 8253定时器时钟源1MHz │ └─ 产生0.1秒中断 ├─ 8255A端口A段选 │ ├─ 端口B位选 │ └─ 端口C按键输入 └─ 74LS138译码器地址解码1.2 关键参数设计; 8253初始化参数 CLK0频率 1MHz ; 基准时钟 计数器0初值 10000 ; 0.1秒中断周期 工作模式 模式3 ; 方波发生器 ; 数码管显示参数 显示格式 HH-MM-SS.T 动态扫描频率 ≥ 100Hz ; 避免闪烁2. Proteus工程搭建2.1 元件选择与连接在Proteus 8.6中新建工程按以下步骤添加元件核心元件8086 CPU模式设为Minimum8253 Timer8255A PPI7SEG-MPX8-CA共阳数码管辅助电路74LS138地址译码74LS245总线驱动10kΩ上拉电阻按键电路注意Proteus版本兼容性非常重要8.6版本与后续版本在8086模型实现上存在差异建议使用指定版本以避免仿真异常。2.2 地址空间分配采用部分地址译码方案关键芯片地址范围器件基地址控制信号8255A60HCS1825340HCS2中断控制器20HCS3地址译码逻辑表达式CS1 A7·A6·/A5·/A4 CS2 A7·/A6·A5·/A43. 汇编程序设计3.1 主程序框架DATA SEGMENT COUNT DB 0 ; 0.1秒计数 TIME DB 0,0,0,0 ; 时、分、秒、0.1秒 SEG_TAB DB 3FH,06H,5BH,... ; 共阳段码表 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX CALL INIT_8253 ; 初始化定时器 CALL INIT_8255 ; 初始化并行接口 CALL SET_NMI ; 设置非屏蔽中断 MAIN_LOOP: CALL KEY_SCAN ; 按键扫描 CALL DISPLAY ; 显示刷新 JMP MAIN_LOOP3.2 8253初始化代码INIT_8253 PROC MOV AL, 00110110B ; 计数器0模式3二进制 OUT 43H, AL ; 写入控制寄存器 MOV AX, 10000 ; 0.1秒定时初值 OUT 40H, AL ; 写入低字节 MOV AL, AH OUT 40H, AL ; 写入高字节 RET INIT_8253 ENDP3.3 动态显示实现采用分时复用技术驱动8位数码管DISPLAY PROC MOV SI, OFFSET TIME MOV DI, 0 ; 当前显示位 MOV CL, 0FEH ; 位选初值(11111110) NEXT_DIGIT: MOV AL, [SI] ; 获取当前位数据 XLAT ; 查表获取段码 MOV DX, 60H ; 8255端口A OUT DX, AL ; 输出段码 MOV AL, CL MOV DX, 62H ; 8255端口B OUT DX, AL ; 输出位选 CALL DELAY_1MS ; 保持显示 INC SI ; 指向下一位 ROL CL, 1 ; 位选左移 CMP DI, 7 JBE NEXT_DIGIT RET DISPLAY ENDP4. 按键控制逻辑4.1 三按键功能定义按键功能硬件连接KEY1开始/暂停PC0KEY2继续PC1KEY3复位PC24.2 按键消抖算法采用软件延时消抖20ms检测周期KEY_SCAN PROC MOV DX, 64H ; 8255端口C IN AL, DX ; 读取按键状态 AND AL, 07H ; 屏蔽高5位 CMP AL, PREV_KEY JE NO_KEY ; 状态未变化 MOV PREV_KEY, AL CALL DELAY_20MS ; 消抖处理 TEST AL, 01H ; 检测KEY1 JNZ KEY1_PRESSED TEST AL, 02H ; 检测KEY2 JNZ KEY2_PRESSED TEST AL, 04H ; 检测KEY3 JNZ KEY3_PRESSED NO_KEY: RET5. 中断服务程序5.1 NMI中断处理NMI_ISR: PUSH AX INC COUNT ; 0.1秒计数 CMP COUNT, 10 JB EXIT_ISR MOV COUNT, 0 CALL TIME_UPDATE ; 更新时间 EXIT_ISR: POP AX IRET5.2 时间更新算法TIME_UPDATE PROC INC TIME3 ; 0.1秒位 CMP TIME3, 10 JB EXIT_UPDATE MOV TIME3, 0 INC TIME2 ; 秒位 CMP TIME2, 60 JB EXIT_UPDATE MOV TIME2, 0 INC TIME1 ; 分钟位 CMP TIME1, 60 JB EXIT_UPDATE MOV TIME1, 0 INC TIME ; 小时位 EXIT_UPDATE: RET TIME_UPDATE ENDP6. 调试技巧与常见问题6.1 Proteus调试要点信号观察添加逻辑分析仪监控关键信号8253 OUT0波形数码管扫描信号按键输入信号执行跟踪使用Debug→8086→Source Code单步执行性能优化调整动态扫描频率通常1kHz优化延时子程序精度6.2 典型问题解决方案现象可能原因解决方法数码管显示不全位选信号驱动不足增加74LS245总线驱动计时精度偏差大8253时钟源不稳定检查晶振电路添加稳压电容按键响应不灵敏消抖时间设置不当调整DELAY_20MS子程序延时参数仿真运行卡死中断冲突检查NMI引脚连接和中断服务程序7. 工程文件组织建议完整的课程设计应包含以下文件/Stopwatch_Project ├─ /Proteus ; 仿真工程文件 │ ├─ Stopwatch.DSN │ └─ 8086_Config.INI ├─ /Source ; 汇编源代码 │ ├─ MAIN.ASM ; 主程序 │ ├─ ISR.ASM ; 中断服务 │ └─ MACRO.INC ; 宏定义 ├─ /Document ; 设计文档 │ ├─ Schematic.pdf; 原理图 │ └─ Report.docx ; 实验报告 └─ README.md ; 项目说明实际开发中发现采用模块化编程将显示、按键、定时器处理分离为独立模块可显著提高代码可维护性。在调试过程中建议先单独测试每个功能模块再逐步整合为完整系统。