可编程定时计数器 8254

    技术2022-07-11  111

    1 8254 基本功能

    8254 是 8253 的改进型,基本功能相同,硬件组成、外部引脚、编程特性完全兼容

    3 个独立的 16 位计数器6 种工作方式读回命令,除了读取当前技术单元内容,还可以读出状态寄存器的内容

    2 8254 内部结构和外部引脚

    数据总线缓冲器:用于将 8254 与系统数据总线相连。写入 8254 工作模式,向计数器写入计数初值,某计数器读取当前的计数值

    读/写逻辑电路:选定制定寄存器,并指定读写操作

    A0A1说明00计数器001计数器110计数器211控制寄存器

    控制寄存器:决定计数器的工作方式

    计数器:拥有 3 个相互独立,结构完全一样的计数器。每个计数器有 3 个引脚:GATEi 门控信号输入端,CLKi 计数脉冲输入端,OUTi 信号输出端

    部件说明计数器初值寄存器 CR存放计数初值计数器工作单元 CE用于进行 -1 操作

    向计数器初值寄存器写值,会自动传入计数器工作单元,直到减到某值,OUTi 产生信号

    3 8254 工作方式

    软件启动:GATEi 为高电平

    硬件启动:GATEi 有一个上升沿

    重复计数:计数完毕后,初值寄存器的值又回存入工作单元

    工作方式启动方式是否重复计数输出信号0软否结束输出低电平1硬否计数输出低,结束输出高2软、硬是结束前一个输出低3软、硬是输出对称方波4软否结束输出 CLK 宽度的低电平5硬否结束输出 CLK 宽度的低电平

    输出不对称方波时,(N+1)/2 个时钟周期输出为高电平,(N-1)/2 个时钟周期输出为低电平,也就是高电平比低电平多一

    4 8254 控制字及其状态字

    8254 控制字有两个:一个是用来设置工作方式的方式控制字;另一个是用来设置读回命令的读出控制字

    方式控制字

    D7D6D5D4D3D2D1D0计数器选择读写格式选择工作方式选择是否使用 BCD

    D5D4 = 0,锁存 D5D4 = 1,只读写低 8 位 D5D4 = 2,只读写高 8 位 D5D4 = 3,先读写低 8 位,再读写高 8 位

    十进制(BCD 码)计数值范围为 1 ~ 10000,取最大值时写入 0000H 二进制计数值范围为 0 ~ 65536,取最大值时写入 0000H

    读出控制字

    D7D6D5D4D3D2D1D0110 则锁存计数值0 则锁存计数器状态工作方式选择0

    D4 = 0 则会将计数器状态存入状态寄存器

    状态字

    D7D6D5D4D3D2D1D0OUT 引脚现行状态计数初值是否装入工作方式选择

    5 8254 应用

    注意

    每次启动计数,需要两个写操作,第一个写脉冲写入控制字,第二个写脉冲写入计数初值寄存器每个计数器的控制字均送入控制寄存器计数初值 = fCLK / fOUT

    举例

    8254 的计数器 0 做频率 4 kHz 的方波发生器,8254 的端口地址位 40H ~ 43H, fCLK0 = 12 MHz

    ;方波发生器所以工作在方式3 ;计数初始值=12Mhz/4kHz=3000 ;方式控制字00110111B MOV AL,00110111B OUT 43H,AL ;写控制字 MOV AX,3000H ;选择的是BCD计数 OUT 40H,AL ;写计数初值低8位 MOV AL,AH ;OUT不允许是H所以要先给L OUT 40H,AL ;写计数初值高8位

    8254 的计数器 2 做 1s 标准时钟,端口地址为 0360H、0362H、0364H、0366H,fCLK0 = 10 MHz

    ;计数初值=10MHz/1HZ=10 000 000 > 65535 ;所以一个计数器不行,要用俩,且能重复计数,做1s标准时钟 ;所以计数器2工作在方式2,计数器0工作在方式3 ;计数器2计数初值=2000,计数器0计数初值=5000 ;计数器2方式控制字10110101B,计数器0方式控制字00110101B MOV AL,00110111B OUT 0366H,AL MOV AX,2000H MOV 0360H,AL MOV AL,AH MOV 0360H,AL MOV AL,10110101B OUT 0366,AL MOV AX,5000H MOV 0364H,AL MOV AL,AH MOV 0364,AL

    8254 端口地址为 40H ~ 43H,读出计数器 2 的计数值

    MOV AL,1100100B OUT 43H,AL ;写控制字 IN AL,42H MOV DL,AL ;读状态 IN AL,42H ;读低8位 MOV AH,AL IN AL,42H ;读高8位 XCHG AH,AL
    Processed: 0.015, SQL: 9