#C0303
沧海茫茫千钟粟,且拾吾昧一微尘
——《沧海拾昧集》@CuPhoenix
【阅前敬告】
沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系
如有问题定为本集记录有谬,切勿深究
目录
引子:定时、计数与端口
1、微机中的定时类型
- 内部定时:产生运算器、控制器等CPU内部的控制时序,比如取值周期、读/写周期、中断周期等。主要用于CPU内部指令的执行过程。计算机的每个操作都要按严格的事件节拍(周期)执行。内部定时的计时单位比外部定时的计时单位要小得多,一般是ns级。
- 外部定时:外部设备实现某种功能时,所需要的一种时序关系,外部定时的计数单位一般为ms级和s级。
2、外部定时
- 软件定时:写延时子程序,利用循环,通过循环次数及循环体内的指令周期数来计算定时时间。节省硬件,实施方便。但占用CPU时间,降低CPU效率,与CPU的工作频率有关,通用性差。
- 硬件定时:采用外部定时器进行定时,由于定时器是独立于CPU而自成系统的定时设备,因此,不占用CPU的时间,定时时间可长可短,使用灵活。尤其是定时时间固定,不受CPU的工作频率影响,定时程序具有通用性。
3、两种定时方式
- 加法定时:正计时,每次将当前的时间加1,直到与设定的时间相等时,提示设定的时间已到。
- 减法定时:倒计时,每次将设定的时间减1,直到为0,提示设定的时间已到。减法定时比加法定时的优势在于设置计数初值便利。
示例:设定时器的计数器是一个8位的寄存器,计100个脉冲,考察计数初值
① 加法计数:256 - 100 = 156,即 1001 1100 B,9CH;
②减法计数:100,即 0110 0100 B,64H;
定时/计数器的核心是一个自动加1或减1的计数器
4、端口
端口是接口电路或扩展部件中能被微处理器CPU直接访问(读/写)的寄存器,每个端口都有一个端口地址。
一、Inter 8253 功能与结构
1、8253的主要功能
8253有3个独立的16位计数器通道,其中每个通道都:
- 可以按照二进制或十进制计数;
- 计数速率可高达2MHz;
- 有6种工作方式,可由程序设置改变;
- 所有的输入输出都与TTL兼容。
2、8253的内部结构
组成部分 | 包含内容 | 作用 |
---|---|---|
数据总线缓冲器 | 与CPU数据总线连接的8位双向三态缓冲器 | CPU向8253写入的控制字; CPU向对应的计数器写入的初值; CPU读取对应计数器的当前计数值 |
读写控制逻辑 | 片选信号(CS*)、读写信号(RD*、WR*)、端口(A0、A1) | - |
控制字寄存器 | - | 在初始化编程时,可分别设置3个计数器的工作方式等 |
计数器 | 时钟输入(CLK)、门控输入( GATE)、输出(OUT) | 3个独立的计数通道,可分别按不同的工作方式工作 |
计数器内部有:8位控制寄存器(控制计数器的工作方式)、16位计数初值寄存器(装计数初值)、计数执行部件(执行减1操作)、输出锁存器(需要读取当前计数值时,将当前执行计数器中的值锁存进该存储器后读取)。
3、8253的引脚
- D0 ~ D7:双向三态数据总线;
- A1,A0:地址线,用于片内寻址;
- CS*:片选信号,低电平有效;
- RD* / WR*:读信号/写信号;
- CLK:可输入周期或随机的脉冲信号;
- GATE:启动或禁止计数;
- OUT:减1计数到零信号输出端,输出信号可以是方波,脉冲,电平等。
4、端口内部寻址
A1 | A0 | 内部寻址 |
---|---|---|
0 | 0 | 计数器0 |
0 | 1 | 计数器1 |
1 | 0 | 计数器2 |
1 | 1 | 控制寄存器 |
二、Inter 8253 初始化编程
流程:向控制端口写入通道控制字 → 向选中的通道端口写入计数初值
1、8253的控制字
2、计数初值的计算
做计数器:要求计数的次数即计数初值;
做定时器:计数初值 = 定时时间 × 脉冲频率;
示例:CLK = 1.19318MHz, t = 5ms
计数初值为:
做分频器:要求产生频率为f的信号波形的初值;
示例:CLK = 1.19318MHz, f = 800Hz
计数初值为:(将这个初值称为时间常数N)
3、计数初值的范围
对二进制计数:0000H ~ FFFFH;
对BCD计数:0000 ~ 9999;
注:0000是最大值,代表1 0000 0000 0000 0000 B 或 10000 D
4、初始化编程
- 根据要求或硬件电路确定各通道和控制字寄存器的地址;
- 根据对各通道计数或定时的要求确定8253的控制字;
- 根据要求计算各通道的计数初值。
示例:用通道0,工作在方式1,BCD计数,计数值为5080,8253端口地址为F8H~FBH
MOV AL,33H ;控制字 0011 0011 B
OUT 0FBH,AL ;控制字寄存器
MOV AX,5080H ;计数初值
OUT 0F8H,AL ;通道0地址输出低8位
MOV AL,AH
OUT 0F8H,AL ;通道0地址输出高8位
示例:读取通道1的16位计数值,8253端口地址为F8H~FBH
MOV AL,40H ;锁存控制字 0100 xxxx B
OUT 0FBH,AL ;控制口
IN AL,0F9H ;读通道1低8位
MOV CL,AL ;存于CL中
IN AL,0F9H ;读通道1高8位
MOV CH,AL ;存于CH中
三、8253的六种工作方式
1、基本规则
- 控制字写入计数器时,所有的控制逻辑电路立即复位,输出端OUT进入初始状态(高电平或低电平)。
- 初值写入后,要经过一个时钟上升沿和下降沿,计数执行部件才开始计数。
- 在时钟CLK的上升沿,门控GATE被采样。门控的触发方式为边沿或电平,边沿触发脉宽可以很窄,且高低电平均可(计数器内部有个边沿触发器,随时检测),电平触发则必须在下一个时钟上升沿前保持高电平。
- 在时钟脉冲的下降沿计数器作减1计数。
2、方式0:计数结束产生中断
基本功能 | 计数结束输出正跳变信号 | |
---|---|---|
启动方式 | 软件启动,每设置一次初值只启动一次计数过程 | |
OUT状态 | 写入控制字后,OUT初态为低 在计数过程中一直保持为低电平,当计数器减到0时,OUT立即变成高电平 | |
门控作用 | GATE = 1:允许计数 GATE = 0:计数暂停 | |
初值重装 | 不重装,再次启动需再送入计数初值 | |
初值改变 | 立即有效,即重新写入初值时停止计数,当写完初值后,在CLK的下降沿处,开始以新的计数初值计数 | |
输出波形 |
3、方式1:硬件可重触发单稳态方式
基本功能 | 单稳延时器(宽度为 N 的负脉冲) | |
---|---|---|
启动方式 | 只能由门控脉冲GATE的上升沿启动(硬件启动) | |
OUT状态 | 写入控制字后,OUT初态为高 GATE启动后,获得N个CLK宽度的低电平 | |
门控作用 | GATE 上升沿 启动计数 | |
初值重装 | 计数中途,若GATE出现上升沿,计数器从CLK的下降沿开始重新计数 计数到零后,可再次由外部触发启动,不用再次送入一个计数初值 | |
初值改变 | 不影响本次计数,在下次GATE上升沿时有效。计数初值是下次有效的 | |
输出波形 |
4、方式2:周期性负脉冲输出
基本功能 | 分频器(周期性负脉冲,在完成 N-1 个计数后,在 N 个CLK时输出一个负脉冲) | |
---|---|---|
启动方式 | 装入初值后开始计数(软件启动);计数或闲置期间,若GATE为0,停止计数,直到GATE出现上升沿,计数器重新开始计数输出(硬件启动) | |
OUT状态 | 写入控制字后,OUT初态为高 计数到1后,输出一个CLK的低电平,接着又从N开始重复计数 | |
门控作用 | GATE = 1:允许计数 GATE = 0:计数暂停 上升沿:启动计数 | |
初值重装 | 计数到1后,输出一个CLK的低电平,然后自动从 N 开始重复计数 | |
初值改变 | 不影响本次计数,输出本次OUT脉冲后按新的计数初值开始计数。计数初值是下次有效的 | |
输出波形 |
5、方式3:周期性方波输出
基本功能 | 方波发生器(占空比为1:1或近似1:1的连续方波) | |
---|---|---|
启动方式 | 装入初值后开始计数(软件启动);计数或闲置期间,若GATE为0,停止计数,直到GATE出现上升沿,计数器重新开始计数输出(硬件启动) | |
OUT状态 | 写入控制字后,OUT初态为高 若初值N为偶数,输出N/2个CLK周期高电平,N/2个CLK周期低电平; 若N为奇数, (N+1)/2个高电平,(N-1)/2个低电平 | |
门控作用 | GATE = 1:允许计数 GATE = 0:计数暂停 上升沿:启动计数 | |
初值重装 | 计数中途出现GATE上升沿重新启动计数周期 计数到1后,输出一个CLK的低电平,然后自动从 N 开始重复计数 | |
初值改变 | 不影响本次计数,下一周期按新的计数初值开始计数。计数初值是下次有效的 | |
输出波形 |
6、方式4:单次负脉冲输出(软件启动)
基本功能 | 单脉冲发生器(在完成 N 个计数后,在 N+1 个CLK时输出一个负脉冲) | |
---|---|---|
启动方式 | 软件启动,每设置一次初值只启动一次计数过程 | |
OUT状态 | 写入控制字后,OUT初态为高 当计数器减到0时,输出一个周期的低电平,其他时刻维持高电平 | |
门控作用 | GATE = 1:允许计数 GATE = 0:计数暂停 | |
初值重装 | 计数中途出现GATE上升沿重新启动计数周期 结束后初值不重装,再次启动需再送入计数初值 | |
初值改变 | 立即有效,即重新写入初值时停止计数,当写完初值后,在CLK的下降沿处,开始以新的计数初值计数 | |
输出波形 |
7、方式5:单次负脉冲输出(硬件启动)
基本功能 | 单脉冲发生器(在完成 N 个计数后,在 N+1 个CLK时输出一个负脉冲) | |
---|---|---|
启动方式 | 硬件启动,只能由门控脉冲GATE上升沿启动 | |
OUT状态 | 写入控制字后,OUT初态为高 当计数器减到0时,输出一个周期的低电平,其他时刻维持高电平 | |
门控作用 | GATE 上升沿 启动计数 | |
初值重装 | 计数中途出现GATE上升沿重新启动计数周期 计数到零后,可再次由外部触发启动,不用再次送入一个计数初值 | |
初值改变 | 改变计数初值不影响本次计数,只有在GATE信号后才重新开始以新的计数初值计数,即计数初值是下次有效的 | |
输出波形 |
敬谢诸君。
于金陵钟山之阳。