一次比较完成后,将SAR的次高位置“1”送D/A转换,新的Vh再同Vi比较来决定该位为“1”还是为“0”......上述过程重复进行直到最低位为止。
经N次操作后,控制逻辑输出一个转换结束信号,控制缓冲寄存器接收SAR的内容,即本次A/D转换的结果。
该缓冲寄存器的输出接收数据总线。
ADC0809转换由START脉冲信号来启动,脉冲下降沿有效(转换开始).当输入通道选择地址线状态稳定后,在ALE信号的上升沿将地址线的状态锁存存到芯片的地址锁存器中。
在转换操作过程中,信号EOC保持低电平,当转换结束时变为高电平。
该信号主要用来查询A/D转换是否结束或者用来作为中断请求信号。
当ENABLE被置为高电平时,三态门打开,将数据锁存器的内容输出到数据总线上。
片内带有8路模拟开关,并有与微处理器兼容的控制逻辑。
它采用逐次逼近法进行8位转换。
因此,模数转换部分包括一个带有树状模拟开关的256R分压器和一个逐次逼近寄存器S.A.R。
8路模拟开关则可选通8路模拟输入的任何一路单端模拟信号,其内部结构框图如图1所示:
图1ADC0809内部结构框图
2.2.2中断控制器的选择
本课程设计要求多中断源请求,软件可禁止与允许每个请求。
中断优先级判别功能,响应优先级别最高的请求。
中断嵌套功能,高级别中断可中断较低级别的中断。
响应中断后,能自动转向中断处理程序,处理结束后自动返回主程序。
本次设计中断控制器选用8259
8259是专门为了对8085和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259能管理8级向量优先级中断。
在不增加其他电路的情况下,最多可以级联成64级的向量优先级中断系统。
8259有多种工作方式,能用于各种系统。
各种工作方式的设定是在初始化时通过软件进行的。
在总线控制器的控制下,8259芯片可以处于编程状态和操作状态.编程状态是CPU使用IN或OUT指令对8259芯片进行初始化编程的状态
8259的基本功能:
功能就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的INTR端;当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
8259的内部结构如下图:
图28259的内部结构图
8259的外部引脚如下图:
图38259的外部引脚图
2.2电路说明
在掌握ADC0809的内部结构及工作原理的基础上设计中断方式A/D转换电路并在实验台上连线。
电路图如图5所示。
需要连接的线路如下:
.8259OUT0接ADC0809CLK(500KHZ)。
.ADC0809的EOC接IRQ7(B4)。
.ADC0809CS接220H~227H。
.8253CS接200H~207H。
为了用图形方式显示,程序要使用两个缓冲区,其中BUFFER1用于存放A/D采样转换的数值,BUFFER2用于存放显示的数对应的行值。
P1是BUFFER1的地址指针,用于指示要读出的数的地址。
程序采用中断方式进行采样,将采样值存入BUFFER1中,每当100个点的采样完成之后,便将采样值变成显示所对应的行值,以顺序号作为列值,按高分辨率图形方式显示出来。
每次显示都首先抹除旧的显示亮点,然后显示新的亮点。
如此循环,在屏幕上将看到一条动态显示曲线。
当任意键按下时,程序运行结束。
2.2.1A/D转换电路图
图4A/D转换电路图
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
A/D转换就是把模拟量转换成二进制码表示的数字量,一般的A/D转换过程是通过采样,保持,量化和编码4个步骤完成的,这些步骤往往是合并运行的。
本设计用ADC0809实现A/D转换。
按查询方式采样三路A/D转换数据,用简单输入口(74LS244)查询EOC信号,每循环一次.它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近。
A/D转换器是将模拟信号转换为数字信号,转换过程通过采样、保持、量化和编码四个步骤完成。
采样是将时间上的连续变化的模拟量转换为时间上断续(离散)的模拟量。
即将时间上连续变化的模拟量转换为一系列等间隔的脉冲,脉冲的幅度取决于输入模拟量。
在A/D转换过程中,要用数字量来表示断续变化的模拟量时,为了启动A/D转换过程,在此端加一个正脉冲,脉冲的上升沿将内部的寄存器全部清零,在其下降沿开始A/D转换过程。
在START信号上升沿之后1~8个时钟周期内,EOC信号变为低电平。
当转换结束后,转换后的数据可以读出时,EOC变为高电平。
必须将采样-保持电压归化为某个最小单位的整数倍,这个过程称为量化过程。
所取得的最小单位叫做量化单位,转换速度是指完成一次转换所需的时间,转换时间是从接到转换启动信号开始,到输出端获得稳定的数字信号所经过的时间。
A/D转换器的转换速度主要取决于转换电路的类型,不同类型A/D转换器转换速度相差很大。
转换结束后,逐位近似寄存器的数字送三态输出锁存器锁存,当输出允许信号OE有效时,由三态门输出二进制码。
2.2.2硬件电路连接
根据以上各功能部件的选择,按照各自的硬件连接要求及相互之间在本次课程设计中的关系,做出本次课程设计的硬件连接图如图5:
图5数据采集与控制系统原理电路图
说明:
ADC0809的8路模拟输入分别由W1,W2,W3和DAC0832产生按图13中接法,IN0由W1提供,INl和IN2由W2提供,IN3和IN4由W3提供,IN5,IN6,IN7由DAC0832提供。
同时,DAC0832的输出又作为调节IN0的控制信号。
ADC0809的转换结束信号EOC接系统中断控制器8259A的中断请求输入(例如IR3)。
因此,当转换结束时,自动向CPU申请中断,CPU响应中断,将转换数据读到累加器,然后存人存储单元。
启动ADC0809转换时,首先要向对应通道(由C,B,A端编码决定)发出写操作信号。
这包括三个意思:
发出C、B、A编码和CS信号,它们共同决定选中的通道;使ALE信号为高电乎,锁存C、B、A编码(通道地址低3位);使ALE信号为高电乎,启动转换。
这与写操作的内容是无关的。
按图13中接法,只要对这个地址发出写动作就可以了。
DAC0832的输入是由软件产生的。
也就是说,ADC0809对DAC0832进行采集的信号大小是人为设置的。
中断服务流程图如图6:
图6中断服务流程图
3.设计结果与分析
3.1编程提示
1.ADC0809的分辨率为8位,可有8个(N0~N7)模拟输入,模拟电压范围为0~5V,在CLK为500KHZ时,转换速度为128us,它的START端为A/D转换启动信号。
ALE端为通道选择的地址所存信号,实验电路中将START和ALE相连,输出指令产生的IOW信号与地址译码信号CS信号经或非门产生一个正脉冲,该脉冲一方面锁存A2A1A0的地址使8路模拟开关的某一路接通,同时起到启动A/D转换的作用,故启动A/D转换只须如下2条指令:
MOVDX,PORTADC;ADC0809的端口地址
OUTDX,AL;发CS及IOW信号
在本系统中,ADC0809的端口地址为220H;AL中具体为什么内容并不重要,这是一个虚拟写动作。
2.在中断方式下,当A/D转换结束后就会自动产生EOC信号,此信号接IRQ2,从而引起一次硬中断。
在中断处理程序中,使用如下指令即可读取A/D转换的结果。
MOVDX,PROTADC
INAL,DX
输入指令产生的IOR信号与CS信号或非门接至OE端,OE端是高电平有效。
输入指令执行期间输出三态缓冲器开门,数据进入数据总线。
在本系统中,ADC0809的端口地址为220H。
3.2程序源代码
PAGE60,78
CRLFMACRO;回车换行宏定义
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
NT21H
ENDM
DATASEGMENT
INRDB?
RESULTDB?
BUFFDB600DUP(?
)
XORGDW100
DATAENDS
STACKSEGMENTSTACK'STACK'
DB50DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETBUFF;
MOVAL,0AH
MOVAH,35H
INT21H;取IRQ2中断服务程序入口地址ES:
BX
PUSHES;保护ES,BX,DS
PUSHBX
PUSHDS
MOVAX,SEGADINT;填写中断向量表(N=0AH)
MOVDS,AX
MOVDX,OFFSETADINT
MOVAL,0AH
MOVAH,25H
INT21H
POPDS;恢复DS
INAL,21H
MOVBP,AX;保护中断屏蔽寄存器内容于BP中
ANDAL,11111011B
OUT21H,AL;允许IRQ2中断
MOVCX,300H
MOVDX,203H;8253初始化,0通道方式3
MOVAL,36H
OUTDX,AL
MOVDX,200H
MOVAL,10H;初值得0010H
OUTDX,AL
MOVAL,00H
OUTDX,AL
CCC:
STI
MOVDX,220H
OUTDX,AL;启动一次A/D转换
HLT
CLI;关中断
MOVAX,SI;取A/D转换结果
PUSHDS
MOVBX,6000H;写入6000H:
0~2FFH区域
MOVDS,BX
MOVBX,CX
DECBX
MOV[BX],AL
ANDAL,0F0H;高位十六进制转ASCII码
PUSHCX
MOVCL,04H
SHRALCL
POPCX
ADDAL,30H
CMPAL,39H
JBEAS1
ADDAL,07H
AS1:
MOVDL,AL;显示高位
MOVAH,02H
INT21H
MOV[DI],AL;
INCDI
MOVAL,[BX]
ANDAL,0FH
ADDAL,30H
CMPAL,39H
JBEAS2
ADDAL,07H
AS2:
MOVDL,AL;显示低位
MOVAH,02H
INT21H
MOV[DI],AL
INCDI
MOVDL,20H;显示两个空格
MOVAH,02H
INT21H
INT21H
POPDS
LOOPCCC
POPDX;恢复IRQ2中断向量
POPDS
MOVAL,0AH
MOVAH,25H
INT21H
MOVAX,BP;恢复中断屏蔽寄存器内容
OUT21H,AL
WAIT_IN:
MOVAH,1;程序暂停,等待键入
INT21H
MOVSI,OFFSETBUFF
CALLCRTSET
LL:
MOVAH,0CH;写像素
MOVBH,0
MOVCL,10
MOVCX,XORG;初始列值
INCXORG
MOVDH,0
MOVDL,[SI]
INCSI
INT10H
CMPXORG,400
JLELL
EXIT:
;MOVAX,2
;INT10H;恢复80*25文本显示方式
MOVAX,4C00H;结束
INT21H
ADINTPROCNEAR;中断服务程序
PUSHAX;保护AX
PUSHDX;保护DX
MOVDX,220H;读A/D转换结果
INAL,DX
MOVSI,AX;送SI
MOVAL,20H
OUT20H,AL;发中断结束命令
POPDX
POPAX;恢复
IRET
ADINTENDP
CRTSETPROC;屏幕设置子程序
MOVAX,12H
INT10H
MOVAH,0BH
MOVBX,9
INT10H
RET
CRTSETENDP
CODEENDS
ENDSTART
3.3主程序流程图
主程序流程图如下图
开始
用35HDOS功能调用取类型
0AH的中断矢量,并入栈保存
用25HDOS功能调用将A/D中断服务程序入口地址写入中断矢量表中0AH类型中断的位置
A/D转换结果送内存6000H段
等待硬件中断
关中断
8259初始化:
0通道,3方式,初始值为0010H
开中断
300—>CX
启动0809执行本次A/D转换
取中断屏蔽寄存器的内容存入BP中
开放0AH号中断
显示转换结果及两个空格
CX-1=0?
用25HDOS功能调用恢复原中断矢量
恢复中断屏蔽器寄存器内容
结束
入口
保存使用的寄存器的内容
从0809的端口读取A/D转换数据
发中断结束命令
中断返回
N
Y
a)主程序
b)中断服务程序
图7主程序流程图
4.设计体会
《微机原理及应用》作为电子信息类本科生教学的主要基础课之一,课程紧密结合电子信息类的专业特点,围绕微型计算机原理和应用主题,以Intel80x86CPU为主线,系统介绍微型计算机的基本知识,基本组成,体系结构和工作模式,从而使学生能较清楚地了解微机的结构与工作流程,建立起系统的概念。
这次微机原理课程设计历时一个星期,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
通过本次课程设计,我进一步温习和巩固了课本的理论知识,增强了理论联系实际的能力。
同时也增强了我通过检索资料来获取相关专业信息以及利用检索到的信息来解决面临问题的能力。
本次设计使我深刻认识到自己软件编程方面的知识薄弱,同时也使我体会到软件编程在实际硬件电路连接中的重要作用,软件编程的使用是硬件开销大大减少,同时也使设计更加的简洁易于控制。
在今后的学习我要加强软件编程方面知识的积累和运用。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在同学们的帮助下并且查阅了很多相关的资料才得以解决。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过课程设计,我才真正领略到“艰苦奋斗”这一词的真正含义。
我认为,在课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在课程设计上,我学会了很多学习的方法。
这次课程设计说对我来说是受益匪浅,挫折是一份财富,经历是一份拥有,必将成为我人生旅途上一个非常美好的回忆!
在这里对给过我帮助的所有同学和指导老师再次表示忠心的感谢!
5.参考文献
[1]徐泳龙,倪骁骅.单片机原理与应用[M].北京:
机械工业出版社,2004.
[2]丁元杰.单片微机原理及应用[M].北京:
机械工业出版社,2002.
[3]周明德.微型计算机系统原理及应用[M].北京:
清华大学出版社,2006.
[4]冯博琴,吴宁,陈文革等.微型计算机硬件技术基础[M].北京:
高等教育出版社,2003
[5]范立南,谢子殿.单片机原理及应用教程[M].北京:
北京大学出版社,2006