| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 基于8086处理器的压力计设计(C语言&汇编混编、Proteus仿真) -> 正文阅读 |
|
[嵌入式]基于8086处理器的压力计设计(C语言&汇编混编、Proteus仿真) |
基于8086处理器的压力计设计一、整体框架目标为利用8086系统的知识设计压力计。首先使用8255的三个通道完成对ADC采样值的输入、对数码管显示值的控制以及对状态指示灯的控制。ADC采样选用了ADC0808芯片,进行模拟值转换为8位数字值。利用8259中断芯片进行ADC采样值的读取工作。针对压力计的任务选用了MPX4115压力传感器将设定压力值转换成模拟电压。此外还采用了数码管译码器和四位共阴极数码管进行数值的显示最后还设置了三个状态指示灯,用以查看工作状态。最终实现对以上各芯片与外设的硬件连接和软件设计,完成实时将压力传感器的压力值在数码管上显示的功能。 二、系统设计2.1 设计思路本设计采用8086最小系统作为控制系统,74LS373作地址锁存器,74154作为地址译码器产生芯片片选信号。 首先选用MPX4115压力传感器输出电压信号,用Proteus产生10kHz信号作为ADC0808的时钟信号,利用8255芯片C口输出触发信号开启ADC0808进行电压模数转换。再利用ADC0808的转换结束信号EOC作为中断输入发送给8253中断芯片,开启采样中断服务函数。在中断服务函数中,利用8255芯片A口获取ADC0808转换完成的数字信号。最后在程序中将此信号经一系列处理,从8255的B口经4511数码管译码器发送给4位共阴极数码管,进行压力值显示。 此外,8255芯片的C口输出端连接了红、黄、绿三个发光二极管,作为系统状态指示灯,分别代表达到测量值达量程上限、测量值达量程下限以及测量值在量程内,系统正常工作三种状态。 2.2 8086控制电路设计8086CPU共40条引脚,按其功能分可分为地址总线、数据总线、控制总线以及其它。由于当前设计8086CPU工作于最小模式,故其
?
M
N
/
M
X
 ̄
\ MN/\overline{MX}
?MN/MX引脚需接+5V决定其工作模式。 2.3 地址总线电路设计由于8086CPU的地址/数据总线是分时复用的,在总线周期的前一部分时间CPU送出地址信号,在总线周期的后半部分CPU送出数据信号,故需要使用74LS373芯片将CPU送出的地址信号进行锁存,这样在总线周期的后半部分地址和数据才能同时出现在系统的地址总线和数据总线上。 另外,由于在所设计系统中由8086CPU产生全部控制信号控制所有芯片,故需要利用一个三八译码器74LS138将8086CPU送出的地址数据转换成一个片选信号,确保控制对象的准确性。 2.4 ADC0808采样电路设计2.4.1 ADC0808工作方式ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。 ADC0808芯片有28条引脚,各引脚功能如下:
2.4.2 ADC0808硬件电路设计本设计只需检测单个压力信号的大小,故只采用ADC0808的IN0引脚作为模拟量输入端口,因此将3位地址输入线ADDA、ADDB、ADDC的值设置为000,硬件上将它们接地即可。时钟频率不高于640KHZ,采用10kHz即可。 关于参考电压的选取,需要检测MPX4115压力传感器的模拟电压输出和给定压强的大小。MPX4115的量程下限为15kPa,在标准5V电压的输入下,此时的模拟电压输出为+0.2579V,MPX4115的量程上限为115kPa,考虑到ADC0808的输出为8位数字量,为了减小非线性误差,同时方便软件处理,我选取了100kPa作为本系统的量程上限,原因是8位数字能表示的范围为255,此时的量程为85kPa,数值为255的三分之一。在100kPa、输入电压为5V 时,模拟电压输出为+4.0920V。因此将+0.2579V和+4.0920V作为ADC0808的参考电压,这样能得到较准确且易处理的数字量输出,在程序设计上可以很方便地设置为1kPa的分辨率。
2.5 8259中断控制电路设计2.5.1 工作方式8259可编程中断控制器可用于管理8086系列微机系统的外部中断请求,实现优先权的排队、提供终端类型码、屏蔽中断输入等功能,单片8259可以管理8级中断。 IR0接ADC的A/D转换结束信号端EOC作为中断请求信号,每当ADC转换完成,则给给8259发出中断请求信号,并在中断服务函数中接收ADC数字量输出。 2.5.2 8259程序设计8259初始化命令字ICW1用于规定8259的连接方式(单片或级联)和中断源请求信号的有效形式(电平触发或边沿触发),其格式如图11。由于在该系统中只有七个中断,连接方式选择单片使用,且令触发方式选择边沿触发,需要设置ICW4(对8086CPU而言必须设置ICW4),故初始化命令字ICW1为00010011(13H)。
8259初始化命令字ICW4只有当IC4=1时才需要设置,对8086系统而言,ICW4是必须设置的初始化命令字,该命令字用于规定8259的工作方式、终端优先顺序和中断结束方式等,其格式如图13所示。由于系统采用8086CPU,故D0=1。令8259工作于一般全嵌套方式(事实上最后只用到了一个中断),非缓冲方式,非自动EOI,故初始化命令字ICW4为00000001(01H)。
初始化程序
2.6 数码管与指示灯电路设计2.6.1 工作原理首先此设计需要用到三个数码管输出,因此我采用了四通道十进制共阴极数码管,即单个数码管的所有LED阴极连接在一起,通过循环选通输出的方式对不同数码管进行输出,如下图。
2.6.2 代码设计首先我封装了一个单个数码管选定显示函数LED_out(),只需输入数码管的位置与所需输入的十进制数字即可进行输出。再封装了一个四位数码管显示与状态指示灯控制函数LED_set(),仅需输入十六进制的ADC采样值便可得到10进制的数码管显示以及状态指示灯的显示,代码如下。
三、整体设计3.1系统结构图3.2 程序流程图四、功能介绍
附完整工程、源代码及展示文件,点击下方链接获取 写在后面 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 12:33:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |