尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

微机原理实验三:8253定时器编程实战(附完整代码解析)

微机原理实验三:8253定时器编程实战(附完整代码解析) 8253定时器深度解析从硬件原理到代码实战在微机原理与接口技术的学习中8253可编程定时器/计数器是一个绕不开的核心芯片。作为Intel早期设计的经典外围接口芯片8253至今仍在嵌入式系统和硬件控制领域发挥着重要作用。本文将带您深入理解8253的工作原理并通过完整的代码示例展示如何在实际项目中配置和使用它。1. 8253定时器基础架构8253芯片包含三个独立的16位计数器Counter 0、Counter 1、Counter 2每个计数器都可以单独编程设置工作模式。理解其内部结构是正确编程的前提。主要功能单元数据总线缓冲器与CPU数据总线相连的8位双向三态缓冲器读写控制逻辑接收CPU的控制信号CS、RD、WR、A0、A1控制字寄存器存储工作模式设置每个计数器单独配置计数器单元三个独立的16位递减计数器注意8253的计数器是递减计数器即从初始值开始递减到0后产生输出信号芯片引脚功能对照表引脚名称功能描述D7-D0数据总线双向三态数据线CLK0-2时钟输入计数器时钟信号输入GATE0-2门控输入控制计数器工作OUT0-2计数器输出计数器输出信号A0-A1地址线选择计数器或控制字寄存器CS片选信号低电平有效RD读信号低电平有效WR写信号低电平有效2. 8253工作模式详解8253每个计数器都有6种可编程工作模式理解这些模式的区别对实际应用至关重要。2.1 模式0中断信号发生器特点写入控制字后OUT输出变低写入计数值后开始计数计数到0时OUT变高并保持GATE为高时计数为低时暂停典型应用产生可编程的中断信号作为软件定时器使用2.2 模式1可编程单稳态触发器特点由GATE上升沿触发OUT输出宽度为N个CLK周期的负脉冲可重复触发典型应用脉冲宽度测量延时电路2.3 模式2分频器/速率发生器特点输出周期性的负脉冲脉冲宽度为1个CLK周期分频比为N:1典型应用系统时钟分频实时时钟基准; 模式2配置示例 MOV DX, 213H ; 控制端口地址 MOV AL, 00110100B ; 计数器0模式2二进制计数 OUT DX, AL MOV AX, 1000 ; 分频比1000 MOV DX, 210H ; 计数器0端口 OUT DX, AL ; 写入低字节 MOV AL, AH OUT DX, AL ; 写入高字节3. 8253编程实战指南掌握了理论基础后让我们通过实际代码来演示如何配置和使用8253定时器。3.1 初始化流程确定端口地址根据硬件连接确定控制端口和数据端口地址设置控制字选择计数器、工作模式、计数格式等写入初始值按照控制字设定的格式写入计数初值启动计数器通过GATE信号或自动开始计数3.2 完整代码解析下面是一个配置三个计数器分别产生不同频率方波的完整示例.486 CODE SEGMENT USE16 ASSUME CS:CODE BEG: JMP START ; 端口地址定义 CCONPORT EQU 213H ; 控制端口地址 CDPORT1 EQU 210H ; 计数器0数据端口 CDPORT2 EQU 211H ; 计数器1数据端口 CDPORT3 EQU 212H ; 计数器2数据端口 ; 控制字定义 CCONBIT1 EQU 00110110B ; 计数器0: 模式3, 二进制 CCONBIT2 EQU 01110110B ; 计数器1: 模式3, 二进制 CCONBIT3 EQU 10110110B ; 计数器2: 模式3, 二进制 ; 计数器初值计算 ; 时钟频率1.193182MHz CHDBIT1 EQU 533H ; 输出900Hz CHDBIT2 EQU 5E3H ; 输出800Hz CHDBIT3 EQU 7D4H ; 输出600Hz START: ; 配置计数器0 MOV DX, CCONPORT MOV AL, CCONBIT1 OUT DX, AL ; 写入控制字 MOV AX, CHDBIT1 MOV DX, CDPORT1 OUT DX, AL ; 写入低字节 MOV AL, AH OUT DX, AL ; 写入高字节 ; 配置计数器1 MOV DX, CCONPORT MOV AL, CCONBIT2 OUT DX, AL MOV AX, CHDBIT2 MOV DX, CDPORT2 OUT DX, AL MOV AL, AH OUT DX, AL ; 配置计数器2 MOV DX, CCONPORT MOV AL, CCONBIT3 OUT DX, AL MOV AX, CHDBIT3 MOV DX, CDPORT3 OUT DX, AL MOV AL, AH OUT DX, AL ; 主循环 WT: NOP JMP WT CODE ENDS END BEG3.3 关键点解析控制字格式00选择计数器011先读写低字节后高字节011模式3方波发生器0二进制计数初值计算 计数初值 输入时钟频率 / 输出频率例如1.193182MHz / 900Hz ≈ 1333 533H写入顺序先写控制字到控制端口再写计数初值到对应的数据端口16位初值需分两次写入先低字节后高字节4. 常见问题与调试技巧在实际硬件调试中经常会遇到各种问题。以下是一些常见问题及其解决方法4.1 计数器不工作可能原因GATE信号未正确连接应接高电平控制字设置错误初始值写入顺序不正确排查步骤用示波器检查CLK信号是否正常确认GATE引脚电平检查控制字是否正确写入控制端口验证初始值写入顺序4.2 输出频率不正确可能原因初始值计算错误时钟源频率与预期不符控制字中计数方式设置错误二进制/BCD解决方法重新计算初始值测量实际时钟频率检查控制字中计数方式位4.3 多计数器协同工作当需要多个计数器协同工作时需要注意优先级关键任务使用独立的计数器资源共享可将一个计数器的输出作为另一个的时钟输入同步通过GATE信号同步多个计数器; 计数器级联示例计数器0输出作为计数器1的时钟 ; 配置计数器0为模式2分频器 MOV DX, CCONPORT MOV AL, 00110100B ; 计数器0模式2 OUT DX, AL MOV AX, 1000 ; 分频比1000 MOV DX, CDPORT1 OUT DX, AL MOV AL, AH OUT DX, AL ; 配置计数器1为模式3方波发生器 MOV DX, CCONPORT MOV AL, 01110110B ; 计数器1模式3 OUT DX, AL MOV AX, 500 ; 分频比500 MOV DX, CDPORT2 OUT DX, AL MOV AL, AH OUT DX, AL5. 进阶应用与性能优化掌握了基本用法后可以探索8253更高级的应用场景。5.1 精确延时实现利用模式0可以实现精确的软件延时; 精确延时子程序 ; 输入CX 延时计数值 DELAY PROC PUSH AX PUSH DX MOV DX, CCONPORT MOV AL, 00110000B ; 计数器0模式0二进制 OUT DX, AL MOV DX, CDPORT1 MOV AX, CX OUT DX, AL ; 写入低字节 MOV AL, AH OUT DX, AL ; 写入高字节 WAIT_LOOP: IN AL, DX ; 读取计数器值 TEST AL, AL JNZ WAIT_LOOP POP DX POP AX RET DELAY ENDP5.2 脉冲宽度测量结合模式1和模式5可以实现脉冲宽度测量配置一个计数器为模式1单稳态用被测信号触发GATE测量OUT输出的脉冲宽度5.3 性能优化建议减少IO操作尽量一次性完成控制字和初始值设置合理选择模式根据需求选择最合适的工作模式时钟选择在满足需求的前提下使用较低的时钟频率中断利用结合OUT信号和系统中断提高效率在实验室调试8253时最实用的技巧是准备一个简单的测试程序逐步验证每个功能模块。例如可以先单独测试每个计数器确认基本功能正常后再尝试复杂应用。遇到问题时从最简单的配置开始排查逐步增加复杂度。
返回列表