定时与计数的本质 定时本质上是对时间基准的计数将固定周期作为标准进行累积 计数器对非周期性脉冲信号累计通过加1或减1实现 定时器对周期性时钟信号计数按输入周期产生定时输出实现方式对比硬件电路专用电路通用性、灵活性差软件方式程序实现占用CPU时间可编程定时器/计数器程序控制灵活可与CPU并行工作8253主要功能 3个独立的16位计数器, 每个计数器有 6种工作方式通过程序设置、可按二进制或BCD码计数 计数速率高达 2MHz 所有引脚电平与TTL兼容单电源5V引脚GATE硬件输入引脚不能通过软件指令直接触发没有对应的寄存器位CPU 无法执行一条指令如 OUT 或 MOV来直接改变 GATE 引脚的电平。只有在系统电路中通过额外硬件桥接如通过 OUT 指令控制 8255 输出低电平或高电平才能用软件操作间接改变 GATE 状态。所以下文暂且将GATE上升沿归于硬件。CLK0~CLK2计数器0~2的时钟输入GATE0~GATE2计数器0~2的门控信号OUT0~OUT2计数器0~2的输出CS片选信号RD/WR读/写控制A1, A0地址线选择寄存器控制线CSRDWRA1A0操作01000写入计数器#001001写入计数器#101010写入计数器#201011写入控制寄存器00100读计数器#000101读计数器#100110读计数器#200111无操作三态1××××禁止三态控制字CWControl Word当控制线为CS0, WR0, RD1, A11, A01数据总线上的 8 位数值才会被解释为控制字 写入控制寄存器。选择计数器(SC1 SC0)指定该控制字配置哪个计数器读写操作 (RL1 RL0)定义如何读写16位的计数器初值工作方式(M2 M1 M0)选择6种工作方式之一计数制式(BCD)选择计数值是二进制0还是BCD码1SC1 SC0 (D7 D6)00选择计数器001选择计数器110选择计数器211无意义RL1 RL0 (D5D4)00锁存命令用于读操作01只读/写低8位10只读/写高8位11先读/写低8位后读/写高8位M2 M1 M0 (D3D2D1)000方式0001方式1×10方式2×11方式3100方式4101方式5BCD (D0)0二进制计数1BCD码计数Operating Mode下文缩写含义CR, Count Register计数初值寄存器。CE, Counting Element即减1计数器。0事件计数软件触发8253内部没有中断控制电路可以用OUT信号作为中断请求信号OUT上升沿。启动方式写入计数初值软件触发OUT计数期间输出低电平计数结束变高电平并保持GATEGATE0暂停计数GATE1恢复计数计数过程中传入新的初值立即有效。重新开始计数8位另外8位置0写第1个字节暂停写第二个字节后有效16位计数值使用只计一遍无重装. 只有在写入另一个计数值时OUT变低才开始新的计数时序特点写入控制字CW后OUT变低写入初值后经过一个CLK脉冲初值装入CE开始减1计数即计数初值若为N在N1个CLK脉冲后输出信号OUT变为高电平CE0时OUT变高并保持例计数器1方式0只写低8位二进制计数值128MOV AL, 50H ; 控制字01 01 000 0BOUT 07H, AL ; 写入控制寄存器MOV AL, 80H ; 计数值128OUT 05H, AL ; 写入计数器11可编程单稳态触发硬件触发启动方式GATE上升沿触发硬件输出波形若初值N输出宽度为 N个CLK周期的负脉冲GATE上升沿可重新触发重新开始计数新初值下一轮有效需新的GATE上升沿即当原来计数还没结束就终止原来的计数过程开始新的一轮计数计数值使用有条件重装需GATE触发写入控制字CW后OUT为高写入初值后不立即计数等GATE上升沿后的第一个CLK下降沿才开始计数期间OUT为低电平 CE0时结束变高电平0和1的主要区别就是1多了一个用GATE上升沿驱动的重装初值1可以有条件复活(多命可以被Gate上升沿拉起)0血量没了就out了一命。2频率发生器分频器软硬兼施既可软件启动又可硬件启动软硬兼施占空比高低电平的比例(高电平低电平)。启动方式写入初值软件/GATE上升沿硬件输出波形若初值N周期性输出占空比 (N-1):1 的矩形波GATEGATE0停止GATE1恢复恢复时即GATE上升沿重新从初值开始新初值等当前计数结束下一轮有效计数值使用自动重装连续输出写入控制字CW后OUT为高下一个信号的上升沿写入计数初值若GATE为高电平则在该信号之后的第一个时钟下降沿开始减1计数CR内容自动重复装入CEOUT端上就能连续地输出周期性分频信号1/N负脉冲宽度为1个CLK周期改变计数初值即可获得不同速率的OUT输出信号在血量没了的情况下CE01是有条件复活到2就变成自动复活跟王者一样不过2复活时间固定为1个CLK负脉冲。3方波发生器软硬兼施启动方式写入初值软件/GATE上升沿硬件输出波形初值N占空比约 N/2 : N/2分奇偶的方波GATE作用同方式2新初值同方式2计数值使用同方式2N为偶数时高低电平各N/2个CLKN为奇数时高电平(N1)/2低电平(N-1)/2主要应用方波发生器、波特率发生器2、3类似不同就是OUT波形的占空比不同。4软件触发选通启动方式写入计数初值软件触发输出波形计数期间高电平结束时输出1个CLK宽度的负脉冲GATE作用GATE0停止计数新初值同方式0计数值使用同方式0与方式0的区别在于OUT波形0OUT计数期间低电平结束变高并保持4OUT计数期间高电平结束输出一个负脉冲后恢复高5硬件触发选通启动方式GATE上升沿触发输出波形计数期间高电平结束时输出一个CLK宽度的负脉冲GATE作用上升沿随时触发新计数新初值下一轮有效需新的GATE上升沿计数值使用自动重装需GATE触发与方式1的区别1计数期间输出宽负脉冲N个CLK5计数期间高电平结束输出窄负脉冲1个CLKTo sum up:方式0方式1方式2方式3方式4方式5功能事件计数单脉冲频率发生器方波发生器软件触发硬件触发启动方式写入初值GATE上升沿写入初值或GATE↑写入初值或GATE↑写入初值GATE上升沿中止计数GATE0-GATE0GATE0GATE0-写入新初值立即有效下一轮下一轮下一轮立即有效下一轮计数值使用一次有效自动重装自动重装自动重装一次有效自动重装分组软件触发0 和 4无自动重装区别在OUT波形硬件触发1 和 5GATE上升沿启动区别在输出脉冲宽度自动重装2 和 3软硬兼可持续输出区别在占空比8253初始化编程① 写入计数器控制字 → 控制寄存器② 写入计数值 → 对应计数器端口三个通道控制字端口地址相同由SC1、SC0区分BCD计数时指令中仍写十六进制表示的BCD数例计数初值50BCD计数 → 写 50H例1计数器0方式1BCD计数计数值5080H端口F8H~FBH; 控制字0011 0011B 33H ; SC00(计数器0), RL11(先低后高), M001(方式1), BCD1 MOV AL, 33H OUT 0FBH, AL ; 写控制字 MOV AL, 80H ; 低8位 OUT 0F8H, AL MOV AL, 50H ; 高8位 OUT 0F8H, AL例2计数器0方式3输出2kHz方波CLK2.5MHzBCD计数端口80H~83H计算计数值控制字0011 0111B 37HSC00, RL11(先低后高), M011(方式3), BCD1MOV AL, 37H ; 控制字 OUT 83H, AL MOV AL, 50H ; 低8位 (50H BCD的50) OUT 80H, AL MOV AL, 12H ; 高8位 (12H BCD的12) OUT 80H, AL ; 计数值 1250 (BCD)为什么要锁存CPU读取16位计数值时若计数器正在工作高8位和低8位可能不属于同一个值导致读取错误。锁存方法利用GATE信号使计数暂停利用锁存控制字RL1RL0 00
8253芯片
发布时间:2026/6/28 4:01:24
定时与计数的本质 定时本质上是对时间基准的计数将固定周期作为标准进行累积 计数器对非周期性脉冲信号累计通过加1或减1实现 定时器对周期性时钟信号计数按输入周期产生定时输出实现方式对比硬件电路专用电路通用性、灵活性差软件方式程序实现占用CPU时间可编程定时器/计数器程序控制灵活可与CPU并行工作8253主要功能 3个独立的16位计数器, 每个计数器有 6种工作方式通过程序设置、可按二进制或BCD码计数 计数速率高达 2MHz 所有引脚电平与TTL兼容单电源5V引脚GATE硬件输入引脚不能通过软件指令直接触发没有对应的寄存器位CPU 无法执行一条指令如 OUT 或 MOV来直接改变 GATE 引脚的电平。只有在系统电路中通过额外硬件桥接如通过 OUT 指令控制 8255 输出低电平或高电平才能用软件操作间接改变 GATE 状态。所以下文暂且将GATE上升沿归于硬件。CLK0~CLK2计数器0~2的时钟输入GATE0~GATE2计数器0~2的门控信号OUT0~OUT2计数器0~2的输出CS片选信号RD/WR读/写控制A1, A0地址线选择寄存器控制线CSRDWRA1A0操作01000写入计数器#001001写入计数器#101010写入计数器#201011写入控制寄存器00100读计数器#000101读计数器#100110读计数器#200111无操作三态1××××禁止三态控制字CWControl Word当控制线为CS0, WR0, RD1, A11, A01数据总线上的 8 位数值才会被解释为控制字 写入控制寄存器。选择计数器(SC1 SC0)指定该控制字配置哪个计数器读写操作 (RL1 RL0)定义如何读写16位的计数器初值工作方式(M2 M1 M0)选择6种工作方式之一计数制式(BCD)选择计数值是二进制0还是BCD码1SC1 SC0 (D7 D6)00选择计数器001选择计数器110选择计数器211无意义RL1 RL0 (D5D4)00锁存命令用于读操作01只读/写低8位10只读/写高8位11先读/写低8位后读/写高8位M2 M1 M0 (D3D2D1)000方式0001方式1×10方式2×11方式3100方式4101方式5BCD (D0)0二进制计数1BCD码计数Operating Mode下文缩写含义CR, Count Register计数初值寄存器。CE, Counting Element即减1计数器。0事件计数软件触发8253内部没有中断控制电路可以用OUT信号作为中断请求信号OUT上升沿。启动方式写入计数初值软件触发OUT计数期间输出低电平计数结束变高电平并保持GATEGATE0暂停计数GATE1恢复计数计数过程中传入新的初值立即有效。重新开始计数8位另外8位置0写第1个字节暂停写第二个字节后有效16位计数值使用只计一遍无重装. 只有在写入另一个计数值时OUT变低才开始新的计数时序特点写入控制字CW后OUT变低写入初值后经过一个CLK脉冲初值装入CE开始减1计数即计数初值若为N在N1个CLK脉冲后输出信号OUT变为高电平CE0时OUT变高并保持例计数器1方式0只写低8位二进制计数值128MOV AL, 50H ; 控制字01 01 000 0BOUT 07H, AL ; 写入控制寄存器MOV AL, 80H ; 计数值128OUT 05H, AL ; 写入计数器11可编程单稳态触发硬件触发启动方式GATE上升沿触发硬件输出波形若初值N输出宽度为 N个CLK周期的负脉冲GATE上升沿可重新触发重新开始计数新初值下一轮有效需新的GATE上升沿即当原来计数还没结束就终止原来的计数过程开始新的一轮计数计数值使用有条件重装需GATE触发写入控制字CW后OUT为高写入初值后不立即计数等GATE上升沿后的第一个CLK下降沿才开始计数期间OUT为低电平 CE0时结束变高电平0和1的主要区别就是1多了一个用GATE上升沿驱动的重装初值1可以有条件复活(多命可以被Gate上升沿拉起)0血量没了就out了一命。2频率发生器分频器软硬兼施既可软件启动又可硬件启动软硬兼施占空比高低电平的比例(高电平低电平)。启动方式写入初值软件/GATE上升沿硬件输出波形若初值N周期性输出占空比 (N-1):1 的矩形波GATEGATE0停止GATE1恢复恢复时即GATE上升沿重新从初值开始新初值等当前计数结束下一轮有效计数值使用自动重装连续输出写入控制字CW后OUT为高下一个信号的上升沿写入计数初值若GATE为高电平则在该信号之后的第一个时钟下降沿开始减1计数CR内容自动重复装入CEOUT端上就能连续地输出周期性分频信号1/N负脉冲宽度为1个CLK周期改变计数初值即可获得不同速率的OUT输出信号在血量没了的情况下CE01是有条件复活到2就变成自动复活跟王者一样不过2复活时间固定为1个CLK负脉冲。3方波发生器软硬兼施启动方式写入初值软件/GATE上升沿硬件输出波形初值N占空比约 N/2 : N/2分奇偶的方波GATE作用同方式2新初值同方式2计数值使用同方式2N为偶数时高低电平各N/2个CLKN为奇数时高电平(N1)/2低电平(N-1)/2主要应用方波发生器、波特率发生器2、3类似不同就是OUT波形的占空比不同。4软件触发选通启动方式写入计数初值软件触发输出波形计数期间高电平结束时输出1个CLK宽度的负脉冲GATE作用GATE0停止计数新初值同方式0计数值使用同方式0与方式0的区别在于OUT波形0OUT计数期间低电平结束变高并保持4OUT计数期间高电平结束输出一个负脉冲后恢复高5硬件触发选通启动方式GATE上升沿触发输出波形计数期间高电平结束时输出一个CLK宽度的负脉冲GATE作用上升沿随时触发新计数新初值下一轮有效需新的GATE上升沿计数值使用自动重装需GATE触发与方式1的区别1计数期间输出宽负脉冲N个CLK5计数期间高电平结束输出窄负脉冲1个CLKTo sum up:方式0方式1方式2方式3方式4方式5功能事件计数单脉冲频率发生器方波发生器软件触发硬件触发启动方式写入初值GATE上升沿写入初值或GATE↑写入初值或GATE↑写入初值GATE上升沿中止计数GATE0-GATE0GATE0GATE0-写入新初值立即有效下一轮下一轮下一轮立即有效下一轮计数值使用一次有效自动重装自动重装自动重装一次有效自动重装分组软件触发0 和 4无自动重装区别在OUT波形硬件触发1 和 5GATE上升沿启动区别在输出脉冲宽度自动重装2 和 3软硬兼可持续输出区别在占空比8253初始化编程① 写入计数器控制字 → 控制寄存器② 写入计数值 → 对应计数器端口三个通道控制字端口地址相同由SC1、SC0区分BCD计数时指令中仍写十六进制表示的BCD数例计数初值50BCD计数 → 写 50H例1计数器0方式1BCD计数计数值5080H端口F8H~FBH; 控制字0011 0011B 33H ; SC00(计数器0), RL11(先低后高), M001(方式1), BCD1 MOV AL, 33H OUT 0FBH, AL ; 写控制字 MOV AL, 80H ; 低8位 OUT 0F8H, AL MOV AL, 50H ; 高8位 OUT 0F8H, AL例2计数器0方式3输出2kHz方波CLK2.5MHzBCD计数端口80H~83H计算计数值控制字0011 0111B 37HSC00, RL11(先低后高), M011(方式3), BCD1MOV AL, 37H ; 控制字 OUT 83H, AL MOV AL, 50H ; 低8位 (50H BCD的50) OUT 80H, AL MOV AL, 12H ; 高8位 (12H BCD的12) OUT 80H, AL ; 计数值 1250 (BCD)为什么要锁存CPU读取16位计数值时若计数器正在工作高8位和低8位可能不属于同一个值导致读取错误。锁存方法利用GATE信号使计数暂停利用锁存控制字RL1RL0 00