Skip to content

8253可编程定时/计数器

8253的最大计数值是:0,计数65536次,因为8253是先减一后开始计数

二进制的初值:0000H~0FFFFH

  1. 对应的计数范围:1~65536次

十进制(4位组合BCD)的初值是:0000H~9999H

  1. 对应的计数范围是:0001 ~ 10000

8253是一种硬件定时/计数器芯片

计数器一般记录的是边沿

定时器、计数器都是边沿触发,定时器的本质是计数器(只不过定时器记录的是时间)

8253是3个16位的定时器/计数器,3个16位计数器相互独立,互不影响

外部引线及内部结构

A1 A0 选 择

0 0 计数通道0

0 1 计数通道1

1 0 计数通道2

1 1 控制寄存器

计数通道的主要引线(每通道均相同):

  1. lCLKn 时钟脉冲输入,计数器的计时基准。
  2. lGATEn 门控信号输入,控制计数器的启停。
  3. lOUTn 计数器输出信号,不同工作方式下,产生不同波形。
  4. (n = 0~2)

8253的内部结构

image-20231018164215749

计数启动方式

程序指令启动————软件启动

外部电路信号启动——硬件启动

  1. 软件启动过程
    1. GATE保持为高电平
    2. 写入计数初值后的第2个
    3. CLK脉冲的下降沿开始计数
  2. 硬件启动过程
    1. 先设定好初值
    2. GATE端有一个上升沿
    3. 对应CLK脉冲的下降沿开始计数

编程结构

计数器(3个)——包括

  1. 16位初值寄存器(可访问)
  2. 16位计数寄存器(减法计数器 -1 操作)

控制寄存器—— 存放控制命令字(只写)

占用4个地址— 3个计数器,1个控制寄存器

控制字

用于确定各计数器的工作方式。

8253必须先初始化才能正常工作。

每个计数器都必须初始化一次。

CPU通过OUT指令把控制字写入控制寄存器。

控制字格式

关于的控制字说明:

  1. 8253只有一个工作方式控制字,但是对每个计数器而言,它们的工作方式控制字内容一定各不相同(前两位不同),所用各计数器的控制字需要分别设置,先后不计。
  2. 8253的工作方式控制字的特殊形式可用于对计数器的当前计数值进行锁存。
  3. 在工作方式控制字被设置之后,随后必须紧接着给计数器预设置计数初值,计数器方可开始工作

频率和时钟周期

频率和时钟周期互为倒数

F(频率)×T(周期)=1

f=/frac1T,T=/frac1F1=103=1061=1031=106=103

频率:

1秒=1hz

1=1khz(103hz)1=1mhz(106hz)=/fracTOUTTCLK=TOUT×TCLK/frac1HZ=S/frac1S=HZ

1S = 1000ms

N=/fracTOUTTCLK=TOUT×TCLKTOUT×fCLKN=/fracfCLKfOUT=fCLK×fOUT

工作方式:

方式0——计数结束中断

方式1——可重复触发的单稳态触发器

方式2——频率发生器

方式3——方波发生器

方式4——软件触发选通

方式5——硬件触发选通

方式0-3常用

方式0 (计数结束中断)

软件启动,不自动重复计数。

装入控制字后OUT端变低电平,

计数结束OUT输出高电平。

image-20231018220843926

计数过程中,GATE端应保持高电平。

每写入一次初值计数一个周期,然后停止计数。

OUT端输出是一个约(N+1)TCLK宽度的负脉冲。

计数过程中可随时修改初值重新开始计数。

特点:只触发一次,软件触发

如果想让方式0重新计数,只有在送一个初值

方式1(单稳态触发器)

硬件启动,不自动重复计数。

装入控制字后OUT端变高电平。

计数开始OUT端变为低电平,计数结束后又变高。

image-20231018220900993

门控信号GATE端的跳变触发计数,可重复触发。

若下一次GATE上升沿提前到达,则OUT端负脉冲拉宽为两次计数过程之和。

计数过程中写入新初值不影响本次计数。

如果想让方式1重新计数,就需要去触发 GATE

方式2(频率发生器/分频器)

软、硬件启动,自动重复计数。

装入控制字后OUT端变高电平,计数到最后一个CLK时OUT输出负脉冲,并连续重复此过程。

image-20231018221132030

特点:

GATE为计数的控制信号:GATE变低计数停止,再变高时的下一个CLK下降沿,从初值开始重新计数。

每个计数周期结束时(减到1时),OUT端输出一个TCLK宽度的负脉冲。

计数过程自动重复进行。

计数过程中修改初值不影响本轮计数过程。

方式3(方波发生器:一半高,一半低,如果为奇数,高的多)

方式2和方式3的区别:

  1. 如果是检测边沿方式2和方式三是相同的
  2. 如果检测的电平那么方式2和方式3就不同

软、硬件启动,自动重复计数。

装入控制字后OUT端变高电平,

然后OUT连续输出对称方波:

  1. 前 N/2或(N+1)/2 个CLK,OUT为高
  2. 后N/2或(N-1)/2 个CLK, OUT为低。
image-20231018221248553

OUT输出方波,前半周期为高,后半周期为低。

计数过程中修改初值不影响本半周期计数过程。

GATE可以作为计数的控制信号:GATE变低计数停止,再变高时的下一个CLK下降沿,从初值开始重新计数。

方式4(软件触发选通(是方式2的单次触发形式))

软件启动,不自动重复计数。

装入控制字后输出端变高电平,

计数结束输出一个CLK宽度的负脉冲

image-20231018221359831

计数过程中,GATE端应保持高电平。

每写入一次初值,计数一个周期,然后停止计数。

每个计数周期结束时(减到0时),OUT端输出一个TCLK宽度的负脉冲。

计数过程中修改初值不影响本轮计数过程。

方式5(硬件触发选通)

硬件启动,不自动重复计数。

OUT端波形与方式4相同

image-20231018221620691

写入初值时,GATE端应保持低电平。

GATE每出现一次正脉冲,计数一个周期,然后停止计数。

每个计数周期结束时(减到0时),OUT端输出一个TCLK宽度的负脉冲。

计数过程中修改初值不影响本轮计数过程。

总结:

image-20231018221459253

方式0(计数结束产生中断):软件触发

​ 计数过程中低电平,计数结束高电平

方式1(可编程单稳式方式):硬件触发

​ 计数过程中与方式0一样,由于方式1是一个硬件触发,所以在没有计数过程中一直是高电平

方式2(序列脉冲发生器):

​ 在输的最后发出一个低电平,正常的时候高电平

方式3(方波发生器):

​ 一半高,一半低电平

•由软件触发计数 (送新的计数值)—— 方式0、方式4

•由硬件触发计数 (由GATE触发) —— 方式1、方式5

•分频计数器输出(产生序列脉冲) —— 方式2、方式3

异步串口(UART)

起始位必须16bit
数据位必须4,5,6,7,8bit
校验位(奇,偶)可有可无16bit
停止位必须1、2bit

波特率:1s能传送多少位

起始位、数据位、校验位(奇、偶)、停止位加起来称 “一帧数据” 或 “一个数据包”、或 ”一个字符“

例:波特率: 1s 传送多少位(1200)

一帧:10(1起始、7位数据、1位校验、1位停止位)

就得出1200/10 = 120个字符

一帧传送的时间:1s/1200 *10 就得出一帧数据传送需要的时间

奇偶校验

​ 如果采用的是奇校验:数据位+校验位中 "1"的个数为奇数

asm
#例
	数据位: 
		0 1 0 1 0   1(奇校验位)
#如果有偶数个1,那么奇校验位自动置1,保证是奇数,如果是奇数个1,那么奇校验位会置0

​ 如果采用的是偶校验:数据位+校验位 中 "1"的个数为偶数

asm
#例
	数据位:
		0 1 0 1  0(偶校验)
#如果有偶数个1,那么偶校验位自动置0,保证是偶数,如果是奇数个1,那么偶校验位会置1,保证有偶数个1