当前课程知识点:微机原理与接口技术 > 第12周 可编程并行数字接口 > 第49讲 可编程定时计数器 > 可编程定时计数器8253_01
大家好 这一讲我们开始来学习第7章
可编程并行数字接口电路
这一张主要有介绍两个芯片
就是可编程的并行接口芯片的运用
这两种芯片一种是我们称为定时计数器
一种称为真正的并行输入输出接口
我们先说一下什么叫可编程
我们在第6章中曾经给大家介绍了两片
或者说三片简单的接口电路
那么当时我们说之所以说它称为简单
有 当然有好几个角度可以去说
其中有一项就是因为这一种芯片
它们不可以通过软件的方式
来改变它们的工作模式
就说这些芯片它或者只能做输入接口
比如我们学得三态门的接口74LS244
还有或者是8D锁存器接口
它就只能做输出
虽然我们也介绍了一种
带有控制能力的锁存器接口
它虽然在理论上它可以作为输入接口
也可以做为输出接口
但是这种芯片它一旦在系统中接好
接它为输入它就只能作输入
接它为输出它就只能输出
也就说它没有办法
再去改变它的数据传输方向
或者说它的工作方式
另外它的工作方式实际上
也没有什么可改变的
就一种 它或者输入或者输出 对吧
所以他们就可以说它们称为
是一种非常简单的接口电路
而我们这一章要学到的这两片芯片昵?
它们是可以通过软件的方式
来控制它们的工作方式的
所以这个就叫做可编程
可编程通过软件命令以来
控制芯片的工作方式
主要有两个方面的含义
一个是它可以通过软件的方式
就是软件输入它的一些命令字的方式
来控制它的传输方向
另外可以控制它们的输入输出方式
对于有一些通道型的接口
也就说我们通过它进行
数据输入输出的接口了
这种可编程的接口通过软件
可以既改变它的数据传输方向
又改变它的这种工作方式
对于另外一些非通道的接口
也就是说它只是用来
对外部设备实现控制的这种接口
这种通过软件命令我们
就只改变了它们的工作方式
好 下面我们就来学习我们这一章
要介绍的第一片芯片
可编程定时计数器8253
所谓定时计数器
定是也好 计数也好
它的工作基准实际上是这样的时钟脉冲
这就像我们平时日常生活中一样的
我们每天几点起床 几点吃饭 几点上课
这些都是根据我们24小时
这样的时钟来完成的
那么这个也一样
可编程的定时计数器
它的工作基准也一样是这样的时钟脉冲
所以这种计数器昵
它要实现让它工作
必须要有一个时钟电路
提供给它一个基准
我们这个日常生活中24小时这样的时钟
不是我们人体来产生的
而是由外部来产生
所以这个
这里的这个
时钟脉冲CLK信号也是要
由外部的这种时钟电路来产生
来提供给这个芯片作为它工作的基准
计数脉冲它如果是不恒定的话
我们就说来一个脉冲记一个数
那么我们就达到了计数的功能
如果计数脉冲是
每一个周期都是恒定的
那么在计数的同时
我们也就达到了定时的效果
比如现在如果说我们的计数脉冲是一个
就像我们上课
我们来一个人走进一个教室
假说我们在教室的门上
加一个感应器的话
进来一个同学感应器就输出一个脉冲
再进来一个人又输出一个脉冲
因为人的进入它的频率是不一定的
所以了脉冲的宽度也就不一定
因此像这种我们就可以
只能够达到了计数的功能
最后我去看一下脉冲的个数
我们就知道今天有多少人到课
那么如果我们这个时钟脉冲
不是这样子由人进门来产生
而是由一个比如像我们今天
最标准的一种时钟发生器像晶振电路
那么它所产生的时钟
它的每一个周期就是非常恒定的
那么像这种情况下
我们在计数的同时就达到了定时的效果
所以 那么定时的时间有多长?
这个长度或者说计数的个数
完全取决于这个脉冲的个数
或者每个脉冲的周期的宽度
我们来举个例子
假设我们现在看到的时钟脉冲
它的每一个周期是一秒钟的话
那么就是说我们的条件
是一个周期为一秒的脉冲
那么现在我们希望我们定时100秒
我们很容易就得出来
我们现在要数多少个这样的脉冲昵?
显然是要100个
对吧 显然是要100个 所以
这个就说我们由这样子的一个
这个100 我们称为它是叫做计数初值
由这样这个计数初值是怎么得出来的昵
我们看实际上是因为这样的条件
就说这个脉冲外部时钟提供给我们的
时钟信号周期是1秒 这个是条件
那么我们的需求是什么昵?
我们的需求是要定时100秒
所以由这样子的一个条件
和这样的需求我们就得出来了
这样的一个初值应该是多少?
这个100就是刚才我们说要定时100
100秒 我们需要数脉冲个数
所以这个数的脉冲个数我们
称为计数初值
这个计数初值我们有两种方法
我们可以说
我们因为这个每个周期是1秒
我们现在要定时100秒
好 那么我们就来一个脉冲
数 加一 来一个脉冲加一
我们最后加到从0开始加到100
好 OK 到100秒
这是一种往上加的计数方式
还有一种我们刚才
通过这样的条件
通过这样的需求
我们已经得出了我们要数100个脉冲
也就说我们的初值是100
那么这个时候我们也可以先
把这个100设上
设定好 然后过一个脉冲
过一个周期 我们减一
过一个周期减一
由100到99 98 最后减到0
一样定时100
这就是由上由大的数据向小的数据
这样的减法方式
这就是两种所谓的计数方式
一种我们称为加法计数
一种称为减法计数
好 在正式学习8253定时计数器之前
我们先将定时和计数
这样一些基本的概念
我们给大家做一个科普
好 下面我们来看一下8253
这个芯片所具有的特点
首先8253是一个可编程的逻辑器件
而且它是一个非通道型的接口
具有它自己一个独特的功能
什么叫为什么它叫非通道又是接口昵?
我们现在回忆一下我们之前讲过的
有关接口的概念 接口就是说的
最直白的一种说法
虽然不严谨 但是很直白
就它一头担着CPU这个系统
另外一头担着外部设备
它这个位置处于中间
这就是一个在我们计算机系统里
它就是一个接口的一个形式了
那么8253昵?
我们后面会看到它也是一头担着CPU
一头担着一个外部设备
那么它就是一个接口
它传输的是数字信号
所以它是一个数字接口
另外昵?
它不是一个通道 刚才我们说了
它从它的名字我们已经感觉出来
它是一个定时计数器
也就是它的功能是实现一个计数
或者一个定时的功能
因此这种接口
它是一个接口但是它不是一个通道
它的功能是干什么了?
它的功能就是实现对外部设备的控制
也就是说它做一个
当你给定了一个计数初值
它去数它就启动以后它就
它就开始去数那个CLK周期的脉冲数
然后数够了
然后它就
就完了
那么完了以后怎么办?
它完了以后它就会对
外部设备产生相应的控制
我们举一个很简单的
大家马上就能想到的
比如我们定时希望启动一下空调
那么我们好定时数100秒
或者100分钟100
一个小时等等这样
数够了 啊 出一个信号空调就启动
这就是一种定时
或者说对外部设备的控制
8253就是这样一种形式的接口
所以它是它不是一个用来传输数据的
输入输出的通道
而是一个实现对外部设备
进行控制的一个接口
所以接口我们现在又回归我们第六章
曾经讲接口的概念时候讲过
接口本身它实际上是有
两个层面的功能的
一个它是实现数据的输入和输出
也就说
它为什么CPU和外部设备不能直接通信
因为那么那么多的原因
之前已经提到了
所以接口要在中间承担一个
IN-OUT这样的一个功能
其实接口还有一项很重要的功能
就是它可以代替CPU
实现对外部设备的控制
这个是今天实际上很多很多的接口
它的更重要的一项功能
就是它能够辅助对于主设备对于主机
帮助主机承担对外部设备的控制
而主机用来干什么?主要是用来
进行一些数字 计算数值分析
等等这样的一些工作
所以它的一个特定的功能
就是定时和计数
8253总体来讲它的工作方式
它属于减法计数器
当你的计数初值减到零的时候
它会输出相应的控制信号
而输出控制信号的形式不一样
不同的工作方式
它可以输出不同的信号的脉冲的信号
那么你到底需要输出哪一种信号
那是由软件的命令可以来控制它
我们学习所有的集成电路芯片
实际上有一些共同点
就是我们首先要了解一个芯片
它的外部的主要引线的功能
它的内部结构
它的工作时序
以及它的应用
这个我们在之前讲
8088CPU讲存储机芯片
这些芯片的时候我们都提到过
那么对于可编程的接口来讲
或者对具体的这个
8253这个定时计数器芯片来讲
我们在应用它之前
我们还是同样的需要了解
刚才我们共同的那些东西
还有这个芯片本身应该所具有的
一些特殊的东西
所以我们下边在学习芯片的时候
我们将从这样几个点来介绍
首先我们要知道它的外部引线
和它的内部的结构
还有我们要知道对这个芯片来讲
它是如何启动计数的
就是什么时候它要开始来数数
数脉冲数 这就是计数的开始
另外刚才我们说到
在定时计数初值减到零之后
也就是它的时间到了以后
它的输出端会输出不同形式的控制信号
到底要输出哪一种形式的控制信号
取决于它的工作方式
因此在这里第三点我们还需要学习一下
它的几种不同的工作方式
哪一种方式下它会输出什么样的波形?
最后第四点也就是芯片作为
可编程的接口
我们说它可以接收软件的命令
所谓软件的命令不是一大段程序
实际上它主要最核心的是它的命令字
也就是说命令字告诉了它这个芯片
你到底应该怎样工作
等等 所以在这些准备工作做完以后
最后第五点我们要学习一下
这个芯片是怎么来运用?
好 下面我们首先来看第一点
就是它的外部引线
以及它的内部的结构
这个是8253这个芯片的主要的引脚
这些引脚里面包含了
和系统之间的连接的主要的引线
以及和外部设备之间主要的连线
和系统端的主要引脚
我们看大家都很熟悉了
D0到D7这是显然是8位的数据信号
所以这个芯片也同样是8位的接口
那么也就到这个时候
大家应该理解
就是我们为什么
我们选择了8088CPU
而没有选择第三代微处理器
更经典的代表8086
就是因为8088它对外
数据通道是8位的
而我们后面讲的所有接口
我们都选了8位的接口
因为我说过教学我们还是要
要学基本学基本原理
所以这些8位接口也好
16位接口也好
很多很多的原理
其实都是差不多的
也就说它的引脚信号上有
一些可能有些区别
那么把基本的东西搞清楚了
其实再扩展下去也没有什么问题
好 所以在这里我们同样对8253来讲
它也是一个8位的接口
所以它对外有8根数据信号线
所以大家在这里可以看到D0到D7
另外它有它作为一个接口芯片
同样有片选信号就是CS
这个我们也很熟悉
以及读和写允许信号
在这里有两个A 一个A0 一个A1
这个显然是一个片内地址
那么有2位片内地址
说明这个芯片上片内有4个端口
那么对外部设备这一端口的引线昵?
有一个是时钟脉冲的输入
刚才我们讲了
因为外部的时钟实质上不是芯片
本身来产生 而是由外部电流来产生的
而这个芯片的工作
它的工作基准需要时钟信号
所以外部这个芯片要的工作的时候
外部必须要有一个时钟脉冲发生器
为它提供它的工作基准
也就是CLK信号
这个芯片本身有一个CLK引脚
再一个这个是GATE 显然是个门的意思
GATE叫门控信号
它也是由外部来输入
它是作为启动计数的控制信号
我们后面讲的时候还会提到它
只有这个OUT端是输出端
这个端显然是要将在定时时间到
或者在定时过程中在OUT端
会呈现的一个波形的特点
我们现在来看这个引脚图
我们从这个引脚图里我们可以看出来
有CLK0 get OUT0 CLK1 get OUT1 等等
也就是说这里完全同样的三组
CLK GET OUT信号
这就反映了芯片本身内部具有
这样子的一个结构
也就是说这个芯片实际上它内部有
完全独立的三个定时计数器
这三个定时计数器可以
同时工作也可以某一个时候
只有一个计数器工作或者
两个计数器工作
我们可以简单的说就是将三个独立的
定时计数器集中在一片芯片上
用一套控制逻辑来控制它
这就是这个芯片的特点
这里的三个独立的定时计数器
每一个计数器它都占有一个端口地址
为什么它要占一个端口地址昵?
是因为这个芯片每一个
独立的定时计数器里面
实际上都有2个16位的寄存器
这2个16位的寄存器对外没有
分别的地址
它们2个寄存器占有同样的地址
我们已经说了
接口里面的寄存器其实就是端口
所以这个总个计数器
它也就是一个端口
它的这2个16位的寄存器
内部的这两个寄存器
一个叫做16位的初值寄存器
一个叫16的计数寄存器
这2个既然是寄存器 而且是16位的
说明它们里面可以放16位的数据
这里面放着是什么?
其实就是我们前面说到的那计数初值
这个初值当然我们刚才举的那个例子
只能说CLK周期是1秒我们要定时100秒
所以这个初值应该是100
那么这个100显然是8位数
所以这个16位寄存器里头
也可以放一个8位数 不能说不能放
也可以放一个8位的初值
那么如果我们现在要不是定时100秒
我们要定时1000秒 10000秒
那么这个初值就变成了1万或者1千
那么这个时候的初值就是16位的
它就放在这2个16位寄存器里
所以它的计数初值
哪一个计数器工作
它的计数初值就放进这个计数器
内部这两个寄存器
因为这2个寄存器对外没有
分别独立的端口
所以一旦把这个选中这个计数器
好 这个初值选进去
就同时写进了这2个16位寄存器里
那么这个初值寄存器
和计数寄存器的区别在哪里昵
我们的初值最初写进去的时候
2个寄存器里同时写进了计数初值
但是在计数过程中
计数寄存器里的值是会被从头减到尾的
就说从可以100减到99 98 一直减到0
而初值寄存器里的值是不变化的
这个是它内部的一个基本的原理
3个计数器每一个的内部
都是这样的结构
所以3个计数器每一个
都占有一个独立的端口地址
另外一个显然这个名字很明确
就叫控制寄存器
这个寄存器显然
它就是接口寄存器就是端口
所以它也要占一个地址
这个控制寄存器是一个8位的
这个8位寄存器里放什么昵
就是放我们后面要学到的控制命令字
因此昵这个8253的内部
有3个独立的计数器
有一个控制寄存器
所以它占有3个独立的占了4个端口地址
每一个计数器里都含了两个寄存器
然后控制寄存器里面用来放控制命令字
我们总结一下
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语