微型接口技术课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.需求分析 (1)
2.概要设计 (1)
2.1硬件模块 (1)
2.2软件模块 (1)
3.详细设计 (2)
3.1基本特征 (2)
3.28255A的外部引线与内部结构 (3)
3.2.1外部引脚 (3)
3.2.2 与外设的连接信号 (4)
3.38255A的编程命令 (4)
3.3.1 方式命令 (4)
3.3.2 按位置位/复位命令 (4)
3.3关于ADC0809的介绍 (5)
3.3.1 ADC0809的内部逻辑结构 (5)
3.3.2引脚结构 (5)
3.5软件模块 (8)
4.调试与操作说明 (10)
5.课程设计总结与体会 (10)
6.致谢 (11)
7.附录 (11)
1.需求分析
本实验的题目是微机数据采集系统设计与制作.起目的是:通过微机数据系统的设计与制作,深入了解与掌握微机数据采集系统的设计方法.
要求:1.单通道数据采集并显示
2.多通道数据采集并显示
任务:1.进行微机数据采集系统电路硬件设计,画出电路原理图,PCB图或元器件布线图;
2.安装或焊接电路;
3.进行数据采集系统控制程序设计(采用ASM或CPP语言);
4.系统连调,提交一个满足上述良种要求之一的微机数据采集系统设计.
环境:1:PC兼容机
2:Windows 2000
3.MFID多功能微机实验平台(含PC总线驱动板)
4.MF2KI集成开发环境
5.面包板或外设功能模块板
6.安装或焊接工具
2.概要设计
该设计主要包含两个模块:硬件模块,软件模块
2.1硬件模块:
ADC0809将外界的模拟信号转换成数字信号,实现数模转换;而8255A就是可编程并行接口向CPU和ADC0809进行数据的传送
2.2软件模块:
程序流程图如下
3.详细设计
首先我们还要对ADC0809和8255A做一下了解,才能对它们是如何工作的做进一步的了解。
可编程并行接口8255A:
3.1 基本特征
1 ) 8255A是一个具有两个8位(A口和B口)和两个4位( C口高/低4位)并行I/O端
口的接口芯片,它为CPU与AD转换器之间提供TTL电平兼容的接口,PC口还有按位置位
/复位的功能。
2 ) 8255A能适应CPU与I/O接口间的多种数据传送方式的要求,本实验中我们采用的是0
方式。
3 )8255A的A口在这里既做输出有做输入来用。
下图是8255A的引脚图
3.18255A引脚图
3.2 8255A的外部引线与内部结构
8255A是一个单+5伏电源供电,有40个引脚双列直插式组件
3.2.1外部引脚
它作为接口电路的8255A具有面向CPU和面向外设两个方向的连接功能。
①向数据总线的有:
D0﹏D7:双向数据线,用于CPU向8255A发送命令、数据和8255A向 CPU回送状态、数据.
②面向地址总线的有:
CS :片选信号,低电平有效,由系统的高位地址线经I/O端口地址译码器电路产生. CS 为低电平时,才能对8255A进行读写操作.当CS 高电平时切断CPU与芯片的联系.
A1,A0:芯片内部端口地址信号,与系统地址总线低位相连,用来寻址8255A内部寄存器.两位地址,可以形成片内4个端口地址.
③ 面向控制总线的有:
R D :读信号,低电平有效. CPU 通过执行IN 指令使R D 有效,即发读信号将数据或状态信号从8255A 读至CPU.
W R :写信号,低电平有效. CPU 通过执行OUT 指令使W R 有效,即发写信号,将命令代码或数据写入8255A.
ERSET:复位信号,高电平有效.它清除控制寄存器并将8255A 的 A 、B 、C 三个端口均为输出方式;输出寄存器和状态寄存器被复位,并且屏蔽中断请求;24条面向外设的信号线呈现高阻悬浮状态,一直维持到用方式命令才能改变,使其进入用户所需的工作方式. 3.2.2 与外设的连接信号 PA0~PA7:端口A 的输入/输出线 PB0~PB7: 端口B 的输入/输出线 PC0~PC7端口C 的输入/输出线
3.3 8255A 的编程命令
3.3.1 方式命令
作用:指定8255A 的工作方式及其方式下3个并行端口(PA 、PB 、PC)的功能,是做输出还是输入.
3.3.2 按位置位/复位命令
作用:指定PC 口的某一位(某一个引脚)输出高电平或低电平.
0 D6 D5 D4 D3 D2 D1 D0 特 不用 位 选 择 1=置位 征 ( 写0 ) 000=C 口0位 ( 高电平) 位 …………… 0=复位 111= C 口7位 (低电平 )
1
特
征位
A 组方式 00=0方式 01=1方式 10=2方式 11=不用
D1 D2 D3
D0
D4 D5 D6
PA 0=输出 1=输入
B 组方式 0=0方式 1=1方式
PC4~7 0=输出 1=输入
PB 0=0方式 1=1方式
PC0~3 0=输出 1=输入
3.3 关于ADC0809的介绍
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
3.3.1 ADC0809的内部逻辑结构
由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D 转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
3.2ADC0809工作原理图
3.3.2引脚结构
3.3ADC0809引脚图
3.4IN0-IN7:8条模拟量输入通道
ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译A,B,
C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,
B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
本实验在应用时设置1根地址锁存允许信号 ALE,高电平有效.当ALE变高,锁存由ADDa~ADDc 编码所选的通道号,将该通道的模拟量接入A/D转换器.还设置了1根输出允许信号OE,高电平有效.当读数据时,要使OE置高,打开三态输出锁存器,把转换的数字量送到数据线上.
ADC0809的转换启动信号是 START,高电平有效.转换结束信号为EOC,转换过程中为低电平,转换完毕为高电平,可利用EOC的上升沿申请中断或做查询之用.
3.4硬件模块
3.5原理图
3.6由原理图得来的PCB图
3.5软件模块
//*-------------------------------------------------------*/ //* AskAD.cpp(查询方式AD采集实验) */ //* 查询方式AD采集 Source File */ //* Copyright (c) 2005 by HUST */ //*-------------------------------------------------------*/ #include<dos.h>
#include<stdio.h>
#include<conio.h>
int choose_channel(); /*选择通道函数*/
void main(void)
{
int ch,pa,i,eoc;
clrscr();
printf("Please input the AD channel NO(0--7):");
ch=choose_channel();
printf("During the process, press any key to exit!\n");
outportb(0x303,0x88); /*初始化8255状态字,A口输出*/
outportb(0x300,ch); /*送通道号至A口*/
outportb(0x303,0x01); /*使PC0置高发启动信号*/
outportb(0x303,0x03); /*pc1置1进行地址锁存*/
do
{
outportb(0x303,0x98); /*重写8255方式字,A口输入,C口低四位输出,C 口高四位输入*/
outportb(0x303,0x02);
outportb(0x303,0x04); /*使PC0置低*/
do
{
eoc=inportb(0x302)&0x10;
}while(eoc==0); /*查询PC4的状态,直至为高电位,即,转换完成*/ outportb(0x303,0x05); /*pc2=1,允许读转换结果*/
pa=inportb(0x300); /*读转换结果*/
printf("%d \n ",pa); /* 显示转换结果*/
delay(100);
}while(!kbhit()); /*有任意键按下即退出转换*/
}
int choose_channel()
{
int c;
do
{
c=getchar(); /*输入通道号*/
c=c-48; /*将读入的ASCII码转换成对应的数字*/
if(c<0||c>7)
printf("\nThe ad channel NO is wrong! \nBe sure it is between 0 and 7!\nPlease input the NO again!:"); /*通道号有误时,显示出错信息,并要求再次输入正确的通道号*/ else
break; /*通道号正确时,跳出循环*/
}while(1);
return(c); /*返回正确的通道号*/
}
4.调试与操作说明
调试时将电路板上的连接在ADC0809上的12脚引线插入+12伏电源上,将10脚插入CLK时钟信号孔,再调用程序进行编译当无错再运行,扭动可边电阻通过改变电压来改变数据,从微机屏幕上可以直观看出变化。
由于我们的程序是按照十进制显示的,可以看到实验结果为0~255不断的变化.
5.课程设计总结与体会
在课程设计的过程中我遇到了各种体会.首先,我是该实验的组长,负责着该组的分工和合作安排的问题,对我来说是一次挑战.由于小组有四个成员我就将组员分成两个大的模块,朱海峰、杨海波负责的是硬件,朱将电路连接好,杨负责用PROTAL 99E将电路原理图与其对应的PCB图画出来.而我和肖玲则负责编程将其工作的过程实现化.分工后就开始投入实验.在实验中我们遇到了很多的问题:电路图很快搭好,由于朱同学有一定的功底所以电路板做好了但是程序却是一个大的问题,由于知识的遗忘,我们已不能顺利的编好程序,只好回去从新看书,巩固汇编语言各条指令的意思.再有, ADC0809和8255A的功能和其工作的原理还不是很清楚,所以同样得复习.在复习的过程中我们从新认识到8255A作为并行接口在 CPU与外设之间所起的桥梁作用:它将CPU发出的选择通道的
指令发给ADC0809从而对地址进行锁存,再启动Ad转换器进行模拟信号到数字信号的转变,再将转换后的信号通过8255A送给CPU,这就是整个工作的过程.然后就是我们测试的过程,在测试的时候我们发现就算电路图完全正确程序也没有错误但是我们却还是没有测出想要的结果,要么是可变电阻器的极性接错,由于它是有正负极之分的,但是先前我们以为没有可以随便接;要么是由于可变电阻器的灵敏度不好,所以我们只能得到最大结果255而不能得到最小结果0而是2所以我们用万能表对其进行测试发现的确有该问题存在。
最后我们想指导老师张老师请教了关于该实验在现实生活中的应用,他告诉我们三峡水坝大坝的漂流距离可以通过该方法进行远程控制,还有就是锅炉炼钢对其温度的远程采集,等等。
从而对从理论到实际的联系有了进一步的了解。
6.致谢
感谢张绪辉老师的指导。
7.附录
做本实验主要参考的文献:
《微型计算机接口技术及应用》主编:刘乐善,
《32位微机实验指导书》,
《IBM-PC宏汇编语言程序设计》主编:王元珍,韩宗芬,
《计算机通讯与联网技术》中国科学院希望电脑技术公司。