当前课程知识点:微机原理与接口技术 >  第12周 可编程并行数字接口 >  第49讲 可编程定时计数器 >  可编程定时计数器8253_03

返回《微机原理与接口技术》慕课在线视频课程列表

可编程定时计数器8253_03在线视频

可编程定时计数器8253_03

下一节:可编程并接口8255_01

返回《微机原理与接口技术》慕课在线视频列表

可编程定时计数器8253_03课程教案、知识点、字幕

第4点我们来大家

给大家解释一下这个

所谓的命令字或者控制字它的格式

不管是命令字也好控制字也好

它主要是用来设定各个计数器的

工作方式

也就是说我们要设定它

到底工作在哪一种方式下

然后到底是哪一个计数器工作

因为它内部有三个

对吧

那么现在我们每一个一个命令字的格式

我们会发现

它实际上适用于三个计数器

只不过是你要让计数器0工作

你就必须给它发一个命令字

你接着还要让计数器1工作

你又要给计数器1发命令字

这就是命令字的格式

这个格式里面最高两位

表示你现在这个控制字

到底针对的是哪一个计数器

0 0就表示计数器0

0 1计数器1

1 0计数器2

因为我们只有三个计数器没有计数器3

所以最高两位绝对不可能是1 1

次高两位昵

我们要取决于你的计数初值的长度

如果我们计算出来

计数初值是8位有效值长

就像我们刚开篇举的那个例子

我们要觉得CLK周期是一秒钟

那么我们要定时100秒

所以这个初值就是100

那么这100显然是8位值长

那么如果你算下来

是8位值长的计数初值

那么这两位可以是0 1或者1 0

1 0 0 1昵就表示这个初值

写入了它16位寄存器的第8位

那么1 0昵就表示

写入到里面的高8位

没关系每个都可以

但是如果说

我们刚才还是那个CLK周期是1秒

但是我们不是定时100秒

而是要定时1000秒昵

那么这个时候初值就是1000

那么显然它就是16位值长

这个16位值长昵

这两位就必须要选1 1

这个1 1请大家注意一下

1 1昵因为8253计数器

它的对外数的据通道只有8位

你的16位初值

虽然硬指令OUT指令可以允许

一次传输16位数

但是对于这个具体的这个接口芯片来讲

它的路只有8位这么宽

也就是它的通道只有8位

所以你的16位初值实际上要写两次

所以这里要求你

必须先写低8位

再写高8位

没有任何道理这就是人家规定的

我解释一下这前面这两位

当这两位是0 0的时候

表示不是写操作

而是读操作

读什么昵

读现在你指定的这个计数器

也就说最高这两位所指定的计数器

它里面的计数寄存器

目前的状态就是会被读进来

就说它现在

你比如初值是100

好 它经过来一个CLK脉冲就减一减一

那么现在到底减到几了昵

你设置这两位是0 0

选择计数器0

好 你接着做了一个硬的操作

就把当前计数寄存器里的值就读出来

就看可以观察到它目前减到几了

下面的这3位昵

表示你现在选择的这工作方式

方式0方式1方式4方式5都没问题

就是方式2和方式3昵

你可以选择010 011

也可以选择1 1 0

或者1 1 1

也就说这这2位

这个打叉叉的这2位

表示你可以任意就0和1都行

最低这一位

我解释一下

这一位昵叫计数制选择

也就说如果是1

表示你的计数值

是按BCD来计数的

如果是0

那么就选择按2进制计数

它们的区别在哪里昵

首先

最大的因为我们的计数器

里面的寄存器都是16位的

所以我们的最大的初值

实际上可以有16位值长

那么最大的16位的BCD数是多少昵

是9999

因为BCD数我们前面讲过

因为它实际上是10进制的一个描述

所提它就是0 0 0到1 0 0 1

0 0 0 0到1 0 0 1

最大是9

所以昵最大的16位BCD数

就是9999

但是最大的2进制数

如果我们用16进制来表示的话

16位1就是FFFF

所以显然

16位选择2进制计数

它的计数范围会比较大

就是计数初值可以选择比较大

这个是最大的BCD数

这个是最大的16位2进制数

但是我们8253是减法计数器

所以它的计数初值

不论你选择BCD计数

还是2进制计数

这两个都不是它们的最大计数值

它的最大初值是多少昵

是0

因为如果你选择BCD数

那么0减1等于多少

就是9999

如果你选择2进制计数

那么0减1等于多少

就是FFFF

我们在8253中

最大计数初值我们都是0

所以这个0实际上是个虚的

就说对于2进制计数

实际上相当于是1 0 0 0 0这样子

这是一个计数值

好 在我们这些准备工作做完了

我们下面就要来开始来学习8253的应用

8253的应用昵

作为一个接口昵

显然它就是软硬件两个方面的设计

那么对于硬件设计

就是我们要实现

将这个芯片连接到系统中

作为软件设计昵

因为这个芯片本身

它是一个非通道的接口

所以比如说一旦设计好它的初值

给它写入了命令字

启动了它的计数

它就开始工作了

由它去控制外部设备

我们就不管了

所以它的软件设计

相对是比较简单的

就是按照我们刚才6种工作方式

它的工作时序

就是要写命令字写初值

其实就是这样的一个工作

这个工作我们叫初始化程序

这个初始化程序

就是写控制字写初值

这样两件事

所以这个程序昵

有时候说它简直类似于一个八股文章

所以很简单

我们下面先来看一下这个它的硬件设计

也就是这个芯片和系统的连接

我们用一个示意图来描述它

这假设这个是8253

我们假设里面用一个计数器来做例子来说

它上3个都是一样的

对吧

那么它的8位数据通道

可以和系统的数据通过数据总线

和系统连接

它的读和写信号

可以和系统这边的LW和LR信号

分别去连接

它的片内地址跟我们前面一样

也分别跟系统这边的低2位地址

对应连接

也就是说当你选中这个芯片之后

由这2位地址信号的编码方式

来决定你选中里面的哪一个端口

它的片选信号

当然无疑就是连接到我们移码器的输出端

而移码器的输入就是这个高位地址

那么它的外部昵

CLK端刚才我们说了

它是和外部时钟信号的输入端

也就说由外部晶振电路

会产生一个时钟电路

它的输出会接到这里的CLK

那么GATE端无论是软启动也好

硬启动也好

都是由外部来控制的

只有OUT端会输出连接到外部设备

这个就是这个芯片

在系统硬件设计上

它的一个示意示意图吧

请大家注意在应用的时候

我再次强调它的应用要注意的点

就是每一次的启动计数

都需要两次写操作

不再练经了

如果是初值是8位的话

那么写一次初值就可以了

如果是16位初值的话

因为这个芯片的数据通道只有8位

所以它必须要写两次

而且按照刚才控制字的格式

它必须先写入低8位初值

再写高8位初值

请大家注意它的控制命令字

一定写入的是控制寄存器

无论针对的是哪一个计数器的控制字

都写入到控制寄存器中

而它们的初值

则是写到相应各自的计数器中

而计数器

或者控制寄存器

它们怎么区分

就是看A1A0的状态

我们下面来看一下初始化程序的编写

按照我们刚才的时序流程

首先写控制字

接着写初值

如果初值只有8位就写完了

如果初值有16位

那么写完低8位

我们还要再写高8位

当有2个以上的计数器在工作的时候

也就说我们说这个芯片内部有3个计数器

我们如果只有一个计数器工作

刚才那一段程序那个初始化就完了

那么如果有2个或者3个都要工作昵

那么我们就需要每一个都要初始化

我们可以先初始化计数器0

写入它的控制字

写入它的初值

然后接着我们按部就班

再初始化计数器1

接着再初始化通道2

把这3个都完了

这3个计数器开始工作了

这是一种初始化的方式

还有一种初始化的方式

也就是说我可以把3个计数器

也就说如果3个都用到的话

3个计数器的所有的控制字

都依次写入

然后分别写入它们的初值

也是可以的

就说这2种初始化的模式都没有问题

但是原则性大家一定要注意

就是一定是要先写命令字或者控制字

再写初值

这个不能改

因为人家的工作时序这样规定好了

我们最后用这样一个例子

来结束这个芯片的学习

这个例子是这样这个例子很简单

就没有任何的工程背景

我们在这章学完了后

我们会用一些综合的练习来帮助大家

理解这2个

可编程并行接口芯片的应用

所以现在我们先讲

一个非常简单的应用例

这个应用例是这样

要采用这个8253做定时计数器

它的接口地址已经告诉你

0120H到0123H

大家看这个接口地址范围

显然只有4个编码

所以它是一个全地址移码的方式

那么输入8253的时钟频率是2MH

现在要求你干什么昵

要求计数器0每10毫秒输出

一个CLK周期宽的负脉冲

计数器1输出10KHz的连续方波信号

计数器2在定时5毫秒以后

产生输出高电频

那么我们从这个要求里头

我们可以要得出哪些这些信息昵

我们来看一下

首先我们从这些要求里

我们要得出来

这个8253这个接口有几个计数器工作

现在我们看

已经告诉你计数器0应该怎么样

计数器1应该怎么样

计数器2该怎么样

也就是显然它的3个通道

或者3个计数器都是要工作的

第二我们要知道

每一个计数器它的工作方式

我们现在来分析一下这个题目

计数器0要求每10毫秒

输出一个CLK周期宽的负脉冲

这个每字实际上就隐含了一种循环

就连续的意思

所以它显然不可能

是方式0方式1方式4方式5

只能是方式2和方式3

那么这个方式3是连续方波信号

这里头这个后面的描述

显然它非常符合方式2波形的特点

所以它是工作在方式2的

那么计数器1要求

输出10KHz的连续方波信号

非常明显它就是方式3

那么计数器2要求

定时5毫秒之后产生输出高电频

定时时间到输出高电频

可以是方式0可以是方式1

那么你选择哪一种

要根据具体题目的要求

这个题目里头没有任何其他

更高的一些就是它的控制节点之类的要求

我们这些我们后面通过事例来给大家解释

所以我们首先选择软件启动

这样就会显得线路比较简单

所以这里我们可以确定它工作在方式0

那么第3个信息

把这些方式都确定以后

我们从它这个题目要求里

我们还要能够得出

它每一个计数器的初值是多少

我们现在看

8253能够提供的

就是外部时钟能够提供的

工作频率是2MK

那么这个是每10毫秒

输出一个CLK周期宽的负脉冲

这个就意味着计数器0

它的一个周期是10毫秒

那么现在的时钟频率2MH

这个频率的周期是多少昵

2MH分之一

就是0.5个微秒

那么意味着我们要数多少个0.5微秒

才能输出10毫秒来

才能达到一个10毫秒的周期

所以这个也就能算出它的初值

依此类推就都可以算出来

第4点我们要知道

它的计数脉冲频率

这个是题目已经得到了

这没有问题

所以把这些要求都得以后

我们现在就成这个题目的信息里

我们就要能够看出这些要求

好最后这个题目要求

大家要设计线路图

以及编写相应的初始化程序

我们由刚才这样的一个分析

我们很容易就能够得出

它们3个计数器的初值

比如计数器0

它是这样子算出来

计数器1计数器2

我们可以看一下这些初值

这每一个初值都是小于65535

或者说65536

也就说它的

16位的计数寄存器

和16位的初值寄存器

都可以放得下这些初值

那么这就没有问题了

如果初值更大超出了16位寄存器

能够放得这样的一个范围

也就是说超出了65536

那怎么办

那我们后面用事例来给大家解释

然后昵我们根据刚才对工作方式的分析

我们可以得出

这3个计数器它们的控制字

因为计数器0工作在方式2

而且它是16位的计数初值

所以我们很容易得出

它的控制字应该是这样的格式

可以是这样的3234H

当然也可以是3CH

因为这个第3位可以是0

也可以选择1

当然选010显得更像2

对吧所以它应该更好

对于计数器1昵工作在方式3

所以它是一个8位的计数初值

只有200

所以我们选择第8位放初值的话

它的控制字就是这样的格式

依此的计数器2是这样子的格式

把这些准备工作做完了

我们下面就可以开始硬件设计

和软件设计

我们先来看一下它的异联逻辑

就那个硬件电路的一个设计方法

现在3个计数器都要工作

而且计时器刚才我们说

计数器2采用的是方式0

所以软件启动

计数器0和计数器1

一个是方式2一个是方式3

方式2和方式3

都可以软起动硬启动都行

那么这种情况下我们

现在这个题目又没有更多的辅助的要求

所以我们都选软起动

那么都选软起动

我们3个GATE端都可以接到电源上

就显得比较简单

那么我们刚才算了所有的初值

都在16位有效值长里允许范围内

所以它们的CLK信号

也都可以直接连接到外部的时钟源

就是2MH的这样的一个频率

那么OUT就可分别的输出了

所以下面的这些

我们就不在解释了

可都是一一对应的这种连接了

移码电路的设计

我们在这里也不要再涉及了

因为我们都学了那么多的例子了

有兴趣的同学可以自己来设计

根据刚才的题目来设计它的移码电路

那么外面这个连接

像我们刚才分析

所有的GATE端我们接到电源

所有的CLK端

都接到2MH的外部时钟输出

所有的OUT端

分别连接到3个控制对象的外部设备中

好那么我们看它的初始化程序

我们就用计数器0来作一个例子来解释了

计数器1和计数器2的初始化是类似的

只是它的通道地址有点不一样而已

这个留给大家自己做练习

计数器0它的初始化

根据刚才我们看到的

那些时序也好

它的控制流程

就是初始化程序的流程也好

都是要先写控制字

再写初值

而控制字写入的地址

是控制寄存器的地址

初值写入的地址

在这里就是计数器0的地址

那么怎么知道刚才那个

0123到0120到0123

哪一个是计数器0的地址

哪一个是控制寄存器的地址昵

就是看最低2位的状态

我们刚才前面已经讲了

最低2位是1 1

就表示控制寄存器最低2位是0 0

就表示计数器0

所以0123

就一定是控制寄存器的地址

刚才我们说了

它的计数T0的控制字得出来是34H

所以这3行指令

就把控制计数器T0的控制字

写入到控制寄存器里了

下面我们要给它写初值

所以初值的写入地址必须是计数器0

所以0120的最低2位是0 0

这就是计数器0的地址

刚才我们已经算出来

它的初值是20000

很长 对吧

所以我们先给它送到AX里

但是昵我们说

16位初值根据控制字格式的要求

16位初值必须先写低8位

后写高8位

所以我们先把第8位写进去

写到计数器0

那么高8位昵

因为我们OUT指令不允许

这个累加器这个操作数值AH

所以我们必须把AH

送到AL里头再输出

这样的话

通道0的初始化就结束了

好通道1和通道2的初始化工作

就留给同学们自己来练习了

有关8253

我们就介绍这么多

最后我们做一个简单的回顾

首先8253是一个

可编程的8位并行接口

但是它的内部3个计数器

全部是16位的

这句话没写在这里

但是这一点再次强调啊

所以它能够接收的最大计数初值

都是16位值长的

它可以实现对

外部设备的定时计数控制

不是一个通道型的

而是一个控制型的接口

它的计数或者定时的方式

是采用减法计数器的

所以8253通过

你送不同的计数初值

可以实现比较长时间的

这种定时或者计数

所以有时候简单的说

它也属于一种硬件定时器

好有关8253的学习

我们就解释到这里

下一讲我们将来给大家介绍

另外一片可编程的并行接口

是一个通道型的接口8255

好 今天就到这里

微机原理与接口技术课程列表:

第1周 微型计算机基础概论

-第1讲 关于本课程

--关于本课程

-第2讲 微型计算机系统

--微机系统_01

--微机系统_02

-第3讲 微型计算机一般工作过程

--微机的一般工作过程_01

--微机的一般工作过程_02

-第4讲 数制与编码

--常用计数制及其转换

--计算机中的编码

-第5讲 计算机中数的表示与运算

--数的表示

--符号数的表示

--数的表示与运算

-第6讲 基本逻辑运算与逻辑电路

--基本逻辑运算与逻辑门

--常用逻辑运算及电路

-第7讲 本周小结

--本周小结

-第1周 微型计算机基础概论--第一周单元测验

第2周 8088微处理器

-第8讲 8088微处理器

--8088 CPU_01

--8088 CPU_02

-第9讲 8088 CPU主要引线及机构

--8088 CPU主要引线

--8088 CPU内部结构

--8088 CPU内部寄存器

-第2周 8088微处理器--第二周单元测验

第3周 实模式存储器寻址与总线

-第10讲 实模式存储器寻址

--实模式存储器寻址_01

--实模式存储器寻址_02

--实模式存储器寻址_03

-第11讲 8088系统总线

--8088系统总线

-第12讲 微处理器小结

--微处理器小结

-单元测验--作业

第4周 数据传送指令

-第13讲 指令概述

--指令概述

-第14讲 寻址方式

--寻址方式

-第15讲 通用数据传送指令

--通用数据传送指令_01

--通用数据传送指令_02

--通用数据传送指令_03

-第16讲 地址传送指令

--地址传送指令

-第17讲 输入输出指令

--输入输出指令

-第4周 数据传送指令--第四周单元测验

第5周 算术运算、逻辑运算与移位操作指令

-第18讲 算术运算指令

--加法运算指令

--减法指令

--乘除运算指令

-第19讲 逻辑运算指令

--逻辑运算指令_01

--逻辑运算指令_02

-第20讲 移位操作指令

--移位操作指令

-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验

第6周 串操作指令

-第21讲 关于串操作指令的说明

--串操作指令说明

-第22讲 串传送与串比较

--串传送与串比较

-第23讲 串扫描指令

--串扫描指令

-第24讲 串装入与串存储指令

--串装入与串存储指令

-第六周单元测验--作业

第7周 程序与处理器控制

-第25讲 程序控制指令说明

--程序控制类指令说明

-第26讲 转移类指令

--无条件转移指令

--条件转移指令

-第27讲 循环控制指令

--循环控制指令

-第28讲 过程调用指令

--过程调用指令

-第29讲 中断指令

--中断指令

-第30讲 处理器控制指令

--处理器控制指令

-第31讲 指令系统小结

--指令系统小结

-第7周 程序与处理器控制--第七周单元测验

-第7周 程序与处理器控制--第七周作业

第8周 汇编语言程序设计

-第32讲 汇编语言源程序

-- 汇编语言源程序_01

-- 汇编语言源程序_02

-第33讲 伪指令

--数据定义伪指令

--符号与段定义伪指令

--汇编语言源程序结构例

--其它伪指令

-第34讲 系统功能调用

--系统功能调用_01

--系统功能调用_02

-第35讲 汇编语言程序设计示例详解

--程序设计示例1

--汇编语言程序设计示例_02

-第36讲 汇编语言程序设计小结

--汇编语言程序设计小结

-第8周 汇编语言程序设计--第八周单元测验

-第8周 汇编语言程序设计--第八周作业

第9周 半导体存储器

-第37讲 半导体存储器概述

--半导体存储器概述

-第38讲 内存单元编址

--存储单元编址

-第39讲 随机存取存储器RAM

-- RAM_01

--RAM_02

-第40讲 只读存储器ROM

--ROM_01

--ROM_02

-第九周单元测验--作业

第10周 半导体存储器扩展技术

-第41讲 半导体存储器扩展

--半导体存储器扩展_1

--存储器扩展_2

--半导体存储器扩展_3

-第42讲 半导体存储器小结

--半导体存储器小结

-第十周单元测验--作业

-第十周作业--作业

第11周 输入输出与中断技术

-第43讲 基本I/O接口

--I/O系统概述_01

--I/O系统概述_02

-第44讲 简单接口芯片

--简单接口芯片

-第45讲 基本输入输出方法

--基本I/O方法

-第46讲 简单I/O控制系统设计

--简单I/O控制系统设计1

--简单I/O控制系统设计2

-第47讲 中断技术

--中断技术1

--中断技术2

-第48讲 输入输出与中断技术小结

--本周小结

-第十一周单元测验--作业

第12周 可编程并行数字接口

-第49讲 可编程定时计数器

--可编程定时计数器8253_01

--可编程定时计数器8253_02

--可编程定时计数器8253_03

-第50讲 可编程并行接口

--可编程并接口8255_01

--可编程并行接口8255_02

--可编程并行接口8255_03

-第51讲 可编程接口小结

--本周小结_01

--本周小结_02

-第十二周单元测验

第13周 模拟量的输入输出

-第52讲 模拟量的输入输出

--模拟量的输入输出

-第53讲 D/A转换器

--D/A转换器_01

--D/A转换器_02

-第54讲 A/D转换器

-- A/D转换器_01

--A/D转换器_02

-第十三周单元测验--作业

第14周 系统综合设计示例详解

-第55讲 I/O接口系统综合设计示例详解I

--综合设计示例详解I_01

--综合设计示例详解I_02

-第56讲 综合设计示例详解II

--综合设计示例详解II_01

--综合设计示例详解II_02

-第57讲 结束语

--结束语

可编程定时计数器8253_03笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。