当前课程知识点:微机原理与接口技术 >  第14周 系统综合设计示例详解 >  第56讲 综合设计示例详解II >  综合设计示例详解II_01

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

综合设计示例详解II_01在线视频

综合设计示例详解II_01

下一节:综合设计示例详解II_02

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

综合设计示例详解II_01课程教案、知识点、字幕

大家好 这一讲我们继续来

通过示例给大家展示

如何设计I/O接口控制系统

就是通过两个综合的示例

在学习这个之前

我们回忆一下我们在上一周最后那一讲里头

就是介绍A/D转换器的时候

在最后一页PPT上 我们曾经给出了

我们利用ADC0809

实现循环采集8路模拟量

数据的这样的一个控制流程

我们并没有给出大家的

我们并没有给出

具体的程序代码

在这一讲里头我们也不再针对那个示例

来继续完成这个工作了

因为那个相应的程序代码

我们教材上已经有过完整的提示

一个描述

也就说如果大家根据那样的一个控制流程

自己没有办法设计出具体的程序代码的话

请你们去看一下书

这个教材第八章最后

给出了整个基于那样一个控制流程

一个完整的程序代码

那么在今天这一讲里头

我们同样 我们照样会通过示例

来帮助大家理解

怎么样实现数据采集以及

不仅仅是采集而且是控制这样子的一个应用

也就说在这一讲里头我们通过两个示例来

综合一下我们可编程并行数字接口8255

以及我们的A/D转换器 大家结合在一起

实现一个稍微有

一定应用场景或者有一个实际控制

实际的工业控制这样子的一个背景的

这种控制系统的设计方法

好 下边我们先来看第一个示例

这个例子是这样

是一个

温度控制系统

那么它是具体的是一个炉温控制电路

它的原理图就在这个下边

在这个图里头

8位A/D转换器的输入模拟量的范围是0到5伏

这是给定的

那么要求将炉温控制在允许的范围内

我们假设它的上限

和下限分别是MAX和MIN

如果低于下限或者高于上限

也就是我们说的超出阈值的话

那么就调用控制算法子程序F(X)

这里也假设

这个控制子程序是已经事先编好的

就相当于我们已经

它已经在函数库里头

可以拿来用的一个现成的子函数一样

那么将子程序的运算结果

这个运算结果我们也假设在AL中

从8255的PB口输出

对炉温进行调节

否则就继续执行以上操作直到有键按下为止

这个题目呢它实际上

可以应用有很多的

实际的应用背景

也就说它可以用于比如锅炉的温度控制

比如应用于其他的各种温度控制

有温度控制需求这样的场合

温度控制我们想

首先要知道现在的温度是什么

所以它一定要有温度检测

我们从前面学

上一周学的那些内容里我们已经知道

一个

温度的采集或者温度的检测是通过

是需要通过传感器的

那么传感器的输出经过那么

那么一个一个若干个环节最后就

进入到A/D转换器

所以我们现在对于现场温度的采集

通过那样一个

前面的那些过程我们在这里就把

因为不是我们这个课的主要内容

我们就把它忽略了

我们只认为它来到了A/D转换器的门口

那么A/D转换器的目标或者它的功能

就是把这个输入的连续变化的温度值

转换成数字信号进入到系统

所以它的总体的工作过程是这样

就说我们去采集现场的温度值

然后把它转换成数字信号进入到系统

系统拿到这个数字信号以后通常会和它自己

本身的设定值进行比较

在这个题目里它的设定值就是在MAX和MIN之间

这是我们称为阈值

那么如果在这样一个阈值范围内

那么就OK 也就说一切正常

那么超出了阈值 就说有可能它大于

最高温 或者低于低温

那么这个时候我们必须要进行处理

那么我们可以很

简单的假设一下

高于最高温度我们可能就要降温

低于低温了我们可能要加温

就是这么一个工作

那么这个题目就是

我们现场采集的这个温度

所对应的这个模拟信号

通过转换之后

我们通过8255这个可编程接口

进入到系统

系统然后对你转换过收到的

读进来的这个数字信号

进行对比

然后如果在这个阈值范围内

就OK就不理睬它了

如果要是当然就还继续检测

不是完全就退出

那么如果是超出了这个阈值范围

那么它就要根据它是大于还是小于

发出相应的控制

也就说它把它

这个F(X)输出的这个值

也就是它的控制值 也就说AL里面的值

通过D/A转换器转换成相应的模拟信号

然后去控制现场的调节机构

比如说电磁阀 让它加温或者降温

这就是这样子的一个

工业过程控制的一个应用场景

我们把它

抽象出来

仿真在这里

给大家来看一下

当然实际的工业

控制过程 我们

到底是不是一直不停的在检测炉温呢?

你有可能一直 对吧

但是我们必须要让它有一个停止的环节

一般可以是一个开关或者是什么啊

在这里我们在仿真环境下我们同样的

跟之前的那些 上一讲的案例一样

就是直到有任意键按下就退出

完成这样一个工作也

同样牵扯到软件设计和硬件设计两部分

硬件设计呢

刚才题目里已经给出来

8255的接口地址范围是这样一个范围

这个范围里头大家可以看到

最高这一位是A11

我们已经知道 这个在8088

或者8086整个这个系统中间

我们能够管理的端口地址最多是64K个

也就是说它的端口地址码的长度是16位

但是在这里呢 只给出了11位

意味着它的高4位没有给出来

没有给出来意味着高4位是可以是任意值

也就说你这高4位根本就没接

没接你就不能够在这里直接把它接成0或者设成1

这一点我们在前面讲部分地址译码的时候

实际上已经给大家提示过

所以在这里呢我们要设计这个硬件线路

我们只能采用部分地址译码

有关这个设计的过程

因为译码电路的设计讲了很多遍

我们这里不再重复了

这就是我们最终设计出来的一个原理示意图

有了这样一个示意图如果你有了芯片具体的引脚图

那么我们就

可以很方便的就把它直接转译成

转换成原理图了

具体的原理图

好了 这个是硬件的设计

下面我们主要来介绍一下

如何实现它的软件的控制程序的编写

我们来分析一下

首先这个A/D转换器

我们没有题目没有告诉你必须用ADC0809 对吧

我们假设这就是一个可能是某个型号的A/D转换器

它这是一个单路模拟量输入

而它的工作时序是这样
从这个时序上我们也

很容易能够看出来 它肯定不是0809

从这个工作时序 我们就应该能够得出

它的工作流程

因为时序本身反映着这个集成电路芯片

它的工作原理

第一 它要启动变换

而且它的启动变换的信号是一个下降沿有效的

也就是它的START信号

启动以后它也

所有的A/D转换 它都有一个转换的时间

所以也就说它需要一个转换过程

在这个转换过程里头 它的

它是不能让你读结果的

所以大家看到这个时序里头

EOC在高电平的时候

对应到的是它启动的过程中

所以EOC为0的时候表示转换结束

那么转换结束以后

看来这个A/D转换器的内部也有

三态门的控制信号

也就是它有开门信号 就是OE信号

OE信号和0809一样

是高电平有效

那么在它有效期间

我们的数字信号也就是转换结果就读取出来了

因此从这个时序里我们就可以看出来

数据采集程序的核心流程

就是首先启动变换

然后去判断EOC端的状态

如果这个是0 表示转换结束

如果EOC是1 表示它还正在转换过程中

因为这个EOC端是

低电平表示转换结束

所以如果你打算采用

中断控制方式

来获取EOC的状态的话

你必须把它的输出再取反

如果用查询工作方式的话

那么你就可以直接去读EOC端的状态了

等你读到了低电平

那么这个时候我们就可以去读取转换结果了

怎么读呢?

必须要把OE要送上1 也就是说

要使得它内部的三态门开门

然后就读取过来

这就是我们数据采集程序的核心流程

就这四个步骤

相对于我们在前面讲0809的时候我们已经发现

这里要少一些事情

因为它这是单路模拟量输入

首先不需要去设置它的通道地址

当然也就没有地址锁存

就少了这样两步

因此 它的控制流程

如果我们用流程图来描述的话可以是这样

首先要初始化

当然在这里的初始化部分

包括了8255的初始化

然后呢 就是我们刚才说的

核心流程送启动变换的信号

判断EOC端的状态

然后看看EOC端是不是0

如果不是0

那么OK

就表示它没有转换结束继续去读

这是显然很标准的查询工作方式的控制流程

或者说控制方式

那么EOC端如果是1了

如果是0了

那么就说明它转换结束 这个时候送OE信号

读转换结果

那么一次就做完了

按照刚才的题目要求

我们对读取出来的结果

要判断下

它是不是在我们设定的阈值范围内

如果超出了这个阈值我们就要调用

调节子程序

调节完了以后 我们再去判断有没有键按下

那么如果说它没有超出这个阈值

说明它一切正常

我们就直接去判断有没有键按下

如果有键按下 那这个就结束了就退出了

如果没有键按下呢?

按照题目刚才的要求要重新开始

就继续刚才这个过程

也就说我们再重新开始启动变换

也就说我们去启动下一次数据采集的这个过程

大家看这个流程跟我们前面讲AD

就上一周讲A/D转换器最后那个

控制流程比较起来

它的差别或者说它的不同点

一个是在这里多出了要对阈值的检查

调节子程序的调用

它少了就是我们的通道地址以及地址锁存信号

所以把这个例子看完了

我们其实前面那个0809的那个循环

8路模拟量采集 循环采集的那个程序

大家也很容易就自己能够编出来

当然因为我们已经给了大家很详细的控制流程

好了基于这个流程 我们现在来看程序

这就是8255的初始化程序

我们编写成了子程序的结构

这里我不再详细的去解释了

就是提醒大家一下 子程序

它的定义方式

以及里边的参数保护方式

还有最后一条指令一定是RET

它用来负责返回断点

在这个子程序里头

我们方式控制字选择91H为什么?

因为方式控制字的最高位是1

另外呢

它的A端口 B端口 C口低位和C口高位

都被用到了

A口作为输入 刚才我们看到那个图里头

它是用来读入它的

温度值的

然后它的B口是输出

用来控制现场的执行机构的

那么C口的

低位是输入 用来读EOC端的状态的

C口的输出

是用来去控制产生相应的START和OE信号的

所以它就这个方式控制字91H是个唯一值

那么底下呢

09H和0AH这是两个位控制字

一个是我们看到 根据前面那个图

C4位是要连接到START端的

所以START呢 根据时序图它的初始状态一定是高电平

因为它必须要用下降沿来启动

所以我们初始它为高

然后OE端呢 因为它高电平是开门

所以初始情况下它一定要是低

这就是两个控制字的来源

下边我们就开始来看它的控制程序

首先这里我们定义了一个在

把阈值的上限和下限定义在数据段里

也就是它的MAX和MIN

我们这里因为这是一个示意性的程序了

就说它的MAX到底等于几

MIN到底等于几

我们在这里没有给出一个具体的数字

我们用问号来代表它可能是一个某个值

当然你具体自己做系统的时候

这个MAX值和MIN值肯定要设定为一个具体的值

这是初始化部分

好了 整个按照我们刚才的控制流程

初始化结束之后

下边就是启动变换

对吧 启动完了以后

然后就是去读取

它的这个EOC端的值

因为刚才EOC端的这个状态是通过C0位进来的

所以底下就是测试一下

C0位的状态

然后

如果它的这个是C0位

也就是说EOC端是低电平的话

那么现在就输出OE的信号并且读转换结果

唯一跟之前我们其他的工作过程不一样的地方是

读取了转换结果之后

数据采集程序本身应该是差不多了就完成了

对这个具体的题目是

读完了这个读取了这个结果之后

我们要去看一下它的阈值是不是在

允许的范围内

我们这里用了JA和JB这两条

条件转移指令

也就说你读取的值

在AL里头和

刚才我们在这个

MAX里的值和MIN里边的值

进行比较

如果这个读取的值大于这个MAX值

那就说明它大了

那么这个时候我们就要转移到

去调用这个子程序

如果小于下限

同样的也就要去转向这个FIN

就是去调用那个调节子程序

如果它既不大于上限也不小于下限

也就说它在阈值范围内的话

那么它就直接转到GOON

GOON这个地方是什么?

就是我们前面已经讲过

它是有判断有没有任意键按下

如果没有任意键按下

那么就直接又回去了 又到AGAIN这个地方

再次启动变换

也就说再次去实现数据采集

那么如果是

有键按下那就退出

这个就是我们

整个实现锅炉温度控制

或者说任何一个温度控制系统

它的一个程序就是这样 控制程序就是这样

对于具体的这个程序来讲

跟一般的A/D转换器芯片的应用

或者一般的数据采集程序比较起来

它就是多了一个阈值的比较

第二个示例呢我们同样有一定的应用背景

这个应用背景是这个题目是

设计一个水库水位的监视系统

我们知道每年像这种夏季呢

它可能就尤其是南方就特别容易发洪水

那么这个洪水

怎么样 我们怎么样知道要发呢?

我们实际上是不停的在去检测

比如江面的水位的高低

或者水库水位的高低

通过它 如果超出了某一个

我们的极限值 我们必须要报警或者比如泄洪

或者什么样

采取一些手段

那么在这个题目 我们就把这样子的一个

实际的应用场景我们做简单的一个抽象

我们把它变成一道题目来给大家讲

题目要求是这样

通过ADC0809的IN0端监测水位的高低

这里给出了具体的A/D转换器的型号了

系统始终监测水位的高低变化

水位到达最高点的90%的时候开始报警

也就一般我们不会要求它到百分之百

就到最高位了

这时候害怕就来不及

那么到90%就要报警

扬声器发出0.5秒500Hz

和0.5秒1KHz交替变化的声音

然后报警灯要点亮

这个和我们之前的这个应用

或者之前讲的示例有一点不同的是

这个时候要发出两种不同频率

交替发出两种不同频率的声音

因为这样子的很可能它的震撼效果很会更好一点

那么水位恢复正常以后系统不再报警

当然要

一旦报警了 到了90%了你开始报警了

但是过一会可能水又下去了

那么这个时候报警就要自动要关掉了

这个地方唯一的注意的地方

就是

扬声器要发出两种频率交替变化的声音

我们看一下怎么来实现这件事情

我们

利用8253来产生音频报警信号

假设这个8253的地址范围是

F804H到F807H

利用8255来控制ADC0809的A/D转换和报警控制

也就说我们用8255来接收A/D转换器

输出的这个水位信息

然后呢 用它再来控制报警

我们同时同样也假设

这个8255的地址范围是F800H到F803H

从这两个地址范围大家可以很清楚的看出来

这个显然都是采用的是全地址译码的方法

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

第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讲 结束语

--结束语

综合设计示例详解II_01笔记与讨论

也许你还感兴趣的课程:

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