硬件课设报告.docx
《硬件课设报告.docx》由会员分享,可在线阅读,更多相关《硬件课设报告.docx(12页珍藏版)》请在冰豆网上搜索。
硬件课设报告
南京航空航天大学
硬件课程设计
课设名称
数据采集显示系统设计
(一)
作者
陈凯030810330
同实验者
孙少东
专业
自动化
班级
0308103
指导教师
孔德明
二〇一一年六月
数据采集显示系统设计
(一)
一、实验任务与目的
1.利用PC机和实验装置设计并实现数据采集系统
2.进一步掌握微机硬件和软件综合设计方法
二、实验内容和要求
通过ADC0809的通道0(IN0)采集电位器的值,并将其处理后通过DAC0832输出,该输出直接连接到ADC0809的通道1(IN1),并将IN0和IN1采集到的数据分别在LED和CRT上显示。
要求:
1、设计简单操作界面,具有开始与结束运行控制的功能
2、IN0采集的电压值在LED上以十六进制显示
3、对IN0采集的通道进行如下处理:
(1)如果IN0<2.5V,则送00H到DAC0832
如果IN0≥2.5V,则送FFH到DAC0832
(2)DAC0832的输出接ADC0809的IN1,同时接示波器
(3)IN1采集的电压值以十进制在CRT上显示
4、ADC0809采用查询方式读取数据
5、显示须有一定的延时
三、硬件设计,接线图及简要说明
1、硬件原理框图
2、接线图
按上图接完电路后对应芯片的地址为:
(1)8255:
PA口地址:
3000H PB口地址:
3004HPC口地址:
3008H 控制端口地址:
300CH
(2)ADC0809:
IN0地址为:
3040H IN1地址为:
3044H
(3)DAC0832:
DAC0832地址为(单缓冲模式):
3080H
3、总体设计思想
程序特点:
(1)能够动态跟踪采集数据的变化情况。
通过不断循环采集。
(2)能够实现开始和随时结束采集的控制。
通过每次循环开始前判断键盘中有没有结束符输入。
(3)本次课设最大特点是利用DOS的02H号功能调用显示电压值0.00和5.00,使得程序简单清晰。
程序思想
(1)选通ADC0809通道0采集电阻电位,将其转化为数字信号。
(2)此时通过8255的PA0口不断读取ADC0809的EOC信号,一旦EOC信号变成高电位,CPU读取ADC转化的数字信号。
(3)同时将其转化成十六进制存放在变量BUF中,为LED灯的显示做准备。
(4)将BUF中存的十六进制数,通过动态扫描的方法显示在LED灯上。
(5)将第二步得到的数字信号与2.5V作比较,将比较结果送DAC0832,再将DAC0832得到的模拟量送ADC0809的通道1转化成数字量存入VV中,将VV对应的电压值送到屏幕上显示。
(6)用相同的方法从第一步开始循环,在循环前判断键盘上是否有结束符输入。
四、程序框图
1、主程序流程图
2、LED灯动态扫描显示程序流程图
3、CRT显示子程序流程图
五、实验结果、体会和建议
实验结果
通过调节电阻电位值,LED灯连续显示00H~FFH,而且高位的LED灯明显比低位稳定明亮;CRT上当电阻的电位大于等于2.5V时显示5.00,当电阻的电位值小于2.5V时显示0.00。
实验结果与要求相符。
。
实验体会
通过本次课程设计,我加深了对ADC0809、DAC0832、8255等芯片的认识,熟悉了LED数码管的使用,更加熟练地掌握了DOS的各种功能调用命令,计算机硬件技术基础知识的运用能力得到进一步提高。
这次的课设整体思路比较清晰,所以对编程思想来说比较清楚,就是将平时学习的各种接口芯片综合起来进行应用。
1、硬件连线方面
本次硬件连线较为简单,线路数目也不多。
需要注意的问题是:
要将同一根线连接的两个端口的高低位对好,需要颜色一致,否则容易出现混乱,影响结果。
2、软件编程方面
本次软件编程的程序较长,编写程序时需要采取分块的思路,先明确主要步骤有哪些,画出流程图,再进行语句编写。
ADC0809主要是明确通道0和通道1的地址,还有通过EOC的高低电平的查询判断判别信号是否转换完毕。
8255一般是用作接口通道,使用前要注意通过对控制端口的初始化来控制端口的工作方式,在本次课设中8255主要是用来为CPU提供查询EOC信号的通道,以及提供LED动态扫描显示的段码控制口和位码控制口。
CRT是显示ADC0809IN1采集的数字量对应的电压值,需要用DOS功能调用显示电压值0.00和5.00。
另外,本次编程涉及到的变量地址比较多,所以不再将地址直接列在各条程序语句中,而是将地址先用‘EQU’语句定义在程序开头,再在程序中直接使用变量名,大大方便了编程和修改。
3、数码管使用方面
虽然在之前的硬件实验中也用到过数码管,但对它的使用方法并不是非常了解,这也是本次课设中遇到的一个比较大的困难。
比如如何协调段码和位码,应当先将段码表对应好,通过8255的端口控制位码和段码,并且注意适当的延时保证显示效果。
4、实验中应该注意的问题
1芯片的地址一定要确保译码正确,否则芯片无法使用。
我们就遇到了数码管不亮灯情况,究其原因是8255芯片的片选地址接错了
2在DEBUG程序时,如果出现几十甚至上百个ERROR不要畏惧,很多ERROR是有关联的,改几个后你就会发现明显减少了,要注意避免出现中文逗号
3遇到程序出现很奇怪的问题时,最好用单步执行的方法,耐心寻找错误,用这种方法是最有效最踏实的方法,像器件损坏之类的问题都可以检查出来
4接线时一定注意线的顺序,看清楚每根线的颜色,避免接错
5数码管显示时,要延时适当时间,时间长短视显示效果而定
附录:
程序清单
IOY0EQU3000H
IOY1EQU3040H
IOY2EQU3080H
PA8255EQUIOY0+00H*4;8255的A口地址
PB8255EQUIOY0+01H*4;8255的B口地址
PC8255EQUIOY0+02H*4;8255的C口地址
PCTLEQUIOY0+03H*4;8255的控制寄存器地址
ADCSIN0EQUIOY1+00H*4;ADC0809的IN0地址
ADCSIN1EQUIOY1+01H*4;ADC0809的IN1地址
DACSEQUIOY2;DAC0832的端口地址
DATASEGMENT
BUFDB2DUP(?
)
VVDB?
;存储屏幕上要显示电压值对应的数字量
BUFFDB?
;存储LED灯要显示的两位十六进制
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
MESDB'Welcome!
',0DH,0AH,'$'
MESSDB'Press1toBegin!
',0DH,0AH
DB'Press2toEnd!
',0DH,0AH,'$'
TIPMESDB'Start!
',0DH,0AH
DB'Press2toreturntomainmenu!
',0DH,0AH,'$'
DATAENDS
STACSEGMENTPARASTACK'STACK'
DB200HDUP(?
)
STACENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES
MOVAH,09H
INT21H
LOPP:
MOVDX,OFFSETMESS
MOVAH,09H
INT21H;界面显示
LOP1:
MOVDL,0FFH
MOVAH,6
INT21H;等待键盘输入
CMPAL,31H
JZBEG
CMPAL,32H
JZEXIT
JMPLOP1;判断不同的输入执行不同的功能
EXIT:
MOVAH,4CH
INT21H
BEG:
MOVDX,OFFSETTIPMES
MOVAH,09H
INT21H
AD_GET:
MOVDX,ADCSIN0
OUTDX,AL;启动0809IN0转换
MOVDX,PCTL
MOVAL,90H
OUTDX,AL;对8255控制端口初始化,设置A口工作方式
MOVDX,PA8255
WAIT1:
INAL,DX
TESTAL,01H
JZWAIT1;查询等待0809转换完成
MOVDX,ADCSIN0
INAL,DX
XORAH,AH
PUSHAX;保护AX中的值
MOVCL,04H
SHLAX,CL
SHRAL,CL
MOVSI,OFFSETBUF
MOV[SI],AL
MOV[SI+1],AH
POPAX
CMPAL,80H;与2.5V比较,比较结果送入0832转换
JNBFULL
MOVAL,00H
JMPDA_OUT
FULL:
MOVAL,0FFH
DA_OUT:
MOVDX,DACS
OUTDX,AL
MOVDX,ADCSIN1
OUTDX,AL;启动0809IN1转换
MOVDX,PCTL
MOVAL,90H
OUTDX,AL;对8255控制端口初始化,设置A口工作方式
MOVDX,PA8255
WAIT2:
INAL,DX
TESTAL,01H
JZWAIT2;查询等待0809转换完成
MOVDX,ADCSIN1
INAL,DX
MOVVV,AL
CALLLED;动态显示LED灯
CALLDISP;将IN1采集到的数据转换成对应的电压值
MOVDL,0FFH
MOVAH,06H
INT21H
CMPAL,32H;判断是否有结束符输入,若有则结束采集
JNZAD_GET
JMPLOPP
LEDPROC;LED灯动态扫描显示程序
MOVSI,OFFSETBUF
MOVCL,02H;CL中的值用于选灯(位值)
DISI:
MOVAL,[SI]
MOVBX,OFFSETTAB
XLAT
MOVBUFF,AL
MOVDX,PCTL
MOVAL,80H
OUTDX,AL;对8255控制端口初始化,设置B口和C口工作方式
MOVDX,PB8255
MOVAL,BUFF
OUTDX,AL;输出段码
MOVAL,CL
MOVDX,PC8255
OUTDX,AL;输出位码
CALLDLY;调用延时程序,保证LED灯的显示效果
CMPCL,01H;判断动态扫描是否结束
JZQUIT
DECCL;位码向右移1位
INCSI;段码地址+1
JMPDISI
QUIT:
RET
LEDENDP
DISPPROC;CRT显示子程序
PUSHAX
PUSHDX
PUSHCX;保护现场,使用的寄存器有AX,DX,CX
MOVAH,2
MOVDL,08H
INT21H
INT21H
INT21H
INT21H
MOVAL,VV
CMPAL,80H;判断0809IN1转换结果的大小
JNBBIG
SMAL:
MOVDL,30H
MOVAH,02H
INT21H;输出电压值0.00
JMPDOT
BIG:
MOVDL,35H
MOVAH,02H
INT21H;输出电压值5.00
DOT:
MOVDL,2EH
MOVAH,02H
INT21H
MOVDL,30H
MOVAH,02H
INT21H
INT21H;输出两个0,使输出精度为小数点后两位
EXITY:
POPCX
POPDX
POPAX
RET
DISPENDP
DELAYPROC;副延时程序
PUSHCX
MOVCX,0FFFH
LOOP$
POPCX
RET
DELAYENDP
DLYPROC;主延时程序,两个延时程序的延时时间不同,方便配合使用
PUSHCX
MOVCX,0FFH
DLY1:
CALLDELAY
LOOPDLY1
POPCX
RET
DLYENDP
CODEENDS
ENDSTART