转换0809.docx
- 文档编号:29120524
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:34
- 大小:530.83KB
转换0809.docx
《转换0809.docx》由会员分享,可在线阅读,更多相关《转换0809.docx(34页珍藏版)》请在冰豆网上搜索。
转换0809
8位A/D转换器ADC0809
(1)技术指标:
工作方式:
逐次逼近式
转换时间:
100μs
线性误差:
+/-1/2LSB
封装形式:
28脚双列直插式
(2)简要说明
CMOS工艺,逐次比较式ADC,内含8通道多路开关,锁存逻辑控制器,具有三态输出缓冲器,能于微机兼容,输出电平与TTL或CMOS兼容。
(3)引脚说明
(4)功能框图
(5)电器指标
(a)电源电压 6.5V
(b)除输入端的任意端电压 -0.3~VDD+0.3V
(c)控制输入端电压 -0.3~+15V
(d)工作温度 -40~85 民品
-55~125 军品
(e)储存温度 -65~150
以上的技术指标,我们都是要关心的,在使用时一定要注意。
(6)时序图
(7)0809接口框图
每一个部分的电路是独立的,完成AD转换首先地址选择,其次启动,等待,最后是读数,在完成AD转换时是相关的的,但接口电路的设计是独立的。
(8)地址锁存的时序:
(9)启动
(10)等待
(11)读数
设计此电路有两种方法:
一种是利用I/O端口设计,另一种利用总线设计.
例:
利用I/O口设计。
在8088中不提供I/O口,利用74LS273和74LS245扩I/O端口。
ALE,A0,A1,A2,START,OE要求CPU系统电路提供输出端口,EOC,D0,D1--D7要求CPU系统电路提供输入端口。
所以需要1片74LS273和两片74LS245.
译码电路,采用一对多设计:
A15 A14 A13 A12 A0 CS0 CS1 CS2
0 0 X X X 0 1 1
0 1 X X X 1 0 1
1 0 X X X 1 1 0
CS0的地址为:
0000-3FFFh
CS1的地址为:
4000-7FFFh
CS0的地址为:
8000-BFFFh
输出接口电路的设计:
输入电路接口电路的设计:
对于8031的结构是:
当前的主流CPU的结构:
目前芯片的设计都是基于I/O端口的方式:
软件编程的方法:
1、需求分析
2、算法
3、框图
4、编写代码
5、调试
需求分析:
此程序采集8路将数据存放到某个数组中。
算法:
简单略。
框图:
初始化:
硬件和变量为固定状态,硬件ALE为低,SATRT为高,OE为低,通道地址为第一个通道,存储数据的数组清零。
选择通道:
启动:
等待:
读数:
编写代码
利用C语言编写,C语言为中级语言,它具有低级语言和高级语言的特性,在利用C语言时,一种是加操作系统,另外是不加操作系统(操作系统的功能是内存管理,进程管理,设备管理,文件管理)。
在单片机系统中这些功能都由我们自己来做。
所以变量的理解是关键。
变量的理解第一是作用域(全局变量和局部变量)。
变量的理解第二是生存期(静态和动态变量)。
变量的理解第三是存储的位置(对于8088系统寄存器,数据区,堆栈区。
其它还有更多的区域),这些都必须在程序中说明。
变量的理解第四变量的特点,字节数,具有地址的属性,描述方法,存放形式。
不管是多少位机一个字节对应一个地址。
例如:
intiii;
16位机,字节数16位,两个字节。
低位字节存放在低位地址,高位字节存放高位地址,以低位字节的地址代表所有单元的地址。
描述方法,最高位为符号位,正数是以原码形式存放,负数是以补码形式存放。
在使用的时候降维,对于iii是个地址,常量。
降维的含义是取地址的数据。
如果取不到数据的话,返回这个单元的地址。
如果取数据的话,返回数据,再不能降维。
例如:
intS[2][3][4];
s+1,*s+1,**s+1,***s+1的理解,*的意思也是降维。
s由两个元素组成,s[0]由三个元素组成,s[0][0]由四个元素组成,s[0][0][0]由两个字节组成。
s首先降维,取第一个元素,但取不到具体数据,返回地址,那么就是S[0][0][0]的第一个字节存放的地址。
1的维数和S相同,所以是加24。
对于语句和函数是复杂的动词。
它一定是对变量的操作。
理解变量就是名词!
每个程序都有自己的框架!
对C程序,是由库函数和主函数构建的。
书写规范也可以说是习惯:
常量和变量用名词,函数用动词和操作的变量,常量用大写字母和变量用小写字母。
一般动词的第一个字母大写!
#inlude"stdio.h"
unsignedcharad_buf;
unsignedcharad_adr;
unsignedcharbuf;
unsignedcharout_0809_data;
main()
{
inti;
Init();
for(i=0;i<8;i++)
{
Set_ad0809_adr();
ad_adr=i;
Start_ad0809();
Delay_ad0809();
Read_ad0809();
Write_data();
}
}
以上是不是在写作文!
功能:
初始化硬件和变量
输入参数:
空
输出参数:
略
Init()
{
inti;
for(i=0;i<8;i++)
{
ad_buf[i]=0;
}
ad_adr=0;
out_0809_data=00100000B;//start=1;ALE=0;OE=0;
//加这个变量的目的是,对某一个端口操作时不破坏其它口
outportb(0x0,out_0809_data);
}
说明:
功能:
设置通道
输入参数:
ad_adr
输出参数:
空
Set_ad0809_adr()
{
out_0809_data=out_0809_data|ad_adr;
outportb(0x0,out_0809_data);
out_0809_data=out_0809_data| 0x10; //ALE=1;
outportb(0x0,out_0809_data);
out_0809_data=out_0809_data& 0xef; //ALE=0;
outportb(0x0,out_0809_data);
}
功能:
启动
输入参数:
空
输出参数:
空
Start_ad0809()
{
out_0809_data=out_0809_data&0xdf; //START=0;
outportb(0x0,out_0809_data);
out_0809_data=out_0809_data|0x20; //SATRT=1;
outportb(0x0,out_0809_data);
}
功能:
等待
输入参数:
空
输出参数:
空
Delay_ad0809()
{
unsignedcharccc;
ccc=inportb(0x8000);
ccc=ccc&0x01;
while(ccc==1)
{
ccc=inportb(0x8000);
ccc=ccc&0x01;
}
ccc=inportb(0x8000);
ccc=ccc&0x01;
while(ccc==0)
{
ccc=inportb(0x8000);
ccc=ccc&0x01;
}
}
功能:
读数
输入参数:
空
输出参数:
buf
Read_ad0809()
{
out_0809_data=out_0809_data&0x40; //OE=0;
outportb(0x0,out_0809_data);
buf=inportb(0x4000);
out_0809_data=out_0809_data|0xbf; //OE=1;
outportb(0x0,out_0809_data);
}
功能:
存数
输入参数:
空
输出参数:
ad_buf
Write_data()
{
ad_buf[ad_adr]=buf;
}
程序结束!
目前CPU的速度越来越快,绝大多数都已经是50MHz,那么执行一条语句的速度也是越越来快,那么时间延时就不能忽略不计。
例如ALE的要求:
对于语句和函数是复杂的动词。
它一定是对变量的操作。
理解变量就是名词!
每个程序都有自己的框架!
对C程序,是由库函数和主函数构建的。
书写规范也可以说是习惯:
常量和变量用名词,函数用动词和操作的变量,常量用大写字母和变量用小写字母。
一般动词的第一个字母大写!
#inlude"stdio.h"
unsignedcharad_buf;
unsignedcharad_adr;
unsignedcharbuf;
unsignedcharout_0809_data;
main()
{
inti;
Init();
for(i=0;i<8;i++)
{
Set_ad0809_adr();
ad_adr=i;
Start_ad0809();
Delay_ad0809();
Read_ad0809();
Write_data();
}
}
以上是不是在写作文!
功能:
初始化硬件和变量
输入参数:
空
输出参数:
略
Init()
{
inti;
for(i=0;i<8;i++)
{
ad_buf[i]=0;
}
ad_adr=0;
out_0809_data=00100000B;//start=1;ALE=0;OE=0;
//加这个变量的目的是,对某一个端口操作时不破坏其它口
outportb(0x0,out_0809_data);
}
说明:
功能:
设置通道
输入参数:
ad_adr
输出参数:
空
Set_ad0809_adr()
{
out_0809_data=out_0809_data|ad_adr;
outportb(0x0,out_0809_data);
out_0809_data=out_0809_data| 0x10; //ALE=1;
outportb(0x0,out_0809_data);
out_0809_data=out_0809_data& 0xef; //ALE=0;
outportb(0x0,out_0809_data);
}
功能:
启动
输入参数:
空
输出参数:
空
Start_ad0809()
{
out_0809_data=out_0809_data&0xdf; //START=0;
outportb(0x0,out_0809_data);
out_0809_data=out_0809_data|0x20; //SATRT=1;
outportb(0x0,out_0809_data);
}
功能:
等待
输入参数:
空
输出参数:
空
Delay_ad0809()
{
unsignedcharccc;
ccc=inportb(0x8000);
ccc=ccc&0x01;
while(ccc==1)
{
ccc=inportb(0x8000);
ccc=ccc&0x01;
}
ccc=inportb(0x8000);
ccc=ccc&0x01;
while(ccc==0)
{
ccc=inportb(0x8000);
ccc=ccc&0x01;
}
}
功能:
读数
输入参数:
空
输出参数:
buf
Read_ad0809()
{
out_0809_data=out_0809_data&0x40; //OE=0;
outportb(0x0,out_0809_data);
buf=inportb(0x4000);
out_0809_data=out_0809_data|0xbf; //OE=1;
outportb(0x0,out_0809_data);
}
功能:
存数
输入参数:
空
输出参数:
ad_buf
Write_data()
{
ad_buf[ad_adr]=buf;
}
程序结束!
目前CPU的速度越来越快,绝大多数都已经是50MHz,那么执行一条语句的速度也是越越来快,那么时间延时就不能忽略不计。
例如ALE的要求:
例利用总线设计:
以上论述了AD0809的接口电路分成通道选择,启动,等待,读数四个独立部分。
利用总线设计的方法和以前讲述的方法是一样的。
即利用计算机的读时序或者写时序和芯片的逻辑设计控制电路。
对于AD0809的接口电路的接口电路设计是一样的。
因为需要四个单元,就需要设计4个片选信号,假设设计的片选信号为CS0(40h-43H),CS1(80h-83H),CS2(A0H-A3H),CS3(B0H-B3h)。
整体设计如下:
1、通道选择设计
通道选择是将总线上的信息输出到0809。
那么利用的就是计算机的读的时序。
计算机的写时序
0809的通道选择的时序:
写和片选是当且仅当,低有效,所以片选信号和写信号是或的关系。
所以设计如下:
通道选择程序:
MOVDX,40H
MOV AL,通道号
OUTDX,AL
unsignedcharadr,data_x;
adr=0x40;
data_x=0; 第一个通道
outportb(adr,data_x);
地址线包容地址线,如果片选CS0包括8个地址(A0,A1,A2不参与译码),A,B,C也可以接地址线。
通道选择程序:
MOVDX,40H 第一个通道
OUT AL,DX
unsignedcharadr,data_x;
adr=0x40;
outportb(adr,data_x);
数据线无用。
2、启动设计
只要一个下降沿即可
3、等待
可以通过IO口方式查询低高平.
在这个时候是等待,为了省口可以利用延时的方法。
如果程序可以做其它事情就可以接到中断上。
4、读数
计算机的读时序如下:
0809数据接口为
设计的电路如下:
ASM程序
MOVDX,0B0H
INAL,DX
C程序
unsignedcharadr,data_x;
adr=0xB0;
data_x=intportb(adr);
5、简化设计
ALE利用的是上升沿,START启动利用的是下降沿,那么可以用一个地址
这两个操作,只写不读,读数据时也可以利用这个片选地址:
那么就有原版资料的参考设计。
设计不是一下就得到的。
目前的单片机不提供总线方式,这种方法用的比较少。
但是如果利用工业计算机,它提供却是总线,这种总线方式比较多,例如PCI,PCIE,IGP。
设计的方法都是一样的都是利用总线的时序要求和芯片的逻辑设计出控制电路。
例:
利用I/O口设计
在8088中不提供I/O口,利用74LS273和74LS245扩I/O端口,A0,R/C,CS,CE要求CPU系统电路提供输出端口,D0,D1..D11,STS,要求CPU系统电路提供输入端口。
所以需要1片74LS273和两片74LS245.
译码电路,采用一对多设计:
A15 A14 A13 A12 A0 CS0 CS1 CS2
0 0 X X X 0 1 1
0 1 X X X 1 0 1
1 0 X X X 1 1 0
CS0的地址为:
0000-3FFFh
CS1的地址为:
4000-7FFFh
CS0的地址为:
8000-BFFFh
输出接口电路的设计:
12/8接到PIN1脚上。
输入电路接口电路的设计:
程序如下:
第一个状态,CE必须为低,CS必须为高,而R/C和A0可高也可为低。
第二个状态,CE必须为低,CS必须为低,而R/C和A0可高也可为低。
第三个状态,CE必须为低,CS必须为低,R/C必须为低,A0可高也可为低。
第四个状态,CE必须为低,CS必须为低,R/C必须为低,A0为高为某种方式、为低另一种状态,必须确定。
第五个状态,CE必须为高,CS必须为低,R/C必须为低
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 转换 0809